如何使用需要引用自身的表来设计数据库?

时间:2010-08-28 05:21:45

标签: database-design

我正在构建一个数据库并遇到了一个我似乎无法解决的问题。数据库比图中的复杂得多,但问题可以在下面的表结构中提炼出来。

问题是每个员工都有经理,每个经理都是员工。似乎这些表必须互相参考。但是,当我进行此设置时,这似乎无法正常工作。

alt text

我正在使用cakephp。这种关系类型的名称是什么?这是错误的设计吗?这种情况的适当设计是什么?我希望它尽可能自动化。

2 个答案:

答案 0 :(得分:7)

如果我理解正确,您根本不需要Managers表。由于经理是员工,因此没有理由不将经理存储在Employees表中。只需在Employees表中添加一个名为manager_id的字段,对于任何给定的行,该表引用该员工的经理(这是同一个表中的另一行)。

这被称为递归的一对一关系,这很常见。在您的情况下,它还可以防止您必须在两个实体(名称,密码,职位等)之间定义重复字段。

答案 1 :(得分:2)

只是废弃employees.manager_id。每个经理都会有一个指向员工行的指针,但不是每个员工都会指向经理。这将创造一种传统的一对一关系。