level的设计原则:0.*.* 其中,0是顶级结构,第一个*是顶级结构下的结构,第二个*是顶级结构下的结构下的结构。
举个栗子:
1、创建部门架构表:
2、生成如下数据

3、业务图对应如下

level说明:
UE(id是6)是属于前端开发(id是3),而前端开发是属于技术组(id是1),因此,UE的level是0.1.3 依次为顶级的id到最靠近自己的id。
使用场景:
比如:
(1)如果想查询所有技术组下一级的架构,可以用如下sql语句:
SELECT * FROM department WHERE `level` LIKE '0.1';

(2)查询所有技术组下所有的架构包括下一级的下一级等等
SELECT * FROM department WHERE `level` LIKE '0.1%';

————————————————
版权声明:本文为CSDN博主「timchen525」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/timchen525/article/details/
公司需要做一个组织机构管理的系统,但是现有的数据库中存储的方式,机构之间的关联只是通过parent_id关联的,这样在查询的时候需要不断的递归查询表数据,性能很差,逻辑也不清晰。所以在网上找到了几种针对这种树状结构存储,查询插入的优化方法
1.发现几种树结构数据库存储方案
2.聊聊树状结构如何在数据库中存储
3.组织机构树设计
1.2两种有点复杂了,第三个连接有一位答主介绍了一种快捷查询的方法
用图表分析了一下

- 当插入(1总公司)
id code_link
1 0_null_null
- 在(1总公司)下插入(2上海分公司),总公司的child_code为2,上海分公司的root_code为1
id code_link
1 0_null_2
2 1_null_null
- 在(1总公司)下插入(3深圳分公司),总公司的child_code为2,3,上海分公司的root_code为1
id code_link
1 0_null_2,3
2 1_null_null
3 1_null_null
- 在(2上海分公司)下插入(4徐汇办事处),上海分公司的child_code为4,徐汇办事处的first_code为2
id code_link
1 0_null_2,3
2 1_null_4
3 1_null_null
4 1_2_null
- 在(2上海分公司)下插入(5闵行办事处),上海分公司的child_code为4,5,闵行办事处的first_code为2
id code_link
1 0_null_2,3
2 1_null_4,5
3 1_null_null
4 1_2_null
5 1_2_null
- 在(3深圳分公司)下插入(6人事部),深圳分公司的child_code为6,人事部的first_code为3
id code_link
1 0_null_2,3
2 1_null_4,5
3 1_null_6
4 1_2_null
5 1_2_null
6 1_3_null
- 在(3深圳分公司)下插入(7财务部),深圳分公司的child_code为6,7,财务部的first_code为3
id code_link
1 0_null_2,3
2 1_null_4,5
3 1_null_6,7
4 1_2_null
5 1_2_null
6 1_3_null
7 1_3_null
- 在(4徐汇办事处)下插入(8研发部),徐汇办事处的child_code 为8,研发部的first_code为2,4(带上徐汇办事处的first_code 2)
id code_link
1 0_null_2,3
2 1_null_4,5
3 1_null_6,7
4 1_2_8
5 1_2_null
6 1_3_null
7 1_3_null
8 1_2,4_null
- 在(4徐汇办事处)下插入(9市场部),徐汇办事处的child_code 为8,9,市场部的first_code为2,4(带上徐汇办事处的first_code 2)
id code_link
1 0_null_2,3
2 1_null_4,5
3 1_null_6,7
4 1_2_8,9
5 1_2_null
6 1_3_null
7 1_3_null
8 1_2,4_null
9 1_2,4_null
- 在(9市场部)下插入(10市场调研小组),市场部的child_code为10,市场调研小组的first_code为2,4,9(带上市场部的first_code)
id code_link
1 0_null_2,3
2 1_null_4,5
3 1_null_6,7
4 1_2_8,9
5 1_2_null
6 1_3_null
7 1_3_null
8 1_2,4_null
9 1_2,4_10
10 1_2,4,9_null
至此,查询一个机构的子机构只需查询root_code和first_code中含有此节点id的数据
例如,查询(2上海分公司)的子机构,则为4,5,8,9,10
查询(4徐汇办事处)的子机构,则为8,9,10
转载于:https://www.cnblogs.com/blog-cq/p/10733011.html
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/3841.html