[英]Database Design: Hierarchical Data
我在進行規范化的關系數據庫設計時很難描述一個很小的層次結構,該層次結構與典型的層次結構示例有很大的偏差,因此我不確定如何繼續進行第一次處理此類問題。
我的問題如下:
保證層次結構中的每個分支深度為2、4或6級。 如果深度為2層,則層次結構如下所示:
Category / Group / Component
如果深度為4級,則如下所示:
Category / Group / Component / Group / Component
如果深度為6級,則如下所示:
Category / Group / Component / Group / Component / Group / Component
類別,組和組件各自具有自己的屬性集。 使問題更加復雜的是,組件和實體A,組件和實體B以及組件和實體C之間存在關系。
我最初的想法是努力將組件保持在一個表中,但是,我一直無法提出一種可以滿足此目標的標准化解決方案。
相反,我想出了一個規范化的解決方案,其中在三個可能的組件級別的每個級別都有一個單獨的組件表。 但是,我對此並不滿意,因為它將捕獲組件和實體A,B和C之間的鏈接的表的數量增加了兩倍(總共9個鏈接表,如果所有組件都在一個表中,則為3個)。
這是我想到的設計的樣子:
TABLE: Group_1_Components
ATTRIBUTES: Row_ID, Category, Component
RELATES-TO: Group_1_Components_A_Links, Group_1_Components_B_Links, Group_1_Components_C_Links, Group_2_Components
TABLE: Group_2_Components
ATTRIBUTES: Row_ID, Group, Component, Group_1_Component_Row_ID
RELATES-TO: Group_2_Components_A_Links, Group_2_Components_B_Links, Group_2_Components_C_Links, Group_1_Components, Group_3_Components
TABLE: Group_3_Components
ATTRIBUTES: Row_ID, Group, Component, Group_2_Component_Row_ID
RELATES-TO: Group_3_Components_A_Links, Group_3_Components_B_Links, Group_3_Components_C_Links, Group_2_Components
9個鏈接表中的每個表都包含兩個行ID,以解決與表A,B或C的多對多關系。
這是一個合理的設計,還是我忽略了一個更簡單,更典型的解決方案? 我研究了一些特定的設計技術,這些技術專門用於捕獲關系數據庫中的層次結構,尤其是鄰接表,但是我不確定它們是否適合此處,也不確定它們是否是標准化的解決方案。
應該注意的是,很少會修改層次結構。 它會經常被讀取,其中讀取將檢索所選組的所有組件或特定級別的組件。 到實體A,B和C的鏈接表將定期寫入。
任何和所有建議都歡迎。 在此先感謝您的幫助。 布賴恩
我建議您對數據進行非規范化,以便您的層次結構基於組件/組實體,以便與“常規”層次結構匹配。 在這種情況下,您可以具有下表:
a)組件
b)組
c)Component_Groups-在component_id和group_id上具有唯一鍵,以確保每個組件和組只有一個組合
在這種情況下,您的層次結構將是:類別-> Component_Group-> Component_Group-> Component_Group
此類問題的另一種選擇是使用自引用表。 一張桌子
具有ID,PARENT_ID和TYPE的單個表,因此您可以區分CATEGORY,GROUP和COMPONENT。
所有類別都沒有PARENT_ID,然后您可以搜索其父ID等於您要深入研究的類別ID的所有子對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.