Externí klíč

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 11. prosince 2021; ověření vyžaduje 1 úpravu .

Cizí klíč ( angl. Foreign  key ) - koncept teorie relačních databází , vztahující se k omezením integrity databáze .

Neformálně řečeno, cizí klíč je podmnožina atributů nějaké relační proměnné R 2 , jejíž hodnoty se musí shodovat s hodnotami nějakého potenciálního klíče nějaké relační proměnné R 1 .

Formální definice. Nechť R1 a R2 jsou dvě  relační proměnné, které nemusí být nutně odlišné. Cizí klíč FK v R 2 je podmnožinou atributů proměnné R 2 tak, aby byly splněny následující požadavky:

  1. Relační proměnná R1 má potenciální klíč CK takový, že FK a CK se shodují až do přejmenování atributu (tj. přejmenováním některé podmnožiny atributů FK lze získat takovou podmnožinu atributů FK , že se FK' a CK shodují v názvu. a v typech atributů).
  2. V každém daném okamžiku je každá hodnota FK v aktuální hodnotě R2 totožná s hodnotou CK v nějaké n - tice v aktuální hodnotě R1 . Jinými slovy, v každém daném okamžiku je množina všech hodnot FK v R 2 (nepřísnou) podmnožinou hodnot CK v R 1 .

Navíc pro tento konkrétní cizí klíč FK → CK se vztah R 1 obsahující potenciální klíč nazývá hlavní , cílový nebo rodičovský vztah a vztah R 2 obsahující cizí klíč se nazývá podřízený nebo podřízený vztah.

Udržování cizích klíčů se také nazývá udržování referenční integrity . Relační DBMS podporují automatické řízení referenční integrity.

Příklad

Předpokládejme, že v databázi jsou dvě tabulky: Město (města) a Ulice (ulice), které jsou definovány takto:

CREATE TABLE Město ( id INTEGER NOT NULL PRIMARY KEY , název CHAR ( 40 ) ) CREATE TABLE Ulice ( id INTEGER NOT NULL PRIMARY KEY , název CHAR ( 40 ), id_city INTEGER NOT NULL CIZÍ KLÍČ REFERENCE Město ( id ) )

Obsah těchto tabulek je následující:

MĚSTO

ID NÁZEV
jeden Moskva
2 Petrohrad
3 Vladivostok

ULICE

ID NÁZEV ID_CITY
181 Malajská Bronnaya jeden
182 Tverský bulvár jeden
183 Něvská třída 2
184 Puškinská 2
185 Světlanská 3
186 Puškinská 3

Tabulka STREET má pole ID_CITY, což je cizí klíč a odkazuje na tabulku CITY. Hodnota v tomto poli odpovídá primárnímu klíči v tabulce MĚSTO pro město, kde se ulice nachází. Něvský prospekt má tedy ID_CITY=2, což odpovídá Petrohradu (ID=2 v tabulce CITY).

Tabulka STREET obsahuje dvě ulice se stejným názvem Pushkinskaya, které se liší hodnotou pole ID_CITY. Jeden z nich se nachází v Petrohradě (ID_CITY=2), druhý ve Vladivostoku (ID_CITY=3).

Pokus o přidání ulice "Deribasovskaya" s ID_CITY=4 do tabulky STREET způsobí chybu narušení referenční integrity, protože v tabulce CITY není žádné město s ID=4. Po přidání města „Odessa“ s ID=4 do tabulky MĚSTO však bude opětovné zadání ulice „Deribasovskaya“ s ID_CITY=4 úspěšné.

Při mazání města Vladivostok z tabulky CITY závisí výsledek na vlastnostech cizího klíče:

  • Je-li povoleno řetězové mazání cizího klíče, pak ulice Svetlanskaja a Puškinskaja s ID=3 budou smazány spolu se smazáním Vladivostoku.
  • Pokud je mazání řetězce pro cizí klíč zakázáno, operace vygeneruje chybu porušení referenční integrity, protože tabulka STREET bude obsahovat ulice s kódem ID_CITY=3, který není v tabulce CITY.

Při změně kódu města Petrohrad z 2 na 48 v tabulce CITY závisí výsledek na vlastnostech cizího klíče:

  • Pokud je povoleno cizí klíč měnit v řetězci, pak se spolu se změnou kódu Petrohradu změní hodnoty ID_CITY pro odpovídající ulice.
  • Pokud není povoleno měnit cizí klíč v řetězci, pak operace způsobí chybu narušení referenční integrity, protože tabulka STREET bude obsahovat ulice s kódem ID_CITY=2, který není v tabulce CITY.

Literatura

  • Datum CJ Úvod do databázových systémů = Úvod do databázových systémů. - 8. vyd. - M .: "Williams" , 2006. - 1328 s. — ISBN 0-321-19784-4 .