Referenční integrita
Referenční integrita je nástroj, který pomáhá udržovat vztahy v relačně propojených databázových tabulkách. Jednoduše řečeno to znamená, že cizí klíč v jedné tabulce musí odkazovat na existující klíč ve druhé tabulce, popř. musí obsahovat hodnotu NULL
.
Tabulka, v níž je pravidlo uvedeno, se nazývá podřízená tabulka a tabulka, jejíž jméno je v omezení uvedeno, je nadřízená tabulka.
Jak se projevuje referenční integrita
- Při přidání či změně záznamu v podřízené tabulce 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 předem definovanou úpravu dat podřízené tabulky.
Omezení cizího klíče
Omezení cizích klíčů nabízí způsob pro udržení referenční integrity databáze. V MySQL databázi lze toto omezení provádět pouze nad tabulkami, které používají úložiště InnoDB (lze zvolit při tvorbě tabulky). Pomocí phpMyAdmin pak můžeme omezení nastavit v záložce struktury databáze (1), po kliknutní na tlačítko zobrazení relací (2). Propojení však lze nastavit pouze nad atributy, které mají přiřazený primární a cizí klíč.
Můžeme nastavit akci, která se má stát po odstranění záznamu (ON DELETE
), případně po aktualizaci záznamu (ON UPDATE
). Na výběr je z několika klauzulí:
- CASCADE - automaticky v podřízené tabulce odstraní nebo aktualizuje odpovídající řádky
- SET NULL - nastaví cizí klíč v podřízené tabulce na hodnotu
NULL
- NO ACTION - v MySQL je ekvivalentní klauzuli RESTRICT
- RESTRICT - odmítne odstranit nebo aktualizovat klíč nadřazené tabulky
V případě, že bychom dotaz vykonávali pomocí SQL by dotaz vypadal následně:
ALTER TABLE `komentare`
ADD FOREIGN KEY (`id_uzivatele`)
REFERENCES `uzivatele`(`id`)
ON DELETE RESTRICT
ON UPDATE CASCADE;
Úlohy k procvičení:
- Vytvořte tabulku `clanky` (id, titulek, popis, datum), `komentare` (id, id_clanku, id_uzivatele, text, datum) a `uzivatele` (id, nick, email). Při vytváření použijte správné datové typy.
- Pro cizí klíče id_clanku a id_uzivatele vhodně definujte omezení primárního klíče.
Obsah kurzu:
-
Úvod do relačních databází a jazyka SQL
06:16 - 04:36
-
Přehled základních datových typů
04:42 -
Normalizace relačních databází
06:43 -
Výběr a seznámení s prostředím pro práci s databází
04:40 - 05:16
- 08:57
-
Referenční integrita a omezení cizího klíče
06:08 - 04:54
-
Výběr a filtrování dat z tabulky
05:47 - 04:14
-
Editace a odstranění dat z tabulky
06:31 -
Agregační funkce a seskupování
05:14 -
Spojení více tabulek a použití JOIN
05:21 - 04:09
- 05:35