Cizí klíč

Article on other languages:

del.icio.us del.icio.us
Digg Digg
Furl Furl
Reddit Reddit
Rojo Rojo
Add to OnlyWire

Cizí klíč (FOREIGN KEY) je v prostředí relačních databází integritní omezení, které u tabulky vytvoří spojení jednoho nebo více jejích sloupců se sloupcem nebo sloupci jiné („cizí“) tabulky. Pokud se hodnoty dotčených sloupců shodují, poté příslušný řádek cizí tabulky rozvíjí řádek zdrojové tabulky přes toto spojení. Tomu se též říká reference nebo odkaz.

Cizí klíč umožňuje definovat akce, které mají nastat při změně nebo smazání záznamů ve zdrojové tabulce, například, po smazání záznamu z primární tabulky budou v cizí tabulce řádky se stejnou hodnotou cizího klíče, taktéž smazány, nastaveny na určitou hodnotu nebo se smazání zabrání úplně. Cizí klíče tak představují mechanismus pro udržení referenční integrity databáze.

Obsah

Syntaxe

[CONSTRAINT [název omezení]] FOREIGN KEY
    [jméno 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 tabulce obsahující referenci říká rodičovská tabulka a tabulce, v níž se aplikují změny v závislosti na cizím klíči, říká dceřinná tabulka.

Akce

Jako akce může být:

  • CASCADE – pro klauzuli ON UPDATE se v dceřinné tabulce adekvátně změní odkazy na cizí klíč; v případě ON DELETE se záznamy odkazující na smazaný klíč smažou také. Většina vyspělejších databázových systémů umožňuje tuto akci aplikovat zřetězeně (pokud je nastaveno, že dceřinná tabulka je z hlediska cizího klíče současně rodičovskou tabulkou pro tabulku jinou atd).
  • SET DEFAULT – při změně nebo smazání cizího klíče se reference v dceřinné tabulce nastaví na hodnotu, kterou má definovanou jako výchozí
  • SET NULL – jako SET DEFAULT, kde defaultní hodnotou je zde hodnota NULL
  • RESTRICT – pokud v dceřinné tabulce existují záznamy odkazující na cizí klíč, pak odpovídající záznam v rodičovské tabulce nepůjde změnit nebo smazat (SŘBD tomu zabrání)
  • NO ACTION – v konečném efektu stejné jako RESTRICT; rozdíly interpretace se liší podle jednotlivých databázových systémů: v některých akce NO ACTION na rozdíl od RESTRICT nehodí chybovou hlášku; v jiných implementací se tyto dvě akce liší v „opožděnosti,“ s kterou databázový systém cizí klíče kontroluje. Např. v případě MySQL se kontrola provádí implicitně, pokud není vypnuta direktivou SET FOREIGN_KEY_CHECKS = 0;.

Příklad

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 číslo v poli majitel nabývalo některé z existujících hodnot 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ými je majitelem, nebo zda má pokus o smazání osoby vlastnící alespoň jednoho psa selhat.

Související články

Externí odkazy


This article is from Wikipedia. All text is available under the terms of the GNU Free Documentation License.


Giant Panda

Mercedes Car
James Bond Guide
This site monitored by SitePinger.net