我们需要一个以下问题的解决方案,这个问题也是有道理的,也可以遵循最佳实践,而不会让事情变得复杂。
我们有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个表,其中包含有效的重复数据。
这样做的最佳方式是什么?
答案 0 :(得分:0)
我会创建一个单独的表。我没有反对NULL FK(很多人都这样做),但拥有一个表意味着你无论如何都会有重复的数据。例如。如果Bob的B& B在加利福尼亚州开设分支机构,您将在表格中有重复的条目,指定“Bob的B& B”和“Accommodation”之间的关系。拥有单个表也意味着您必须在此表的任何联接中包含DISTINCT
,仅涉及CompanyID和SectorID列(如果LocationID可以为空,这似乎很可能)。
实际上,您将拥有两个多对多关系:
(Company) <-> (Sector)
和
(Company/Sector) <-> (Location)
使用两个链接表来模拟两种不同的关系是有意义的。如果您需要一个表中的所有3个条目(为方便起见),您始终可以创建索引视图。