1

数据库规范化让我很紧张。假设我有一个寻找共同朋友的场景。我在我的数据库中使用三个字段

conn_id, user_id,friend_id

user_id 代表用户的普通 id,朋友 id 代表相同,我只是试图将每个用户与朋友联系起来。

我现在输入一个用户ID,然后输入朋友ID,每个记录一个

例如:

conn_id | user_id |friend_id

1 - us1 - us2

2 - us1 - us3

3 - us1 - us5

4 - us3 - us1

5 - us3 - us6

........................................等等

它如何不符合数据库规范化?

编辑(评论澄清):

有人让我感到困惑,说我与 user1 -- user2 有一个记录。还有一条 user2 的记录—— user1 :这不违反规范化,是吗?

4

1 回答 1

1

一个常见的规范化违规是当行已经由其中的某个列或列的组合唯一标识时,为 id 添加序列号。当然,人们总是这样做。有理由保持你的模式标准化,也有很多理由这样做。

看起来就是这种情况。如果 (user_id,friend_id) 的重复条目没有意义,则该列组合可以用作主键。除非序列号本身实际上是有意义的,否则从规范化的角度来看,它可能是无关紧要的。

更新

您在下面提出的另一个考虑因素是重复记录的可能性,例如 (u1 -> u2) 和 (u2 -> u1)。这归结为友谊是否可交换的问题。

如果 user2 是 user1 的朋友,那么 user1 也一定是 user2 的朋友吗?如果友谊是可交换的,那么您将拥有重复的记录。如果这类似于社交应用程序,我会假设情况并非如此,并且根本不会是重复记录:它们代表两个完全独立的关系。

于 2012-11-25T05:06:38.947 回答