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

SQL-复杂的链接表,没有简单的解决方案,sql,sql-server,database,Sql,Sql Server,Database,我正在从事一个数据结构相对复杂的项目,我们遇到了以下情况: db有各种表,表示玻璃单元*组件(窗格玻璃、涂层、遮阳帘),这些组件中的每一个都有光谱。(*嵌装玻璃单元-考虑双层/三层嵌装玻璃单元) 现在,我们可以为每个成分表创建一个光谱表,并且会有一个简单的FK关系,如下所示: tbl_glasspane 1 -- many tbl_glasspane_spectra ------------- ------------- + Id

我正在从事一个数据结构相对复杂的项目,我们遇到了以下情况:

db有各种表,表示玻璃单元*组件(窗格玻璃、涂层、遮阳帘),这些组件中的每一个都有光谱。(*嵌装玻璃单元-考虑双层/三层嵌装玻璃单元) 现在,我们可以为每个成分表创建一个光谱表,并且会有一个简单的FK关系,如下所示:

tbl_glasspane    1 -- many   tbl_glasspane_spectra
-------------                -------------
+ Id                         + GlassPane_Id
  GlassPaneName              + Wavelength
  TypeId etc.                  Value
其中GlassPaneId是GlassPane中的主键,GlassPaneId/波长是tbl_光谱中的复合主键

这很好,但是我们需要一个tbl_xxx_光谱用于每个成分表

解决这个问题的办法是有一个光谱表,每个成分表都会引用,但问题在于-如何获得任意数量的成分表来引用一个光谱表

我最初的解决办法是:

tbl_spectra          tbl_spectraIndex    tbl_glasspane       tbl_coating
---------------      ---------------     -------------       -------------
+ SpectraIndex_Id    + Id                + Id                + Id
+ Wavelength                               SpectraIndex_Id     SpectraIndex_Id
  Value
所以一个解释

tbl_spectraIndex是一个包含一个标识列的表。tbl_光谱在来自tbl_spectraIndex的Id和spectraIndex_Id之间具有FK关系,这是tbl_光谱复合PK的一部分。tbl_窗格玻璃和tbl_涂层与tbl_光谱指数具有FK关系


这是一个合理的解决方案吗?

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

你还把所有的玻璃桌子都放在一张大桌子上吗?希望对你有帮助