mysql - 如何从两个外键制作复合 Material ? MySQL

标签 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外键的主键?

抱歉,如果我不清楚。对不起,如果这甚至不可能。提前致谢

最佳答案

一个字段可以是外键,主键,两者都可以,也可以都不是。 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/

相关文章:

php - "mysqli select"准备语句中的 php 函数出错

sql - 如何在 Oracle SQL 中通过循环创建一个字符串

mysql - 从mysql数据库中检索相同类型的值并添加到该值

php - 无法访问 PHP 中的变量值

mysql - AWS RDS 如何设置 MySQL 数据库

php - 为什么 PHP PDO 在 mysql 命令行工作时得到 "SQLSTATE[42000] [1044] Access denied for user"?

mysql - 单消费者-多线程 vs 多消费者

sql根据条件从另一个表插入行

sql - 查找用户定义类型的 SQL 基本类型

MySql 选择资格有效期