/ / obmedzenia cudzieho kľúča v tabuľke so zloženým primárnym kľúčom - mysql, phpmyadmin

cudzie kľúčové obmedzenia na stôl so zloženým primárnym kľúčom - mysql, phpmyadmin

Mám 2 tabuľky:

prvý je niečo také:

Person
first_name (primary key)
family_name (primary key)
age
[other things..]

druhý je:

Doctor
first_name
family_name
specialty

V podstate teda v tabuľke Osoba môže byť „rovnaká ako 2 osoba first_name a family_name, Funguje to dobre, ak som ich zapol primary key pomocou phpmyadmin.

Môj problém je, že teraz chcem znemožniť pridanie Doctor kto nie je Person, Skúsil som nasadiť obmedzenie cudzieho kľúča doctor.first_name a doctor.family_name, ale očividne to problém nevyrieši.

(Nepýtajte sa ma na použitie id alebo tak niečo, moje tabuľky sú oveľa komplikovanejšie a ja nemôžem použiť id, musí to byť tabuľka so zloženým primárnym kľúčom).

odpovede:

1 pre odpoveď č. 1

Vaše znenie nie je presné. Tabuľka nemôže obsahovať 2 primárne kľúče. Môže však mať a zlúčenina (Kompozitný) Primárny kľúč, ktorý sa skladá z 2 alebo viacerých stĺpcov.

CREATE TABLE Person
(      first_name
,      family_name
,      age
,      ...
,   PRIMARY KEY (first_name, family_name)
)

Ponechanie bokov diskusií o náhradných vs. prirodzené kľúče, ak máte taký zložený primárny kľúč, akýkoľvek cudzí kľúč z inej tabuľky by mal byť zložený a mal by odkazovať na váš zložený primárny kľúč:

CREATE TABLE Doctor
(      first_name
,      family_name
,      specialty
,      ...
,   PRIMARY KEY (first_name, family_name)

,   FOREIGN KEY (first_name, family_name)
REFERENCES Person (first_name, family_name)
)

Tento druh obmedzenia cudzieho kľúča, kde PRIMARY KEY tabuľky (Doctor) je tiež FOREIGN KEY na inú tabuľku (Person) je bežné riešenie pre 1::0..1 vzťah (tiež nazývaný supertyp / podtyp).