Design1:数据层次结构建模之一

简介:

1,在现实世界中,有很多现象存在层次结构,公司的人事职称是典型的层次结果,如下图

Sql Server是关系型DB,适合存储二维关系的数据,如何存储具有层次结构的数据了?需要使用一个字段ParentID表示上级ID,示例表结构如下

复制代码
create table dbo.emph
(
ID int not null primary key,
ParentID int foreign key references dbo.emph(id),
Descr varchar(100) not null
)
复制代码

2,插入示例数据

复制代码
insert into dbo.emph(id,ParentID,Descr)
values(1,null,'boss'),
(2,1,'M1'),(3,1,'M2'),(4,1,'M3'),(5,1,'M4'),
(6,2,'L11'),(20,2,'L12'),(7,2,'L13'),(8,2,'L14'),(9,2,'L15'),
(10,3,'L21'),(11,3,'L22'),(12,3,'L23'),(14,3,'L24'),
(15,6,'E111'),(16,6,'E112'),(17,6,'E113'),(18,6,'E114'),
(19,20,'E121'),(21,20,'E122'),(22,20,'E123')
复制代码

3,使用CTE递归查询M1手下的所有员工,包括Leader和Employee

复制代码
;with cte(id,parentid,descr) as
(
select id,parentid,descr
from dbo.emph 
where id=2

union all

select e.ID,e.ParentID,e.Descr
from dbo.emph e
inner join cte c on e.ParentID=c.id
)
select *
from cte
order by parentid
复制代码

4,查看查询嵌套的Level,示例代码如下

复制代码
;with cte(id,parentid,descr,Level) as
(
select id,parentid,descr,0 as Level
from dbo.emph 
where id=2

union all

select e.ID,e.ParentID,e.Descr,Level+1 as Level
from dbo.emph e
inner join cte c on e.ParentID=c.id
)
select *
from cte
order by parentid
复制代码

5,查看每一行数据的Path,便于查看归属关系,path是使用ID来界定的

复制代码
;with cte(path,id,parentid,descr,Level) as
(
select cast('\'+cast(id as varchar) as varchar(100)) as path, 
id,parentid,descr,0 as Level from dbo.emph where id=2 union all select cast(c.path+'\'+ cast(e.ID as varchar) as varchar(100)) as path, e.ID,e.ParentID,e.Descr,Level+1 as Level from dbo.emph e inner join cte c on e.ParentID=c.id ) select * from cte order by parentid
复制代码

 

推荐文档:

树形结构的数据库表Schema设计

作者悦光阴
本文版权归作者和博客园所有,欢迎转载,但未经作者同意,必须保留此段声明,且在文章页面醒目位置显示原文连接,否则保留追究法律责任的权利。
分类: SQL Server






本文转自悦光阴博客园博客,原文链接:http://www.cnblogs.com/ljhdo/p/4582851.html,如需转载请自行联系原作者
目录
相关文章
|
8月前
|
设计模式 自然语言处理 算法
摆脱复杂图谱术语,7个原则搞定Schema建模
本文我们结合蚂蚁域内的多个业务场景,举例说明结合SPG规范的结构与语义解耦的知识建模及schema设计方法。
|
设计模式 测试技术 持续交付
深入抽象和动态建模(1)
深入抽象和动态建模
244 0
深入抽象和动态建模(1)
|
设计模式 自然语言处理 前端开发
深入抽象和动态建模(2)
深入抽象和动态建模
深入抽象和动态建模(2)
|
测试技术 uml 数据安全/隐私保护
【UML 建模】UML建模语言入门-视图,事物,关系,通用机制(二)
【UML 建模】UML建模语言入门-视图,事物,关系,通用机制(二)
305 0
【UML 建模】UML建模语言入门-视图,事物,关系,通用机制(二)
|
运维 测试技术 uml
【UML 建模】UML建模语言入门-视图,事物,关系,通用机制(一)
【UML 建模】UML建模语言入门-视图,事物,关系,通用机制(一)
423 0
【UML 建模】UML建模语言入门-视图,事物,关系,通用机制(一)
|
测试技术 uml
【UML 建模】UML建模语言入门-视图,事物,关系,通用机制(三)
【UML 建模】UML建模语言入门-视图,事物,关系,通用机制(三)
328 0
【UML 建模】UML建模语言入门-视图,事物,关系,通用机制(三)
|
C#
艾伟:C#语言的几个层次
接到一位前不久C#培训学员的来信,这位学员虽然以前功底欠缺,但学习劲头很足,在培训中成长很快。即便基本吃透《.NET框架(修订版)》还嫌不够过瘾,一心要成为高手中的高手。来信的目的是希望我来指点进阶方向。
797 0
|
设计模式 测试技术 领域建模
面向对象--领域模型,设计模型,实现模型总结
--基于面向对象葵花宝典读书总结。领域建模是面向对象真正开始。2个作用: 发掘重要的业务领域概念; 建立业务领域之间的关系。
2363 0