簡體   English   中英

如何設計深度未知的分層數據的數據庫表?

[英]How to design database tables for hierarchical data with unknown depth?

我想創建深度未知的分層數據,如下所示:

創建類別和子類別,對於這些子類別,它們還將具有子類別,依此類推。

子類別的深度未知,只有用戶在運行時才能完成。

我要做的是將它們全部放在一個表中,並有一個父列,其中包含父類別的ID,如下所示:

在此處輸入圖片說明

我不知道這是否是正確的方法,但是我看不到任何其他方法。

我進行了快速搜索,發現與數據庫表設計沒有直接關系。

我正在使用MS SQL Server 2012

共有3種常見方法,而1種則不太常見。

1.鄰接表 (您的方法) Pro-易於理解,可在任何位置快速插入Con-緩慢遞歸查詢未知深度的樹

2.嵌套集 Pro-快速查詢Con-列表中間的插入緩慢

3.像路徑一樣的architectureid(基本上是二進制路徑) Pro- fast像Con的architectureid通常具有有限的長度-我認為hierarchyid最多約892個字節

4.封閉表 Pro-最好的嵌套集和鄰接表。 快速插入和選擇。 缺點-起初很難理解 ,但是如果性能成為問題,則值得付出努力

資料來源:SQL反模式-Bill Karwin

用於表示表中層次結構的最廣泛使用的設計模式稱為“鄰接表”。 這就是您在問題中提出的模式。

一種替代方法稱為“嵌套集”。 簡而言之,這是嵌套集的描述: https : //en.wikipedia.org/wiki/Nested_set_model

如果您查找鄰接表與嵌套集,您將獲得很多文章,討論兩者之間的取舍。

基本上,鄰接表很容易更新,但除最基本的操作外,很難使用。 嵌套Set很難更新,但易於使用。 從根目錄查找路徑,找到子樹之類的操作很簡單,也很容易理解。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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