EF - 链接表的多个主键

时间:2012-06-11 14:33:24

标签: c# entity-framework-4.1 foreign-key-relationship multiple-tables

我们需要一个以下问题的解决方案,这个问题也是有道理的,也可以遵循最佳实践,而不会让事情变得复杂。

我们有3个表需要关联,行业地点公司

即:公司“Bobs B& B”位于区段“住宿”,位于位置“纽约”。 对于酒店集团,我们可以在多个地区的多个行业中拥有一家公司。

所以我们决定只创建一个“ CompanySectorLocation ”表,其中有3个主键连接3个表:

CompanySectorLocation
    CompanyID (PK FK)
    SectorID (PK FK)
    LocationID (PK FK)

这里的弯曲球是不需要位置。

即:“Protea Hotels”在“Accomodation”部门中处于活动状态,将该位置保留为 NULL

我的开发人员非常反对拥有允许 NULL FK 的表格。他的建议是创建另一个名为 CompanySector 的表格,该表格将处理公司行业之间的链接,其中位置是没有定义。

CompanySector
    CompanyID (PK FK)
    SectorID (PK FK)

我的问题是我们必须维护2个表,其中包含有效的重复数据。

这样做的最佳方式是什么?

1 个答案:

答案 0 :(得分:0)

我会创建一个单独的表。我没有反对NULL FK(很多人都这样做),但拥有一个表意味着你无论如何都会有重复的数据。例如。如果Bob的B& B在加利福尼亚州开设分支机构,您将在表格中有重复的条目,指定“Bob的B& B”和“Accommodation”之间的关系。拥有单个表也意味着您必须在此表的任何联接中包含DISTINCT,仅涉及CompanyID和SectorID列(如果LocationID可以为空,这似乎很可能)。

实际上,您将拥有两个多对多关系:

(Company) <-> (Sector)

(Company/Sector) <-> (Location)

使用两个链接表来模拟两种不同的关系是有意义的。如果您需要一个表中的所有3个条目(为方便起见),您始终可以创建索引视图。