一对多的MySQL

Bau*_*aub 15 mysql database-design foreign-keys foreign-key-relationship

可能重复:
MySQL关系

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

两张桌子,userlocation.每个都user可以有很多locations,但每个location只能有一个user.

我该如何配置?我正在使用HeidiSQL,如果这有帮助,虽然我也可以输入代码.

Joh*_*ica 39

MySQL不知道,也不需要知道关系是1-1还是1-many.
没有SQL支持许多关系,所有这些都需要一个中间表,它将多对多关系分成2个单独的1-many.

不同之处在于控制关系的逻辑,即在您编写的代码中.
通过使表共享相同的主键来维持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
Run Code Online (Sandbox Code Playgroud)

关系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
.......
Run Code Online (Sandbox Code Playgroud)

通过在location表中放置链接字段,可以强制执行以使位置只能有1个用户.但是,用户可以拥有许多位置.


And*_*and 8

这里有一个例子,几乎就是你在innodb中需要外键的东西

CREATE TABLE parent (
  id INT NOT NULL,
  PRIMARY KEY (id)
) ENGINE=INNODB;

CREATE TABLE child (
  id INT,
  parent_id INT,
  INDEX par_ind (parent_id),
  FOREIGN KEY (parent_id) REFERENCES parent(id) ON DELETE CASCADE
) ENGINE=INNODB;
Run Code Online (Sandbox Code Playgroud)

在您的示例中,用户与父级相同(用户具有多个位置,父级具有多个子级),且位置与子级相同(位置具有一个用户,子级具有一个父级)