遵守数据库规范化

时间:2012-11-25 04:57:26

标签: database database-normalization

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

conn_iduser_idfriend_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。用户2的另一条记录 - user1:这不违反规范化,是吗?

1 个答案:

答案 0 :(得分:1)

常见的规范化违规是当行已经由某些列或其中的列组合唯一地标识时,对id的序列号进行处理。当然人们总是这样做。有理由保持您的模式正常化,并且还有很多理由这样做。

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

<强>更新

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

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