之前做的一个系统,里面涉及一个组织机构,之前也做过,之前做得非常简单普遍

数据库表结构主要是一个主键id,名称name,一个父级外键parent_id

比如

id  name         parent_id

1  汕头公司     null

2  计算机中心  1

3 人事部           1

类似这样,相信大家都能想到,添加,修改都很方便,但查询就出现一个问题,就是比如你想得到汕头公司里面的员工,包括子部门的话,就必须得用递归,递归这东西,想起来很伤脑的,如果层数比较多,数据量比较大的话还非常耗性能的。

那为了查询性能就必须增加一些辅助的字段,百度上有介绍过一种添加左右键的,意义我看半天就只懂了一点,但是涉及到修改,比较移动位置的话,里面介绍的得把全部的左右键重新设置,我又看不太懂了,脑子有点笨,越看越晕,所以就不再研究了,不过这个辅助字段是是int的,相信这种查询是很快的。

后面我想了另一个数据库结构,也是比较通俗易懂,适合我这么笨的人。

我直接上数据吧,相信比我聪明的人一看就知道了。

如图,我主要是增加了一个parent_ids这个字段,这个字段主要记录了,当前的部门上级部门总共有哪些部门。

那么当你要查询时,你可以这样,比如你要查询汕头公司(id 为149)以下包括子部门所有的员工

SELECT e.* from employee e INNER JOIN org o on e.org_id=o.id where o.id=149 or FIND_IN_SET(149,o.parent_ids);

这样里面用的是like 可能效率不高,但至少不用递循了,也比较容易理解。

如果你要移动的话,这个可能理解起来有点麻烦,我一开始也是忽略其中一些小问题,导致移动位置时parent_ids出错了

比如你要移动汕头公司(id为149)到上海公司(id为148)里面

最好用事务处理

首先查询到上海公司的parent_ids为1,,那么汕头公司的parent_ids就为1,148,了

update org set parent_ids='1,148,',parent_id=148 where id=149

然后还得更新汕头公司所有子部门的parent_ids

update org set parent_ids=CONCAT('1,148,',SUBSTRING_INDEX(parent_ids,'1,',-1)) where FIND_IN_SET(149,parent_ids);

这一步可能很多同学看不懂,我刚开始也忽略了这一步,后面移动位置时,parent_ids就出错了。

懂了查询跟修改,那删除也是比较简单的

DELETE * from org  where o.id=149 or FIND_IN_SET(149,parent_ids);

新增就更简单了,这儿就是写了。

希望对大家有用处。

组织机构树型数据库结构相关推荐

  1. 近期完成了PHPWIND的树形论坛改版(PHPWIND的树型论坛结构)

    近期完成了PHPWIND的树形论坛改版(PHPWIND的树型论坛结构) 大家有什么好的建议,希望和大家一起研究 QQ:372900288

  2. 经典树型表结构之SORT_NO

    为什么80%的码农都做不了架构师?>>>    在以下情况需要对经典树型表的sort_no进行重排序: 1.插入节点(插入子树),需调整节点后所有sort_no; 2.删除节点(删除 ...

  3. 树型列表结构宽度调整_Material Design 网格列表

    网格列表是标准列表视图的替代方法. 网格列表由以垂直和水平布局排列的重复单元格图案组成. 网格列表最适用于类似的数据类型.它们有助于提高对其所包含内容的视觉理解. 用法 网格列表最适合于呈现同质数据( ...

  4. 树型列表结构宽度调整_如何用Axure画出Web产品的列表组件:基础画法

    Web产品的列表组件在画原型的时候比较常见,所以PM有必要深入了解它的各种交互效果和对应的原型画法. 除了通过表格来画出简单列表之外,我们还可以通过中继器来画出列表,相应的原型效果请查看https:/ ...

  5. php创建多级栏目_用PHP实现多级树型菜单

    用PHP实现多级树型菜单 更新时间:2006年10月09日 00:00:00   作者: //树型目录结构模板程序 //菜单目录库字段说明: //menu_id 菜单项目 id //menu 菜单名称 ...

  6. php 修改多级菜单,用PHP实现多级树型菜单

    用PHP实现多级树型菜单 ---摘自互联网 //树型目录结构模板程序 //菜单目录库字段说明: //menu_id 菜单项目 id //menu 菜单名称 //menu_grade 菜单等级 1 为主 ...

  7. 用PHP实现多级树型菜单

    用PHP实现多级树型菜单 ---摘自互联网 <? //树型目录结构模板程序 //菜单目录库字段说明: //menu_id 菜单项目 id //menu 菜单名称 //menu_grade 菜单等 ...

  8. 【唠叨两句】如何将一张树型结构的Excel表格中的数据导入到多张数据库表中...

    小弟昨天遇到一个相对比较棘手的问题,就像标题说的那样.如何将一张树型结构的Excel表格中的数据导入到多张数据库表中,在现实中实际是七张数据库表,这七张表之间有着有着相对比较复杂的主外键关系,对于我这 ...

  9. dtree和jquery构建树型结构

    对于小型的树型应用来说,dtree是一个不错的选择. 先看一眼dtree给的例子 构造静态树 首先引入css文件和js文件 <link rel="StyleSheet" hr ...

最新文章

  1. 嵌入式WiFi芯片价格战已经打响 MCU企业该醒悟了
  2. Elasticsearch及相关插件的安装
  3. matplotlib 中文显示 的问题
  4. C++/Java线程之分
  5. GPS/BDS:AGPS定位基本机制
  6. 书籍推荐 《移动Web手册》 奇舞团
  7. EDA技术实用教程 | 复习十一 | 状态机的特点和分类
  8. js split 正则分割字符串
  9. Python代码加密 - 4种方案
  10. origin 8.0 win 7 破解版安装及使用教程
  11. 主成分之综合竞争力案例分析
  12. 【Tools】HP/惠普v285w 量产工具
  13. 对话MVP丨腾讯崔冉的十年“技术马拉松”
  14. C#网络编程 (二) 数据流的类型和应用
  15. TCP、UDP、IP头部结构
  16. Cadence 导出变种BOM详细操作方法
  17. 嵌入式软件管培生每日总结-第3天
  18. java入门基础学习
  19. 黑马JAVA P44 猜数字游戏
  20. 唯样商城:100年前的科技脑洞到底有多大?(第一个已经实现)

热门文章

  1. IT男把笔记本电脑放膝上会怎样?
  2. wordpress开启全站https
  3. 微信小程序 环形进度条_微信小程序实现圆形进度条实例分享
  4. 微信服务号的六大价值有哪些
  5. 冰冻三尺非一日之寒-自学篇 浅谈个人学习方法
  6. 千牛群发消息怎么发?推荐UiBot千牛群发消息机器人
  7. Linux 高并发服务器开发
  8. 分数化小数计算机在线,循环小数化分数计算器
  9. http协议抓包工具
  10. php 改数字 例如10000变成1万