组织机构树数据库表设计
公司需要做一个组织机构管理的系统,但是现有的数据库中存储的方式,机构之间的关联只是通过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
组织机构树数据库表设计相关推荐
- 一种多层级机构数据库表设计的思路及组织机构树数据库表设计
在实际开发过程中,经常存在多个层级结构的设计,而且多个层级结构还需要排序.这里通过将多级结构的数据在同一张表中(无需多张表进行关联),并通过level的巧妙设计来实现单表查询. level的设计原则: ...
- 数据库表设计、 数据库分层、myslq水平拆分、oracle表分区
数据库表设计 数据库表结构设计方法及原则(li)数据库设计的三大范式:为了建立冗余较小.结构合理的数据库,设计数据库时必须遵循一定的规则.在关系型数据库中这种规则就称为范式.范式是符合某一种设计要求的 ...
- 万字归纳总结 | 数据库表设计与SQL编写技巧
点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群"加入公众号专属技术群 前言 随着移动云平台系统业务不断增长,必然需要对各系统进行 ...
- 数据库表设计索引外键设计_关于索引的设计决策 数据库管理系统
数据库表设计索引外键设计 Introduction: 介绍: The attributes whose values are required inequality or range conditio ...
- 商城 商品模块 数据库 表设计
商城 商品模块 数据库 表设计 要实现一个商城,对于商品模块中的数据库表设计不懂,主要是:相同类别的产品的产品参数相同,不同类别的不同,这里就不懂要怎么设计了,所以上网找几篇博客了解. 什么是SPU. ...
- MySQL数据库表设计
MySQL数据库表设计 数据库设计(Database Design)是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求(信息要 ...
- 美多商城之商品(商品数据库表设计)
一.商品数据库表设计 1.1 SPU和SKU 在电商中对于商品,有两个重要的概念:SPU和SKU 1. SPU介绍 [即为商品的一个概述,一种商品的统称] SPU = Standard Pr ...
- Oracle数据库表设计时的注意事项
Oracle数据库表设计时的注意事项 表是Oracle数据库中最基本的对象之一.万丈高楼从平地起,这个基础对象对于数据库来说,非常重要.因为其设计是否合理,直接跟数据库的性能相关.从Oracle数据 ...
- mysql设计积分兑换表_积分系统数据库表设计.docx
积分系统数据库表设计 文件编号:JHDZ/SJ 密 级: 云上城积分功能数据库设计文档 项目名称:<云上城>项目代号:XXX版 本:V1.0编制单位:平台运营编制日期:2014-10-08 ...
最新文章
- 使用Bioconda管理生信软件(以bwa为例)
- 1151压力变送器型号_日本进口横河EJA530E压力变送器型号解读
- OpenCV使用Harris-Stephens方法检测角点的实例(附完整代码)
- 模板:后缀数组(SA)
- 五分钟轻松了解Hbase面向列的存储
- 人脸特征值能存放在sql server中吗_SQL运行内幕:从执行原理看调优的本质
- 在WinForm程序中读写系统配置
- jersey子资源api使用和源码分析
- awg线径与电流_AWG线径电流对照表
- 必看!!作为电工,你为什么要学PLC?
- css中pt单位,pt是什么单位
- 计算机技术与软件专业技术资格(水平)考试指南
- Java中的~运算符号
- Excel数据分析学习笔记(四)如何建立规范的数据表
- 抖音安心购有假货吗?四川鹰迪
- 计算机毕业设计springboot洗衣店订单管理系统
- 硬盘 GPT转MBR格式
- 调试项目出错------360云盘同步搞的鬼
- Oracle的常用技巧
- max31865模块RTD测温注意事项