树型结构的四种建模方法

本文介绍了四种树型结构的建模方法:Adjacency List、Path Enumeration、Nested Sets和Closure Table。针对每种方案,文章详细阐述了其优缺点,并提供了示例。在实际应用中,通常会结合方案一和方案四使用,而方案三适用于查询频繁、插入更新少的情况,方案二则不推荐使用。
摘要由CSDN通过智能技术生成

对于组织架构中的员工层次关系我们应该怎么建模呢?

 

如下图所示:

 

此类结构通常有两个主要特点:

1、一个孩子有且只有一个父亲

2、树的深度不确定

 

为了解决这种结构,我们一般会建一张下面的表:

 

方案一(Adjacency List)

CREATE TABLE Employees(
employee_id int,

employee_name varchar2(100),

parent_id int

);

 

每个员工在Employees表中会有一条记录,并通过parent_id来记录其直属领导的employee_id,这样做很简单明了,但是却存在一些弊端。

考虑如下问题:

1、如何得到某个员工的直属领导?

2、如何得到某个领导的直属下属?

3、如何得到某个领导全部下属(下属的下属)?

 

问题1、2都很简单,一次自连接就解决了:

1、

select par.employee_id,par.employee_name 
from employees par,employees self
where self.parent_id=par.employee_id
and self.employee_id=3201


 


2、 

select child.employee_id,child.employee_name 
from employees child,employees self 
where child.parent_id=self.employee_id 
and self.employee_id=1010

 

但问题3呢?

两种人会有两种做法,一种觉得可以在程序里做,把问题2的SQL循环执行最终把结果拼起来就OK了;

一种是觉得我可以使用多次自连接,比如我知道这下领导最多有两级下属,我就可以这样做:

select child.employee_id,child.employee_name,child1.employee_id,child1.e

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值