データベースの正規化が私の神経質になりつつあります。私はお互いの友達を見つけるシナリオがあるとします。データベースで3つのフィールドを使用しています
conn_id
,user_id
,friend_id
user_idはユーザの通常のIDを表し、友達IDは同じを表します。私はただ各ユーザを友達に関連付けようとしています。
ユーザーIDを入力し、友達IDを入力します。 それぞれ1レコード
例えば:
conn_id | user_id | friend_id
1 - us1 - us2
2 - us1 - us3
3 - us1 - us5
4 - us3 - us1
5 - us3 - us6
........................................等々
データベースの正規化にどのように準拠しないのですか?
EDIT (コメントからの説明):
user1 - user2のレコードが1つあると誰かが私を混乱させました。そして、user2 - user1の別のレコード:正規化に違反していませんか?
回答:
回答№1は1一般的な正規化違反はタッキングです。行がすでにある列またはその中の列の組み合わせによって一意に識別されている場合は、IDのシーケンス番号の1つ。もちろん、人々はこれをいつもやっています。スキーマを正規化したままにする理由はたくさんあります ない そうするために。
そのようなことがここにあります。 (user_id、friend_id)の重複エントリがあることに意味がない場合は、その列の組み合わせを主キーとして使用できます。シーケンス番号がそれ自体で実際に意味のあるものでない限り、正規化の観点からは無関係です。
更新
あなたが以下に提示するもう一つの考慮事項は、重複するレコードの可能性です。 (u1→u2)および(u2→u1)。これは友情が交換可能であるかどうかの問題に帰着します。
user2がuser1の友達の場合、user1も必ずuser2の友人ですか?友情が交換可能な場合は、重複するレコードがあります。これがソーシャルアプリのようなものであれば、「そうではないし、まったく重複したレコードにはならないだろう」と思います。それらは完全に独立した2つの関係を表します。