我设计了一个代表一小群人的小型数据库,主表中的列类似于ID
,Full_Name
,birth_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
答案 0 :(得分:0)
如果你正在使用一个巨大的,非常好的项目,那么第二个将被推荐(第二个是正确的方法,它符合所有规范化法则,需要做一个小的改变,从第一个表中删除RelationShip_ID)。 Person_ID字段将连接两个表
否则您可以使用第一个场景(将allow allow null添加到Partner_ID)。许多实时项目正在使用第一个选项。所以别担心:)