组织机构是典型的层次树结构表,以下就以组织为例开始分析
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
http://topic.csdn.net/u/20100713/17/3e31cfba-aeea-4b8e-9f40-0acfa411ac60.html
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
http://topic.csdn.net/u/20100713/17/3e31cfba-aeea-4b8e-9f40-0acfa411ac60.html