我正在开发一个数据结构相对复杂的项目,我们对以下情况感到有点困惑:
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关系。
这是一个明智的解决方案吗?
答案 0 :(得分:0)
在这种情况下,最好使用非规范化模式。您可以使用一个包含两个字段的单个光谱表:一个是存储光谱所属对象(表)类型的int。另一个是链接到表ID的int。在这种情况下,光谱表链接到具有相同字段的多个表。我倾向于使用我的地址表来执行此操作。在我的数据库中,我有许多对象需要关联一个或多个地址对象,而每个地址都有相同的字段。所以我创建了一个单独的地址表,其中两个字段就像我提前提到的那样,一个用于表示要表示的对象类型,另一个用于指向实际对象的链接。
您还考虑将所有玻璃桌放在一张大桌子上吗?希望它可以帮到你。