Cizí klíč
- Článek
- Diskuse
Cizí klíč (FOREIGN KEY) definuje v prostředí relačních databází vztah mezi dvěma tabulkami, a to tak, že hodnota v určeném sloupci jedné tabulky musí existovat v jiném (primárním) klíči. Tím je definováno integritní omezení, které do položky v tabulce umožní vložit jen povolené hodnoty. Je tím vlastně vytvořeno spojení jednoho nebo více sloupců se sloupcem nebo více sloupci jiné („cizí“) tabulky. Tomu se též říká reference nebo odkaz.
Cizí klíč umožňuje definovat akce, které mají nastat při pokusu o změnu nebo mazání záznamů v cizí tabulce. Například po smazání záznamu z cizí tabulky budou ve zdrojové tabulce řádky s odpovídající hodnotou cizího klíče taktéž smazány nebo budou jejich odkazy nastaveny na určitou (neutrální) hodnotu nebo se smazání řádků v cizí tabulce zabrání. Omezení cizích klíčů tak představuje mechanismus pro udržení referenční integrity databáze.
[CONSTRAINT [název omezení]] FOREIGN KEY [název klíče] (název sloupce tabulky nebo jejich seznam oddělený čárkami) REFERENCES jméno_tabulky (název sloupce nebo jejich seznam oddělený čárkami) [ON DELETE akce] [ON UPDATE akce]
Definice cizího klíče platí jen v jednom směru – často se pro účely lepší představy „cizí“ tabulce říká rodičovská tabulka a tabulce, v níž se aplikují změny v závislosti na nastavení cizího klíče, dceřiná tabulka.
Jako akce může být:
V databázi spolku přátel psů máme následující tabulky:
osoby
se sloupci osoba_id
a jméno
psi
se sloupci pes_id
, majitel
a rasa
Aby byla data v databázi korektní, je třeba, aby každý záznam psa měl uvedeného platného majitele. Proto označíme v tabulce psi
sloupec majitel
jako cizí klíč, vztažený k sloupci osoba_id
v tabulce osoby
. Když je poté přidán záznam pro psa, databázový engine bude vyžadovat, aby hodnota v poli majitel
nabývala některé z existujících hodnot osoba_id
tabulky osoby
. Zároveň můžeme určit, zda se při smazání osoby smažou i záznamy všech psů, kterých je majitelem, nebo zda má pokus o smazání osoby vlastnící alespoň jednoho psa selhat.
![]() | Tento článek je příliš stručný nebo postrádá důležité informace. Pomozte Wikipedii tím, že jej vhodně rozšíříte. Nevkládejte však bez oprávnění cizí texty. |