SQL数据库中的一对一关系

时间:2012-10-31 11:00:13

标签: entity-framework database-design relational-database

我有两个表:“人物”和“详细信息”。人应该与细节具有一对一的关系。我有两个选择:

  1. 在Details表中写入DetailsId并将其FK改为Details.Id(PK);
  2. 与Person.Id同时将Details.PersonId作为PK和FK;
  3. 在这两种情况下,关系是一对一的。你能解释哪一个更好,在什么情况下?

    编辑:

    我正在使用实体框架,并希望得到如下的详细信息:Person.Detail,而不是Person.Details.First()

3 个答案:

答案 0 :(得分:3)

制作两个表“人物”和“详细信息”。 在“详细信息”表中,取一个字段“person_id”,它将是您的FK,它将引用“Person”表的id字段(PK)。 这是更好的解决方案。 因为“详细信息”表将需要比“人员”表更多的操作,如更新等。因此,将“人”表作为Master& “细节”作为奴隶。

答案 1 :(得分:2)

对于真正的 1:1 关系,您的默认解决方案应该是将表合并在一起,除非specific reasons对其进行合并。

但我怀疑你实际上是在谈论 1:0..1 ,在这种情况下,(2)会模拟你需要的东西。

我不明白(1) - 自我引用FK的目的是什么?你真的是指一个人参考细节的FK吗?

答案 2 :(得分:2)

是否有专门的“人”子类?在这种情况下,您可能希望拥有两个以上的表,每个子类具有不同的子类表。请参阅SO中的标签“[Class Table Inheritance]”。您还应该查找“[Shared-Primary-Key]”标签。它比为子类表单独使用FK和PK更好。

您还需要考虑选择单个表解决方案的好处和成本。