樹狀結(jié)構(gòu)的數(shù)據(jù)庫鏈表設(shè)計

使用Modified Preorder Tree簡直是必須的。
網(wǎng)上可以搜一下modified preorder tree travesal找到相關(guān)資料。參考 http://www.sitepoint.com/hierarchical...


id,本節(jié)點的primary key
parent_id,其值為父節(jié)點的primary key
key,忘了學(xué)名叫啥了,你可以稱為線索
level,表示當前節(jié)點到根節(jié)點的距離
其中,key字段的值為:從跟節(jié)點到父節(jié)點的primary key,中間用任意非數(shù)字符號分割。

例如以下樹狀結(jié)構(gòu)

├── a
│   ├── d
│   │   ├── p
│   │   ├── q
│   │   └── r
│   ├── e
│   └── f
├── b
│   ├── x
│   ├── y
│   └── z
├── c

對應(yīng)的數(shù)據(jù)庫表值為:

| id | value | parent_id | key    | level |
| 1  | a     | 0         | "-"    | 1     |
| 2  | b     | 0         | "-"    | 1     |
| 3  | c     | 0         | "-"    | 1     |
| 4  | d     | 1         | "1-"   | 2     |
| 5  | e     | 1         | "1-"   | 2     |
| 6  | f     | 1         | "1-"   | 2     |
| 7  | x     | 2         | "2-"   | 2     |
| 8  | y     | 2         | "2-"   | 2     |
| 9  | z     | 2         | "2-"   | 2     |
| 10 | p     | 4         | "1-4-" | 3     |
| 11 | q     | 4         | "1-4-" | 3     |
| 12 | r     | 4         | "1-4-" | 3     |

于是,在給定一個節(jié)點d的時候,
查找d的所有子孫節(jié)點:select * from table_name where key like "${d.key}-${d.id}-%"
查找某個節(jié)點的所有子節(jié)點:select * from table_name where key like "${d.key}-${d.id}-%" and level=${d.level}+1
這個設(shè)計,結(jié)構(gòu)非常簡單。key和level是輔助字段,維護這兩個字段成本很低,即使全部重建要比MPT簡單多了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容