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外键的主键?
很抱歉,如果我不清楚的话。对不起,如果这是不可能的话。提前致谢
答案 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),因为它已经输入到表格中。在同一两行之间定义多个关系是没有意义的。