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外键的主键?
抱歉,如果我不清楚。对不起,如果这甚至不可能。提前致谢
最佳答案
一个字段可以是外键,主键,两者都可以,也可以都不是。 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) 不会被允许,因为它已经被输入到表格中。在相同的两行之间定义多个关系是没有意义的。
关于mysql - 如何从两个外键制作复合 Material ? MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29668173/