如何用两个外键制作复合? MySQL的

时间:2015-04-16 07:32:52

标签: mysql sql

create table Atable ( 
a int, primary key(a)
);

create table Btable (
b int, primary key(b)
);

create table Ctable (
a int, b int,
foreign key(a) references Atable(a), 
foreign key(b) references Btable(b), //i dont want to these to be foreign keys, just two primary keys.. so a composite key.
primary key(a, b)
);

如何使表C具有Atable和Btable外键的主键?

很抱歉,如果我不清楚的话。对不起,如果这是不可能的话。提前致谢

1 个答案:

答案 0 :(得分:1)

字段可以是外键,主键,两者都可以。 CTable是ATable和BTable之间的交集,用于实现它们之间的多对多关系。对于交集表,通常的做法是将两个外键都作为表的复合主键。

这可以防止重复的关系。来自ATable的行可以与BTable中的许多行相关,但它不能与BTable的同一行多次相关(反之亦然)。

Create table CTable(
    a   int not null,
    b   int not null,
    foreign key( a ) references ATable( a ),
    foreign key( b ) references BTable( b ),
    primary key( a, b )
);

因此,如果您尝试在CTable中插入行,请执行以下操作:

A1    B1
A1    B2
A2    B3
A3    B1
A3    B3
A3    B1  --> Not allowed

不允许使用最后一个组合(A3,B1),因为它已经输入到表格中。在同一两行之间定义多个关系是没有意义的。