mysql树状数据结构_树状结构的数据表如何设计?
使用Modified Preorder Tree簡直是必須的。網上可以搜一下modified preorder tree travesal找到相關資料。參考 http://www.sitepoint.com/hierarchical...
至于你說的binary tree和general tree的問題,這是個樹的基本操作了,互相轉換問題不大。參考 http://en.wikipedia.org/wiki/Binary_t...
----------------------
好吧我忘了提一個很dirty的方法。
如果你的樹深度是可預期的話,有個超簡單的數據結構。你需要3個字段來表達這個樹:id,本節點的primary key
parent_id,其值為父節點的primary key
key,忘了學名叫啥了,你可以稱為線索
level,表示當前節點到根節點的距離
其中,key字段的值為:從跟節點到父節點的primary key,中間用任意非數字符號分割。
例如以下樹狀結構├── a
│?? ├── d
│?? │?? ├── p
│?? │?? ├── q
│?? │?? └── r
│?? ├── e
│?? └── f
├── b
│?? ├── x
│?? ├── y
│?? └── z
├── c
對應的數據庫表值為:| id | value | parent_id | key | level |
| 1 | a | 0 | "-" | 1 |
| 2 | b | 0 | "-" | 1 |
| 3 | c | 0 | "-" | 2 |
| 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 |
于是,在給定一個節點d的時候,查找d的所有子孫節點:select * from table_name where key like "${d.key}-${d.id}-%"
查找某個節點的所有子節點:select * from table_name where key like "${d.key}-${d.id}-%" and level=${d.level}+1
這個設計,結構非常簡單。key和level是輔助字段,維護這兩個字段成本很低,即使全部重建要比MPT簡單多了。
總結
以上是生活随笔為你收集整理的mysql树状数据结构_树状结构的数据表如何设计?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 键盘录入多个数据,以0结束,要求在控制台
- 下一篇: 数据库分表设计-任我行