path数据库结构: (领接表增强,比较简单)
id | name | pid | path | level(非必要) | order(非必要) |
1 | 总裁办 | 0 | /0/1/ | 1 | |
3 | 人事部 | 1 | /0/1/3/ | 2 | |
8 | 行政部 | 1 | /0/1/8/ | 2 | |
10 | 招聘一部 | 3 | /0/1/3/10/ | 3 | |
11 | 招聘二部 | 3 | /0/1/3/11/ | 3 | |
12 | 招聘专员 | 11 | /0/1/3/11/12/ | 4 | |
2 | 财务部 | 0 | /0/2/ | 1 | |
15 | 出纳 | 2 | /0/2/15/ | 2 | |
16 | 会计 | 2 | /0/2/16/ | 2 | |
9 | 技术部 | 0 | /0/9/ | 1 |
缺点:
树的级别会受「path」字段长度的限制,但是应付一般tree足矣,如果「path」为「varchar(255)」,20级树完全没有问题;
修改某节点父级时,其下属「path」、「level」均需要重新改变;
查询子孙集时,通过「LIKE %/{$id}/%」查询比较低效,但是相对于递归查询来说,效率已经算是不错了。