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



我正在设计一个代表一小群人的小型数据库,主表中的列类似于IDFull_Namebirth_DateAddress等。

在关系(单身或已婚)方面,我有三种可能性:

    一个人
  • 可能是一个人(假设我们通过一个保存值 0 的字段来引用它)。

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

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

这个问题的最佳实际设计是什么?

此设计

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 <> 0Relationships.Partner_ID = 0

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

如果您正在使用一个庞大且提及良好的项目,那么将推荐第二个(第二个是正确的方法,它符合所有规范化定律,需要做一个小的更改,从第一个表中删除RelationShip_ID)。字段Person_ID将连接两个表

否则,您可以使用第一种方案(将允许空值设置为Partner_ID)。很多实时项目都在使用第一个选项,所以不用担心。

最新更新