Ответ 1
MySQL не знает, и не нужно знать, имеет ли отношение 1-1 или 1-много.
Нет 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 -> many
vs 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 пользователь. Однако у пользователя может быть много мест.