我有两个表:“人员”和“详细信息”。Person 应该与 Details 具有一对一的关系。我有两个选择:
- 将DetailsId写入Details表并使其FK到Details.Id(PK);
- 将Details.PersonId同时作为PK和FK到Person.Id;
在这两种情况下,关系都是一对一的。你能解释一下哪一个更好,在什么情况下?
编辑:
我正在使用实体框架并希望获得这样的详细信息:Person.Detail,而不是 Person.Details.First()
我有两个表:“人员”和“详细信息”。Person 应该与 Details 具有一对一的关系。我有两个选择:
在这两种情况下,关系都是一对一的。你能解释一下哪一个更好,在什么情况下?
编辑:
我正在使用实体框架并希望获得这样的详细信息:Person.Detail,而不是 Person.Details.First()
制作两个表“Person”和“Details”。在“详细信息”表中,取一个字段“person_id”,这将是您的 FK,它将引用“Person”表的 id 字段(PK)。那是更好的解决方案。因为“详细信息”表将需要比“人员”表更多的操作,如更新等。因此,将“Person”表设为 Master,将“Details”设为从机。
“人”有专门的子类吗?在这种情况下,您可能希望有两个以上的表,每个子类都有一个不同的子类表。请参阅 SO 中的标签“[Class Table Inheritance]”。您还应该查找标签“[Shared-Primary-Key]”。它比为子类表使用单独的 FK 和 PK 效果更好。
您还需要考虑选择单表解决方案的好处和成本。
对于真正的1:1关系,您的默认解决方案应该是将表合并在一起,除非有特定的理由反对它。
但我怀疑你实际上是在谈论1:0..1,在这种情况下 (2) 将模拟你所需要的。
我不明白 (1) - 那里自引用 FK 的目的是什么?您实际上是指 FK in Person 引用详细信息吗?