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:
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ř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:
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:
Databáze | |
---|---|
Koncepty |
|
Objekty |
|
Klíče | |
SQL | |
Komponenty |