当一个权限有一些记录引用同一个表中的其他记录时,数据库表的最佳设计是什么?

时间:2016-07-11 09:05:12

标签: database-design

我设计了一个代表一小群人的小型数据库,主表中的列类似于IDFull_Namebirth_Date,{{1等等..

就关系(单身或已婚)而言,我有三种可能性:

  • 一个人可能是一个人(我们通过一个持有0 的字段来引用它。)

  • 一个人可能处于关系中,但在这个社区之外(说我们通过一个持有值1 的字段来引用它。)

  • 一个人可能与此社区内的某个人有关系(我们引用的是1,但我们需要引用第二个人{=他的ID}来检索他的数据

这种问题的最佳实用设计是什么?

此设计

Address

  • 单身:Person (ID, Name, Birth_Date, is_Married, Partner_ID)
  • 嫁给局外人:Partner_ID = 0
  • 其他:(在社区内结婚):Partner_ID =1将引用另一个    记录在同一张表中。

或者

Partner_ID
  • 单身:Person (ID, Name, Birth_Date, Relationship_ID) Relationships (ID, Person_ID, Partner_ID)

  • 嫁给局外人:Person.Relationship_ID = 0以及Person.Relationship_ID <> 0

  • 其他(在社区内结婚):Relationships.Partner_ID = 0以及Person.Relationship_ID <> 0

1 个答案:

答案 0 :(得分:0)

如果你正在使用一个巨大的,非常好的项目,那么第二个将被推荐(第二个是正确的方法,它符合所有规范化法则,需要做一个小的改变,从第一个表中删除RelationShip_ID)。 Person_ID字段将连接两个表

否则您可以使用第一个场景(将allow allow null添加到Partner_ID)。许多实时项目正在使用第一个选项。所以别担心:)