在业务中,经常会涉及到 数据本身是自关联的情况,比如,组织架构数据,每个人都会有一个上级,那么就是 id,parent_id 这样的设计。

但是这么设计之后,如果我要查询某个人的所有下级,就要用递归查询来遍历,一个是查询sql比较复杂,另一个是对于数据量稍大点的,性能肯定不会好到那里去。

那要怎么设计层次型表的结构呢?

一个比较好的方法就是在表中增加一个字段 cover_code,数据如下:

create table BANK_ORG
(
org_id NUMERIC(10) primary key,
parent_id NUMERIC(10) foreign key references BANK_ORG(org_id),
title NVARCHAR(30),
cover_code varchar(50)
);insert into BANK_ORG(org_id,parent_id,title,cover_code)
values(1,null,'行长','001'),(2,1,'专务','001001'),(3,1,'常务','001002'),(4,3,'营业一部-部长','001002001'),(5,2,'营业二部-部长','001001001'),(6,5,'营业二部-次长','001001001001'),(7,6,'营业二部-课长','001001001001001'),(8,7,'营业二部-主任','001001001001001001'),(9,7, '营业二部-职员1','001001001001001002'),(10,7,'营业二部-职员2','001001001001001003')

cover_code的编码规则(这里引用日剧 《半泽直树》中的东京中央银行的组织架构作为例子来说明):

1、行长是 001

2、往下的 专务、常务,就是 001001,001002,其中前面的001,就是上级 行长的编码001,然后这2个岗位可以按照org_id排序后编码成001、002,所以合在一起就是 001001,001002。

3、再往下也是一样的,营业一部,营业二部,就是001002001(他的上级是常务,常务的编码是001002,于是在加上001),001001001(他的上级是专务,专务的编码是001001,于是在加上001)

比如,要查询营业二部下面的所有岗位,由于营业二部部长的编码是 001001001,所以这么查:

--返回:001001001
select cover_code
from bank_org
where title = '营业二部-部长'select * from bank_org
where cover_code like '001001001%'

转载于:https://www.cnblogs.com/momogua/p/8304391.html

SQL优化:从设计表结构开始(层次型表结构设计方法)相关推荐

  1. PowerDesigner16.5反向工程获取Oracle11g数据表结构遇到的问题及解决方法

    PowerDesigner16.5反向工程获取Oracle11g数据表结构遇到的问题及解决方法 本人只想用PowerDesigner16.5反向工程获取Oracle11g生成ER图,没曾想纠结了两个晚 ...

  2. oracle转换表结构,SQLServer表结构转换成Oracle表结构

    /******************** * function:sqlserver 表结构转换成Oralce 表结构,不支持索引以及自动增长 **********************/ --取消 ...

  3. SAP-ABAP性能优化之构建嵌套结构的哈希表

    编者按:      本文的内容是程序性能优化的一种方式. 使用READ TABLE <哈希表> 取代READ TABLE <标准内表>或LOOP AT WHERE <标准 ...

  4. 【MySQL】如何使用SQL语句获取表结构和获取全部表名

    目录 一.业务背景 二.如何获取全部表名 三.如何获取表结构 四.总结 一.业务背景 在实际的业务需求中,我们经常需要拿到数据库的全部表名,展示在后台中或者输出到文件里. 具体到业务中的需求比如: 导 ...

  5. sql 复制表结构和复制整个表数据

    1. 复制表结构及其数据: create table table_name_new as select * from table_name_old 2. 只复制表结构: create table ta ...

  6. MYSQL中如何查看表结构命令_mysql查看表结构命令

    mysql查看表结构命令,如下: desc 表名; show columns from 表名; describe 表名; show create table 表名; use information_s ...

  7. 列名 userid 不明确。 表结构_那些你不知道的表结构设计思路

    ERP表结构的设计--第9篇 用日志记录"开源软件"的诞生 赤龙ERP开源地址: 点亮星标,感谢支持,与开发者交流 kzca2000 码云: https://gitee.com/r ...

  8. mysql修改表结构例子_mysql修改表结构方法实例详解

    本文实例讲述了mysql修改表结构方法.分享给大家供大家参考.具体如下: mysql修改表结构使用ALTER TABLE语句,下面就为您详细介绍mysql修改表结构的语句写法,希望对您学习mysql修 ...

  9. java 获取oracle表结构_Java导出oracle表结构实例详解

    Java导出oracle表结构实例详解 发布于 2020-7-20| 复制链接 摘记:  Java导出oracle表结构实例详解最近用到的,因为plsql是收费的,不让用,找了很多方法终于发现了这个. ...

最新文章

  1. K - Candies POJ - 3159(利用了自定义比较操作符)
  2. 【C语言入门教程】2.7 表达式
  3. [转帖]linux下的X server:linux图形界面原理
  4. js-比较两个日期的大小
  5. python爬虫数据可视化_适用于Python入门者的爬虫和数据可视化案例
  6. 大学生信息安全_给大学生的信息
  7. 王爽 汇编语言第三版 第10章 call 和 ret 指令 以及 子程序设计
  8. cookie、Session、Token、sessionStorage、localStorage简介__Token放在 cookie, sessionStorage 和 localStorage中区别
  9. trackingmore快递查询平台_快递物流服务再升级!寄快递更便捷,看看都有哪些平台...
  10. ctc网络结构中接口服务器信号交换的方式有哪些,通信工程复习资料
  11. Java aop中参数传递
  12. 好用的3D建模软件,就是不用?
  13. Android模仿新浪微博(启动界面登陆界面)
  14. android adb日志过滤包名,android studio logcat 无筛选 显示全部日志 无应用包名区分方式...
  15. 数学建模学习(101):车辆路线规划问题
  16. 牛顿二项式定理(广义二项式定理)
  17. 群晖Docker套件注册Harbor私有镜像仓库,并下载运行自己发布的Docker镜像
  18. 安捷伦 34401A串口通信
  19. js 里奇数的判断条件
  20. 网易WEB白帽子 -WEB安全工具

热门文章

  1. three 天空球_javascript – 分配给相机的three.js天空盒
  2. tstringlist怎么查看是否存在该数据_财务报表审计该如何进行?
  3. 3d需要学linux_我的脑子—从核磁共振图像到3D打印
  4. redis存储新闻列表_Redis对象——集合(Set)
  5. html输入框只能输入几个,input 两个input框只能允许同时输入一个
  6. Linux解决 -bash: nc: command not found问题,安装nc
  7. c++ 跳转到上级目录_Windows漏洞利用开发 第4部分:使用跳转定位Shellcode 模块
  8. 在html中 标题字体标记的最大取值,西南大学网络教育2020年春0834]《网页设计》作业标准答案...
  9. stm32 复位到内部bootloader
  10. flash写保护原理_为什么固态会掉盘?著名的30分钟大法修复是什么原理?