ztree数据表结构设计

时间:2021-08-04 12:18:15

“`

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简单多了。
“`http://blog.csdn.net/monkey_d_meng/article/details/6647488