组织机构是典型的层次树结构表,以下就以组织为例开始分析
1. 部门机构树如下
| ┌─────────────── │ │ 部门 │ │ │ ├─技术部 │ │ │ │ │ ├─技术1部 │ │ │ │ │ └─技术2部 │ │ │ ├─市场部 │ │ │ │ │ ├─市场1部 │ │ │ │ │ └─市场2部 │ │ │ └─客服部 │ └─────────────── |
2. 数据库表 org
| 标识 | 父标识 | 所有父标识 | 名称 | 编码 | 父编码 | 所有父编码 | 叶子 | 级别 |
| id | parent_id | parent_ids | text | code | parent_code | parent_codes | leaf | grade |
| 1 | '1' | 部门 | 00 | '00' | 0 | 1 | ||
| 2 | 1 | '1','2' | 技术部 | 0001 | 00 | '00','0001' | 0 | 2 |
| 3 | 2 | '1','2','3' | 技术 1 部 | 000101 | 0001 | '00','0001','000101' | 1 | 3 |
| 4 | 2 | '1','2','4' | 技术 2 部 | 000102 | 0001 | '00','0001','000102' | 1 | 3 |
| 5 | 1 | '1','5' | 市场部 | 0002 | 00 | '00','0002' | 0 | 2 |
| 6 | 5 | '1','5','6' | 市场 1 部 | 000201 | 0002 | '00','0002','000201' | 1 | 3 |
| 7 | 5 | '1','5','7' | 市场 2 部 | 000201 | 0002 | '00','0002','000202' | 1 | 3 |
| 8 | 1 | '1','8' | 客服部 | 0003 | 00 | '00','0003' | 1 | 2 |
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 |
762

被折叠的 条评论
为什么被折叠?



