一尘不染

一对多MySQL

mysql

我试图用外键在MySQL中创建一对多关系。

两个表userlocation。每个user可以有多个location,但是每个location只能有一个user

我该如何配置?如果可以,我正在使用HeidiSQL,尽管我也可以输入代码。


阅读 471

收藏
2020-05-17

共1个答案

一尘不染

MySQL不知道,也不需要知道关系是1-1还是1-many。
没有SQL支持多对多关系,所有SQL都需要一个中间表,该表将多对多关系拆分为2个单独的1对多关系。

区别在于控制关系的逻辑,即编写的代码。
通过使表共享相同的主键来维持1-1关系。
用辅助表声明该PK作为指向其他表PK的外键。

Table chinese_mother (
id integer primary key,
name....


Table chinese_child (
id integer primary key,
name ....
....,
foreign key (id) references chinese_mother.id

关系的方向1 -> manyvs many <- 1由链接字段的位置确定。

通常每个表都有一个唯一id的链接字段称为tablename_id
其中具有链接字段的表many在关系的一侧,另一表在1一侧。

每个用户可以有多个位置,但是每个位置只能有一个用户。

Table user
id: primary key
name......
.....

Table location
id: primary key
user_id foreign key references (user.id)
x
y
.......

通过将链接字段放在location表中,您可以强制执行操作,因此一个位置只能有1个用户。但是,用户可以有许多位置。

2020-05-17