2014-04-14 49 views
0

我的工作,有一個相對複雜的數據結構的項目,我們都有點有以下情況難住了:SQL - 複雜的鏈接表,沒有簡單的解決

的數據塊具有代表玻璃窗各種表*組件(玻璃板,塗層,盲板)以及這些組件中的每一個都有一個光譜。 (*玻璃窗單元 - 認爲雙/三玻璃窗的玻璃單元) 現在我們可以有每分量表中的一個的光譜表,並且將有一個簡單的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

在這種情況下最好使用非規格化模式。您可以使用帶有兩個字段的單個譜圖表:一個是存儲譜圖所屬的對象類型(表格)的整數。另一個是鏈接到表ID的int。在這種情況下,譜圖表與相同字段的多個錶鏈接。我傾向於使用我的地址表來完成此操作。在我的數據庫中,我有很多對象需要有一個或多個地址對象關聯,而每個地址都有相同的字段。所以我創建了一個地址表,有兩個字段,像我提到的那樣,一個表示要表示的對象的類型,另一個表示與實際對象的鏈接。

你也考慮把你所有的玻璃桌放在一張大桌子上嗎?希望它可以幫助你。