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ď č. 1Vaš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).