此建模中是否有任何异常?

时间:2016-02-27 16:05:31

标签: sql sql-server entity-framework database-design ef-fluent-api

Model Sample

我正在使用表来集中地址。 客户供应商会提及地址。

客户地址地址可能与客户相关联,也可能没有。< / p>

供应商地址地址可能与供应商相关联,也可能没有。< / p>

为确保地址与多个客户供应商无关,我在上有唯一索引 AddressID 列上的客户供应商表。

我怀疑这种关系是不正常的,因为我无法使用FluentAPI使用Entity-Framework映射它。

修改

  • 在我的实际场景中,地址表将包含更多列。 事实上,这是一种简化复杂场景的改编 地址表是财务发布和表客户和 供应商代表财务发布的起源,如 买卖。

2 个答案:

答案 0 :(得分:1)

你的模特似乎合情合理。当你想要强制执行1-1关系时,拥有第二个表的优点对每个人来说可能并不明显。

我可以想到两个不错的理由:

  • 您希望地址在一个地方,以便您可以等效地处理所有地址(例如对它们进行地理编码,标准化,提取功能)。
  • 地址列很长,许多查询都不需要它,因此您可以通过不将地址与其余数据一起存储来获得效率(&#34;垂直分区&#34;)。

可能还有其他原因。我不能说为什么EF难以表达这种关系。

答案 1 :(得分:1)

在您当前的设计中,这不是EF问题,而且它本身不能阻止您为客户和供应商分配相同的地址。如果您走这条路,您将负责通过模型中的业务规则和验证来强制执行此唯一性。

另一方面,除了Linoff在答案中指出的内容之外,您的模型设计的正确性(或不正确性)取决于您的问题的性质以及您的业务的重要性和地址。例如,如果这是Post Office的应用程序,那么Address是一个单独的表,因为它将是您的应用程序的核心概念之一。但如果没有,使用当前的方法,您将增加模型的复杂性。