我需要一个具有这种结构的员工表:
员工(employeeid(int),supervisorids())
supervisorid只是主管的员工
一名员工可以有0名或多名主管(请注意0)。如果他有一个主管,那么我还需要有一个约束,这个雇员应该存在于表中......也就是说它是一个引用特定雇员的内部外键。
我应该如何设计我的表来存储这些信息?如果我将supervisorids列设为varchar(具有多个supervisisor的employeeid的分隔值),我将无法使用外键来检查该员工是否存在。
谢谢!
编辑:对不起,请随便提一下,“订购”在这里很重要。一个员工可能有一个主管名单,但他们在一个订单 - 有一个主要的主管,如果他不在,那么我们去第二个主管,然后是第三个,依此类推。
答案 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,并按顺序键排序。