数据库设计问题

时间:2011-07-09 18:10:34

标签: database-design

我需要一个具有这种结构的员工表:

员工(employeeid(int),supervisorids())

supervisorid只是主管的员工

一名员工可以有0名或多名主管(请注意0)。如果他有一个主管,那么我还需要有一个约束,这个雇员应该存在于表中......也就是说它是一个引用特定雇员的内部外键。

我应该如何设计我的表来存储这些信息?如果我将supervisorids列设为varchar(具有多个supervisisor的employeeid的分隔值),我将无法使用外键来检查该员工是否存在。

谢谢!

编辑:对不起,请随便提一下,“订购”在这里很重要。一个员工可能有一个主管名单,但他们在一个订单 - 有一个主要的主管,如果他不在,那么我们去第二个主管,然后是第三个,依此类推。

3 个答案:

答案 0 :(得分:2)

你为什么不这样做?

员工表

------------------------------------------
|  id  |   name  |   address  |  etc...  |
|------|---------|------------|----------|
|   0  |  Mike   |  blah      |   ...    |
|------|---------|------------|----------|
|   1  |  John   |  blah      |   ...    |
|------|---------|------------|----------|
| ...  |  ...    |   ...      |   ...    |
------------------------------------------

然后是主管表。这两列都可以在employees表中输入外键。

------------------------------------------
|  id  |  employee_id  |  supervisor_id  |
|------|---------------|-----------------|
|  0   |     1         |       0         |
|------|---------------|-----------------|
|  1   |     1         |       2         |  <---- Employee 1 is managed by 0, 2, and n
|------|---------------|-----------------|
|  0   |     0         |       2         |  <----- Employee 0 is managed by 2
|------|---------------|-----------------|
|  0   |     1         |       n         |
------------------------------------------

等...

答案 1 :(得分:1)

这看起来是同一个表的记录之间存在多对多关系的情况(一个主管的许多员工和一个员工的许多主管)。您需要为此案例添加单独的关联表(emp_id,upervisor_id)。这两个列都将为employee表定义外键约束

答案 2 :(得分:0)

你想要类似于法扎尔推荐的东西:

您的员工表,以及一个单独的关联表(employeeid,supervisorid,order)。 supervisorid和employeeid是employee表的外键,订购键是全局唯一的,或者每个employeeid是唯一的。您的数据库可能提供更好的订购方式。

当您需要主管时,可以在单独的表中查询employeeid,并按顺序键排序。