SQL-复杂的链接表,没有简单的解决方案
我正在从事一个数据结构相对复杂的项目,我们遇到了以下情况: db有各种表,表示玻璃单元*组件(窗格玻璃、涂层、遮阳帘),这些组件中的每一个都有光谱。(*嵌装玻璃单元-考虑双层/三层嵌装玻璃单元) 现在,我们可以为每个成分表创建一个光谱表,并且会有一个简单的FK关系,如下所示:SQL-复杂的链接表,没有简单的解决方案,sql,sql-server,database,Sql,Sql Server,Database,我正在从事一个数据结构相对复杂的项目,我们遇到了以下情况: db有各种表,表示玻璃单元*组件(窗格玻璃、涂层、遮阳帘),这些组件中的每一个都有光谱。(*嵌装玻璃单元-考虑双层/三层嵌装玻璃单元) 现在,我们可以为每个成分表创建一个光谱表,并且会有一个简单的FK关系,如下所示: tbl_glasspane 1 -- many tbl_glasspane_spectra ------------- ------------- + Id
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表链接到具有相同字段的多个表。我倾向于这样做,例如我的地址表。在我的数据库中,有许多对象需要关联一个或多个地址对象,而每个地址都有相同的字段。因此,我创建了一个地址表,其中有两个字段,如我前面提到的,一个表示要表示的对象类型,另一个带有指向实际对象的链接 你还把所有的玻璃桌子都放在一张大桌子上吗?希望对你有帮助