0

私は母親に関連するサイトを開発しています。誰でもサイトに登録でき、母親について、または母親についての一般的なコメントを書くことができます

1)母親もユーザーの一部になることができます(登録ユーザーテーブル)

2)彼女が登録ユーザーテーブルに存在しない場合、ユーザーは母親の名前を記入する必要があります

3)母親とは関係なく、母親に関する一般的なトピックを書いてください

ユーザーテーブル:-

 `user_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `user_name` varchar(25) CHARACTER SET latin1 NOT NULL,
  `surname` varchar(30) CHARACTER SET latin1 NOT NULL,
  `name` varchar(30) CHARACTER SET latin1 NOT NULL,

マザーズテーブルについて(1件目):-

  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `mother_id` int(10) unsigned NOT NULL,  ( user_id of the above table)
  `subject` varchar(150) NOT NULL,
  `details` text NOT NULL,

上記の表は、母親がシステムに存在するかどうかを示しています

マザーズテーブルについて(2番目のケース):-

  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `mother_name` varchar(50) unsigned NOT NULL,  
  `subject` varchar(150) NOT NULL,
  `details` text NOT NULL,

上記の表は、母親がシステムに存在しない場合を扱っています

マザーズテーブルについて(3番目のケース):-

  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `subject` varchar(150) NOT NULL,
  `details` text NOT NULL,

上記の表は、それが母親について一般的であるかどうかを扱っています

ここで、母親の明確なリストを表示します(母親の詳細ではなく、最近の母親が最初です)

名前を取得するには、最初の母親のテーブルをユーザーテーブルと結合し、2番目の母親のテーブルと結合して日付で降順にする必要があります。

母親の詳細を表示する必要がある場合

ユニオン3つのテーブルが日付順に降順で表示されます

私がこれを複雑にしていると私が思ういくつかの方法。

3つのテーブルを1つのテーブルに結合すると、IDは存在しないNullになり、一般的なコメントの場合はIDと母の名前がnullになります。誰かが私にこれのための最良の設計アプローチを与えることができますか?

ありがとうございました

よろしく

キラン

4

1 に答える 1

1

母親もユーザーになることができ、各子供が母親について最大1つのコメントを書くことができると仮定すると、次のようなものが必要になるようです。

ここに画像の説明を入力してください

特定のフィールドのNULL可能性を制限して、ある人に母親がいる場合、その人が登録ユーザー(ユーザー名を持つ)であり、件名と説明が存在することを確認する必要があります。

CHECK (
    (MOTHER_ID IS NULL AND MOTHER_SUBJECT IS NULL AND MOTHER_DETAILS IS NULL)
    OR (USER_NAME IS NOT NULL AND MOTHER_ID IS NOT NULL AND MOTHER_SUBJECT IS NOT NULL AND MOTHER_DETAILS IS NOT NULL)
)

母親でもあるすべての人を取得するには、次のようなことを行うことができます。

SELECT *
FROM PERSON T1
WHERE EXISTS (
    SELECT *
    FROM PERSON T2
    WHERE T1.PERSON_ID = T2.MOTHER_ID
)

平易な英語で:少なくとも1人の母親である人を選択してください。

このクエリを最適に実行するには、MOTHER_IDにインデックスが必要です(一部のデータベースでは、外部キーにインデックスが自動的に作成されます)。

- - 編集 - -

ユーザーが母親について多くの思い出を書くことができる場合、デザインは次のようになります。

ここに画像の説明を入力してください

残念ながら、これにより、非ユーザーがメモリを書き込む状況が可能になります。それを絶対に回避する必要がある場合は、外部キーの親エンドポイントとしてNULL可能なUNIQUE制約を使用できるデータベースを使用し、PERSON_IDの代わりにUSER_NAMEを使用してテーブルを接続するか、複雑さを気にしない場合は、これ:

ここに画像の説明を入力してください

記号:ここに画像の説明を入力してくださいはカテゴリ(別名、継承、一般化階層など)を示しますが、この特定のモデルにはひねりがあります。PERSONはUSERとMOTHERの両方になることができます(つまり、これはいわゆる「非識別」カテゴリです)。

于 2012-05-25T14:33:26.067 に答える