我無法實現規範化的關係數據庫設計來描述一個與典型層次結構示例有足夠偏差的小型層次結構,因此我不確定如何進行第一次處理此類問題。數據庫設計:分層數據
我的問題如下:
層次中的每個分支被保證是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之間存在多對多關係。
Is th是一個合理的設計,還是我忽略了一個更簡單,更典型的解決方案?我研究了一些專門用於在關係數據庫中捕獲層次結構的設計技術,特別是鄰接列表,但我不確定它們是否適合這裏,也不是標準化的解決方案。
應該指出,層次結構將很少修改;它經常被讀取的地方讀取檢索選定組的特定級別的所有組件或組件。實體A,B和C的鏈接表將定期寫入。
歡迎任何和所有建議。在此先感謝您的幫助。 Brian