表的外键是否可以作为同一个表的复合主键的一部分?

时间:2013-12-04 22:11:15

标签: database database-design data-modeling

假设我有两个表:A(带有列:a,b,c,d)和B(带有列:x,y,z)。现在,(a,b)一起构成表A的主键,x是表B的主键。是否可以使b表A的外键引用{{1}来自表B?

请尽快回复!

提前致谢! : - )

1 个答案:

答案 0 :(得分:0)

是的,没有问题。一个典型的例子(使用MySQL进行演示)是一个数据库表,其中包含许多公司和另一个可以为这些公司中的任何一个工作的员工:

create table companies (
  id            int primary key,
  name          varchar(20));

create table employees (
  id            int,
  c_id          varchar(20) references companies(id),
  name          varchar(20),
  primary key   (id, c_id));

insert into companies (id, name) values (1, 'ABC');
insert into companies (id, name) values (2, 'DEF');
insert into companies (id, name) values (3, 'HIJ');

insert into employees (id, c_id, name) values (101, 1, "Allan");
insert into employees (id, c_id, name) values (102, 1, "Bobby");
insert into employees (id, c_id, name) values (101, 2, "Carol");
insert into employees (id, c_id, name) values (101, 3, "David");

请注意,employees的主键是由员工ID和公司ID组成的复合键。另请注意,公司ID是companies主键的外键约束,即您询问的确切情况(功能上)。

显示谁在哪家公司工作的查询显示了这一点:

select   c.id, c.name, e.id, e.name
from     companies c, employees e
where    c.id = e.c_id
order by c.id, e.id

c.id   c.name   e.id   e.name
----   ------   ----   ------        
   1   ABC       101   Allan
   1   ABC       102   Bobby
   2   DEF       101   Carol
   3   HIJ       101   David