sql >> Databáze >  >> RDS >> Mysql

Jeden k mnoha MySQL

MySQL neví a ani nepotřebuje vědět, jestli je vztah 1-1 nebo 1-many.
Žádné SQL nepodporuje vztahy mnoho-mno, všechny vyžadují přechodnou tabulku, která rozděluje vztah mnoho-mnoho na 2 oddělte 1-mnoho.

Rozdíl je v logice, která řídí vztahy, což je v kódu, který píšete.
Vztah 1-1 je udržován tím, že tabulky sdílejí stejný primární klíč (PK).
S sekundární tabulka deklarující tento PK jako cizí klíč ukazující na ostatní tabulky PK.

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

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

Směr vztahu 1 -> many vs many <- 1 je určeno umístěním pole odkazu.

Obvykle má každá tabulka jedinečné id a pole odkazu se nazývá tablename_id .
Tabulka, která obsahuje pole odkazu, je many straně vztahu, druhá tabulka je na 1 straně.

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

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

Umístěním pole odkazu do location tabulky, vynutíte věci tak, že umístění může mít pouze 1 uživatele. Uživatel však může mít mnoho umístění.



  1. V odkazované tabulce nejsou žádné primární nebo kandidátské klíče, které by odpovídaly seznamu odkazujících sloupců v cizím klíči

  2. Protokol transakcí serveru SQL, část 2:Architektura protokolů

  3. MySQL LAST_INSERT_ID() používané s příkazem INSERT s více záznamy

  4. Jak opravit „Příkaz ALTER TABLE SWITCH se nezdařil“ Msg 4982 (SQL Server)