对于组织架构中的员工层次关系我们应该怎么建模呢?
如下图所示:
此类结构通常有两个主要特点:
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