我正在尋找一種有效的方法來構建可處理以下情形的數據庫模型: 模型需要處理未定義深度的層次結構,其中每個節點可以有0到3(最多)每個孩子可以是5-7種不同類型的孩子。多態層次結構DB設計
以下是我需要支持的示例樹,其中'foo','bar'等每個都將在不同的表中輸入,並且數字引用該表中的id。假設foo.1,bar.2和foo.3是頂級節點。 Base對於我來說只是一個虛擬對象,指向未知類型的頂級節點。
Base.1
|-foo.1
|-foo.2
|-qaz.1
|-bar.1
Base.2
|-bar.2
|-qaz.2
|-foo.2
|-bar.3
Base.3
|-foo.3
此外,兒童的順序必須被保持(即,它是不正常在上述的層次結構與foo.2切換qaz.2)。
從數據訪問的角度來看,大多數時候我將檢索從頂級對象(Base.x)繼承的整個樹。
的人認爲我已經到目前爲止定義具有多態關聯的表和每個子節點類型的引用中央表,如:
BaseTable
---------
BaseId (PK)
ObjectId (FK)
ObjectTable
-----------
ObjectId (PK)
ObjectType
OtherTableId
BaseId (FK) gets top level parent
FooTable
---------
FooId (PK)
Child1_ObjectId (FK)
Child2_ObjectId (FK)
Child3_ObjectID (FK)
Other data fields...
etc. for bar and qaz
我的想法是,我可以用ObjectTable中的BaseID FK來抓取整個樹,但是有沒有一種通過SQL重建整個樹的有效方法,還是需要在檢索後在我的代碼中執行該操作?或者,是否有更好的方式以更高效的方式存儲這類數據並保證關係完整性?