一张桌子有多对一关系

时间:2020-03-31 12:04:40

标签: database-design entity-framework-core relation

已经有一段时间了,因为我不得不重做一个完整的数据库,并且我对一个非常基本的问题提出了质疑,但我无法通过搜索找到正确的答案。好像我缺少什么。

三个表(在 Entity Framework Core 中工作)

  • 客户
  • 公司
  • 地址

客户可以有多个地址,公司可以有多个地址,但是同一地址不应与两者都相关,因此只允许一个。而且我似乎找不到最正确的方法来做到这一点。目前,我在地址上有两个FK,因此其中一个始终为空,但感觉很奇怪。

由于EF Core还不支持table-per-type,因此一直在考虑创建从Address继承并使用逐级表方法的ClientAddress&CompanyAddress。它们都具有相同的字段,但只有关系会有所不同,但不确定这是否也是正确的方法。

这里有什么建议吗?

1 个答案:

答案 0 :(得分:-1)

addresses有两个可选的FK,其中一个引用clients,而另一个引用companies,因此对于任何给定的地址行,其中一个是NULL,这是一个正确的表示。地址与客户或公司之间的替代(XOR-)关联。

因此,无需在“ ClientAddress”和“ CompanyAddress”之间进行人为区分来破坏您的设计。