Procházet otázky :: SZZ na MFF UK

#

- Hlavní strana
- Okruhy
- Projít
- Stáhnout
- Co je potřeba
- Chci přispět
- Kredity

Hledat:

## Prohlížení státnicových textů

## Referenční integrita

Jedná se o nástroj databázového stroje, který pomáhá udržovat vztahy v relačně propojených databázových tabulkách.

Referenční integrita se definuje cizím klíčem, a to pro dvojici tabulek, nebo nad jednou tabulkou, která obsahuje na sobě závislá data (například stromové struktury). Tabulka, v níž je pravidlo uvedeno, se nazývá podřízená tabulka (používá se také anglický termín slave). Tabulka, jejíž jméno je v omezení uvedeno je nadřízená tabulka (master). Pravidlo referenční integrity vyžaduje, aby každý záznam použitý v podřízené tabulce existoval v nadřízené tabulce. To znamená, že každý záznam musí v cizím klíči obsahovat hodnoty odpovídající primárními klíči v nadřízené tabulce, nebo null.

To sebou nese dva důsledky:

- při přidání záznamu do podřízené tabulky se kontroluje, zda stejná hodnota klíče existuje v nadřízené tabulce – porušení pravidla vyvolá chybu,
- při mazání nebo úpravě záznamů v nadřízené tabulce se kontroluje, zda v podřízené tabulce není záznam se stejnou hodnotou klíče – porušení pravidla může vyvolat chybu nebo úpravu dat v podřízené tabulky v souladu s definovanými akcemi.

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 (klíči) osoba-id v tabulce osoby. Když je poté přidán záznam pro psa, databáze bude vyžadovat, aby číslo v poli majitel nabývalo 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ým je osoba majitelem, nebo zda má pokus o smazání osoby vlastnící alespoň jednoho psa selhat.

Existuje tedy několik referenčních akcí, které mohou být vyvolány, když dochází ke změně nebo mazání v závislých tabulkách:

CASCADE
  - Pokud je smazán řádek v nadřízené tabulce, řádky z podřízené tabulky obsahující mazaný cizí klíč budou smazány také.

RESTRICT
  - Řádek v nadřízené tabulce nesmí být smazán ani změněn, pokud v podřízené tabulce existují závisející řádky. Nedojde ani k pokusu o změnu dat.

NO ACTION
  - Operace Update nebo Delete je spuštěna na nadřízenou tabulku a na konci je teprve vyhodnoceno, jestli nedošlo k porušení integrity. Rozdíl oproti akci RESTRICT je ten, že samotným dotazem, nebo například triggerem může být zařízeno, aby k porušení integrity nedošlo. Potom je operace normálně provedena.

SET NULL
  - Cizí klíč v podřízené tabulce je nastaven na null, pokud dojde ke změně či smazání v odpovídajícím řádku nadřízené tabulky.

SET DEFAULT
  - Téměř to samé jako SET NULL, hodnoty cizího klíče jsou nastaveny na defaultní hodnotu sloupce, pokud dojde ke změně či smazání odpovídajícího řádku v nadřízené tabulce.