层次树表结构的设计

 

组织机构是典型的层次树结构表,以下就以组织为例开始分析

 

 

1. 部门机构树如下

 

┌───────────────
│                                          
│    部门                               
│     │                                 
│     ├─技术部                     
│     │    │                          
│     │    ├─技术1部            
│     │    │                          
│     │    └─技术2部            
│     │                                  
│     ├─市场部                     
│     │    │                           
│     │    ├─市场1部            
│     │    │                           
│     │    └─市场2部            
│     │                                 
│     └─客服部                     
│                                         
└───────────────

 

 

 

2. 数据库表 org

标识父标识所有父标识名称编码父编码所有父编码叶子级别
id parent_id parent_ids text code parent_code parent_codes leaf grade
 1 '1'  部门  00  '00'  01
 2 1 '1','2'  技术部  0001  00  '00','0001'  02
 3 2 '1','2','3'  技术 1 000101  0001  '00','0001','000101'  13
 4 2 '1','2','4'  技术 2 000102  0001  '00','0001','000102'  13
 5 1 '1','5'  市场部  0002  00  '00','0002'  02
 6 5 '1','5','6'  市场 1 000201  0002  '00','0002','000201'  13
 7 5 '1','5','7'  市场 2 000201  0002  '00','0002','000202'  13
 8 1 '1','8'  客服部  0003  00  '00','0003'  12

 

 

3. 这样设计的好处

 

(1)

上下级关系变化时修改code即可,不需要修改主键id

(2)

 

有了code可以方便查看所有子节点信息 ,比如查看id为1的所有子节点信息

根据id(1)先获取code(0001)再执行select * from org where code like '0001%'

(3)

 

有了parent_codes可以方便查看所有父节点信息 ,比如查看id为6的所有父节点信息

根据id(6)先获取parent_codes再执行select * from org where code in ('00','0002','000201')

(4)

 

有了leaf可以方便查看所有叶子和非叶子节点信息 ,比如查看所有叶子节点信息

select * from org where leaf = '1'

(5)

 

有了grade可以方便查看某级别的节点信息 ,比如查看层次树级别为2的节点信息

select * from org where grade = '2'

 

 

 

4. 注意事项

 

(1)

 

根节点code的值必须是00

不合法:01、02、10、20

(2)

 

 

子节点code的值必须是“父节点code + 序号(不能是00)”

合法:0001、0002、000101

不合法:01、0000、0101、000100

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值