簡體   English   中英

數據庫設計:分層數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM