SQL优化:从设计表结构开始(层次型表结构设计方法)
来源:互联网 发布:pkpm钢结构设计软件 编辑:程序博客网 时间:2024/06/05 23:59
在业务中,经常会涉及到 数据本身是自关联的情况,比如,组织架构数据,每个人都会有一个上级,那么就是 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,所以这么查:
--返回:001001001select cover_codefrom bank_orgwhere title = '营业二部-部长'select * from bank_orgwhere cover_code like '001001001%'
0 0
- SQL优化:从设计表结构开始(层次型表结构设计方法)
- sql优化:从设计表结构开始(SQL Server中如何让数据库中某一个字段随时间自动更新?)
- 数据库表结构设计方法
- 数据库表结构设计方法
- 数据库表结构设计的优化
- MySQL数据库表结构设计优化技巧总结 让你的表结构更加合理
- 【SQL优化】MySQL官网中可优化的层次结构
- MySQL数据库表结构设计优化技巧总结
- 表结构设计
- 表结构设计
- 表结构设计
- 优化 布局层次结构
- 数据库表结构设计方法及原则(li)
- 实现排序优化的层次关系表设计
- 数据仓库结构设计(星型结构和雪花结构)
- 数据库表结构设计方法及原则
- 数据库表结构设计方法及原则
- 数据库表结构设计方法及原则
- MyBatis传入参数与parameterType
- Android集成Google支付,以及遇到的坑、坑
- 关于NTP的几个问题
- jQuery选择器
- Status Code:415 Unsupported Media Type
- SQL优化:从设计表结构开始(层次型表结构设计方法)
- MyBatis(2):config.xml文件
- MySQL数据库优化的八种方式(经典必看)
- 新建工程,windows的frame大小不对
- 初学webpack(第二篇)
- android生命周期
- 【深入理解计算机系统】【浮点数的表示范围】
- 用原始的jdbc批量插入数据
- android蓝牙