1

データベースの正規化には神経質になっています。共通の友達を見つけるシナリオがあるとします。そして、データベースで3つのフィールドを使用しています

conn_iduser_idfriend_id

user_id はユーザーの通常の ID を表し、フレンド ID は同じものを表します。各ユーザーをフレンドと関連付けようとしています。

ここで、ユーザー ID とフレンド ID をそれぞれ 1 レコードずつ入力します

例えば:

conn_id | ユーザー ID |フレンド ID

1 - us1 - us2

2 - us1 - us3

3 - us1 - us5

4 - us3 - us1

5 - us3 - us6

........................................等々

データベースの正規化に準拠していないのはなぜですか?

編集(コメントからの明確化):

user1 - user2 のレコードが 1 つあると言って、誰かが私を混乱させました。user2 の別のレコード -- user1 : これは正規化に違反していませんね。

4

1 に答える 1

1

一般的な正規化違反は、列またはその列の組み合わせによって行がすでに一意に識別されている場合に、ID のシーケンス番号を追加することです。もちろん、人々は常にこれを行っています。スキーマを正規化する理由とそうでない理由はたくさんあります。

ここはそうみたいですね。(user_id、friend_id) の重複するエントリを持つことに意味がない場合は、その列の組み合わせを主キーとして使用できます。シーケンス番号は、それ自体で実際に意味がある場合を除き、正規化の観点からは無関係である可能性があります。

アップデート

以下で取り上げるもう 1 つの考慮事項は、(u1 -> u2) と (u2 -> u1) などの重複レコードの可能性です。これは、友情が交換可能かどうかという問題に帰着します。

user2 が user1 の友達の場合、user1 も必ず user2 の友達ですか? 友情が交換可能である場合、重複したレコードが発生します。これがソーシャル アプリのようなものである場合は、そうではなく、レコードがまったく重複していないと思います。これらは 2 つの完全に独立した関係を表しています。

于 2012-11-25T05:06:38.947 に答える