-1

我们需要一个解决以下问题的方法,它是有意义的,并且遵循最佳实践而不会使事情变得复杂。

我们有 3 个需要链接的表,即SectorLocationCompany

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

所以我们决定简单地创建一个“ CompanySectorLocation ”表,它有 3 个主键链接 3 个表:

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

这里的弧形球是不需要位置的。

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

我的开发人员非常反对拥有一个允许NULL FK的表。他的建议是创建另一个名为CompanySector的表,该表将处理Company和未定义Location的Sector之间的链接。

CompanySector
    CompanyID (PK FK)
    SectorID (PK FK)

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

做这个的最好方式是什么?

4

1 回答 1

0

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

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

(Company) <-> (Sector)

(Company/Sector) <-> (Location)

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

于 2012-06-11T16:53:01.623 回答