0

我有一个分配表和一个员工表。我希望分配与现有员工和现有项目相关联。我有两个主键,一个来自员工表,另一个来自项目表。每个引用回分配表。我的外键约束可以像我展示的那样是分开的,还是它们必须在一起并且有一个“和”声明?

 create table assignment 
(asg_prj_p# number(2),
asg_emp_e#a varchar2(1),
asg_emp_e#n varchar2(5),
asg_hrs number(3),
constraint fk_project foreign key (asg_prj_p#) references project (prj_p#),
constraint fk_employee foreign key (asg_emp_e#a, asg_emp_e#n) references employee (emp_e#a, emp_e#n));
4

2 回答 2

0

你的问题对我来说并不完全清楚。但以下陈述将帮助您解决问题。

在您的分配表中,您有两个外键。一种是单外键:asg_prj_p#,另一种是复合外键(asg_emp_e#a,asg_emp_e#n)。复合外键必须引用复合主键或复合唯一键列。因此,在您的示例中,员工表的 (emp_e#a, emp_e#n) 列必须是复合主键或复合唯一键。

于 2012-09-20T15:48:12.383 回答
0

外键约束是独立的——即一个确保您在项目表中有一行具有在您的 asg_prog_p 字段中指定的 ID,另一个对员工表和构成它的键的两个字段执行相同的操作。因此,就外键约束而言,您所拥有的看起来不错。

然后,您可能需要使用这 3 个字段的复合主键 - 这取决于员工是否可以在特定项目上拥有一个或多个分配。如果只有一个,那么复合主键可能是一个好主意。否则,您应该考虑是否需要另一个字段来加入复合主键,或者您可以创建一个新字段,例如“assignment_id”作为主键。

于 2012-09-20T16:02:22.267 回答