当前位置:网站首页 > 技术博客 > 正文

数据库设计分为哪三个阶段



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

 

版权声明


相关文章:

  • 面向对象设计主要设计哪些基本概念2025-04-24 18:01:00
  • python common库2025-04-24 18:01:00
  • visual studio code创建python项目2025-04-24 18:01:00
  • 应用层的基本协议主要有2025-04-24 18:01:00
  • 数字图像处理实验总结2025-04-24 18:01:00
  • matlab匿名函数例题2025-04-24 18:01:00
  • python2打包成exe2025-04-24 18:01:00
  • geohash python2025-04-24 18:01:00
  • 线程安全什么意思2025-04-24 18:01:00
  • ssh加密2025-04-24 18:01:00