公司需要做一个组织机构管理的系统,但是现有的数据库中存储的方式,机构之间的关联只是通过parent_id关联的,这样在查询的时候需要不断的递归查询表数据,性能很差,逻辑也不清晰。所以在网上找到了几种针对这种树状结构存储,查询插入的优化方法

1.发现几种树结构数据库存储方案

2.聊聊树状结构如何在数据库中存储

3.组织机构树设计

1.2两种有点复杂了,第三个连接有一位答主介绍了一种快捷查询的方法

 1 很麻烦的做法。
 2 简单的只需要在原表里加一列就行了:
 3
 4 组织机构简洁字段设计:
 5
 6 (ogran_code是组织机构唯一代码,真正的系统里都会有这东西的)
 7
 8 id,name,ogran_code,parent_id
 9
10 快速查询字段设计:
11
12 id,name,ogran_code,parent_id,code_link
13
14 (code_link是从根到该机构的整个code链条,例如: "root_code"+"first_code"+"child_code")
15 分隔符自定义即可
16 添加编辑机构时只关注该机构的父机构,在父机构的link上添加本机构的部分:  "pareat_code_link"+"local_code"
17
18 任何查询都可以通过这个字段快速完成。
19
20 1,某机构所有子机构,查询所有包含某机构CODE的CODE_LINK即可。可以使用like,超级简单。
21 2,查询Level,拆分该字段即可。
22
23 总之,很方便记录的一个链路LINK,可以做到任意需要递归才可以完成的查询。

 用图表分析了一下

  • 当插入(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

组织机构树数据库表设计相关推荐

  1. 一种多层级机构数据库表设计的思路及组织机构树数据库表设计

    在实际开发过程中,经常存在多个层级结构的设计,而且多个层级结构还需要排序.这里通过将多级结构的数据在同一张表中(无需多张表进行关联),并通过level的巧妙设计来实现单表查询. level的设计原则: ...

  2. 数据库表设计、 数据库分层、myslq水平拆分、oracle表分区

    数据库表设计 数据库表结构设计方法及原则(li)数据库设计的三大范式:为了建立冗余较小.结构合理的数据库,设计数据库时必须遵循一定的规则.在关系型数据库中这种规则就称为范式.范式是符合某一种设计要求的 ...

  3. 万字归纳总结 | 数据库表设计与SQL编写技巧

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群"加入公众号专属技术群 前言 随着移动云平台系统业务不断增长,必然需要对各系统进行 ...

  4. 数据库表设计索引外键设计_关于索引的设计决策 数据库管理系统

    数据库表设计索引外键设计 Introduction: 介绍: The attributes whose values are required inequality or range conditio ...

  5. 商城 商品模块 数据库 表设计

    商城 商品模块 数据库 表设计 要实现一个商城,对于商品模块中的数据库表设计不懂,主要是:相同类别的产品的产品参数相同,不同类别的不同,这里就不懂要怎么设计了,所以上网找几篇博客了解. 什么是SPU. ...

  6. MySQL数据库表设计

    MySQL数据库表设计 ​ 数据库设计(Database Design)是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求(信息要 ...

  7. 美多商城之商品(商品数据库表设计)

    一.商品数据库表设计 1.1 SPU和SKU 在电商中对于商品,有两个重要的概念:SPU和SKU 1. SPU介绍      [即为商品的一个概述,一种商品的统称] SPU = Standard Pr ...

  8. Oracle数据库表设计时的注意事项

    Oracle数据库表设计时的注意事项  表是Oracle数据库中最基本的对象之一.万丈高楼从平地起,这个基础对象对于数据库来说,非常重要.因为其设计是否合理,直接跟数据库的性能相关.从Oracle数据 ...

  9. mysql设计积分兑换表_积分系统数据库表设计.docx

    积分系统数据库表设计 文件编号:JHDZ/SJ 密 级: 云上城积分功能数据库设计文档 项目名称:<云上城>项目代号:XXX版 本:V1.0编制单位:平台运营编制日期:2014-10-08 ...

最新文章

  1. 使用Bioconda管理生信软件(以bwa为例)
  2. 1151压力变送器型号_日本进口横河EJA530E压力变送器型号解读
  3. OpenCV使用Harris-Stephens方法检测角点的实例(附完整代码)
  4. 模板:后缀数组(SA)
  5. 五分钟轻松了解Hbase面向列的存储
  6. 人脸特征值能存放在sql server中吗_SQL运行内幕:从执行原理看调优的本质
  7. 在WinForm程序中读写系统配置
  8. jersey子资源api使用和源码分析
  9. awg线径与电流_AWG线径电流对照表
  10. 必看!!作为电工,你为什么要学PLC?
  11. css中pt单位,pt是什么单位
  12. 计算机技术与软件专业技术资格(水平)考试指南
  13. Java中的~运算符号
  14. Excel数据分析学习笔记(四)如何建立规范的数据表
  15. 抖音安心购有假货吗?四川鹰迪
  16. 计算机毕业设计springboot洗衣店订单管理系统
  17. 硬盘 GPT转MBR格式
  18. 调试项目出错------360云盘同步搞的鬼
  19. Oracle的常用技巧
  20. max31865模块RTD测温注意事项

热门文章

  1. 合天网安实验室CTF-Steg150-一段欢快的曲调
  2. 浅谈傅里叶——5. 短时傅里叶的缺点与卷积的基本概念
  3. Killer Names( 容斥定理,快速幂 )
  4. MacBook重启之后,外接显示器不亮的解决方法
  5. 微信windows版本体验报告
  6. 渤海银行增收不增利:信用卡等不良率暴涨,李伏安被市场“打脸”
  7. I Want to Know
  8. 职高c语言,C语言职高班教学计划
  9. 区块链运作机制_区块链如何运作? 铂 4
  10. [Excel知识技能] 将数值格式数字转换为文本格式