SQL - 复杂的链接表,没有简单的解决方案

时间:2014-04-14 09:22:50

标签: sql sql-server database

我正在开发一个数据结构相对复杂的项目,我们对以下情况感到有点困惑:

db有各种表格,代表玻璃单元*组件(玻璃板,涂层,百叶窗),这些组件中的每一个都有一个光谱。 (*玻璃单元 - 认为双层/三层玻璃单元) 现在我们每个组件表可以有一个光谱表,并且会有一个简单的FK关系,如下所示:

tbl_glasspane    1 -- many   tbl_glasspane_spectra
-------------                -------------
+ Id                         + GlassPane_Id
  GlassPaneName              + Wavelength
  TypeId etc.                  Value

其中GlassPaneId是GlassPane中的主键,而GlassPaneId / Wavelength是tbl_spectra中的复合主键。

这样可以正常工作,但是每个组件表需要一个tbl_xxx_spectra。

对此的解决方案是有一个Spectra表,每个组件表都会引用,但其中存在问题 - 如何获得任意数量的组件表以引用一个光谱表?

我最初的解决方案是:

tbl_spectra          tbl_spectraIndex    tbl_glasspane       tbl_coating
---------------      ---------------     -------------       -------------
+ SpectraIndex_Id    + Id                + Id                + Id
+ Wavelength                               SpectraIndex_Id     SpectraIndex_Id
  Value

所以解释......

tbl_spectraIndex是一个包含一个标识列的表。 tbl_spectra在来自tbl_spectraIndex和SpectraIndex_Id的Id之间具有FK关系,这是tbl_spectra的复合PK的一部分。 tbl_glasspane和tbl_coating与tbl_spectraIndex有FK关系。

这是一个明智的解决方案吗?

1 个答案:

答案 0 :(得分:0)

在这种情况下,最好使用非规范化模式。您可以使用一个包含两个字段的单个光谱表:一个是存储光谱所属对象(表)类型的int。另一个是链接到表ID的int。在这种情况下,光谱表链接到具有相同字段的多个表。我倾向于使用我的地址表来执行此操作。在我的数据库中,我有许多对象需要关联一个或多个地址对象,而每个地址都有相同的字段。所以我创建了一个单独的地址表,其中两个字段就像我提前提到的那样,一个用于表示要表示的对象类型,另一个用于指向实际对象的链接。

您还考虑将所有玻璃桌放在一张大桌子上吗?希望它可以帮到你。