将2个主键列连接到同一个表中的1个外键列

时间:2011-09-06 21:36:02

标签: sql tsql database-design

我有jobs表,其中包含projectmanageridprojectdirectorid,例如

jobs
----------------
pk jobid
pk projectmanagerid
pk projectdirectorid

这两个id列都需要使用employeeid pk作为链接链接到employees表。这是一种好的做法还是有更好的方法?

employees
------------------
pk employeeid
   other stuff

4 个答案:

答案 0 :(得分:4)

只要您只拥有这两种类型:Manager和Director,这似乎没问题。但考虑一下将来是否需要添加其他员工类型,例如Coordinator。如果这是可能的话,那么你应该通过使用中间联结表解决jobsemployees之间的多对多关系,也许还要添加第三个表来描述员工的角色在工作中(经理,主任,......)。

enter image description here

答案 1 :(得分:0)

它没有任何问题,这是完全可以接受的。字段名称是描述性的,因此表示您确实需要有两个不同的FK指向users表。如果它是xy,那么它看起来很奇怪。

答案 2 :(得分:0)

在同一张桌子上有两个关系似乎很合理 - 在很多层面上很常见。与所有外键一样,但在这种情况下可能更是如此,请谨慎使用级联。我猜测删除经理或导演不应该导致删除工作记录。

答案 3 :(得分:0)

有一条经验法则规定表格模拟实体/类或实体/类之间的关系,但不是两者。因此,考虑创建两个关系表来分别为两个关系,项目经理和项目主管建模。我不推荐Joe Stefanelli的employee_role_id方法。我想你会发现每个角色的属性(是的,关系确实也有属性)将太过不同,以使通用表方法增加价值。