co jsou klíče a omezení?
databáze musí dodržovat určité vlastnosti, aby byla zachována integrita a kvalita dat, která ukládá. Klíče a omezení jsou pravidla, která definují, jaké hodnoty dat jsou povoleny v určitých datových sloupcích. Jsou důležitým konceptem databáze a jsou součástí definice schématu databáze. Definování klíčů a omezení je součástí procesu návrhu databáze a zajišťuje, že data v databázi jsou spolehlivá a udržují její integritu. Omezení se mohou vztahovat na konkrétní sloupec, celou tabulku, více než jednu tabulku nebo celé schéma. Spolehlivý databázový systém zajišťuje, že omezení platí po celou dobu. Klíče jsou zvláštním typem omezení používaným k navázání vztahů a jedinečnosti.
primární klíč
nezbytnou součástí vytváření vztahů mezi dvěma entitami nebo dvěma částmi dat je správná identifikace dat. V SQL je jednoznačná identifikace dat kritická. Primární klíč je jedinečný identifikátor pro řadu dat. V tabulkové analogii, kterou jsme dosud používali, vždy existoval sloupec id
. Zatímco jakýkoli sloupec může sloužit jako primární klíč, použití sloupce s názvem id
je snadné z mnemotechnických důvodů a je populární konvencí. V RDBMS může mít každá tabulka pouze jeden primární klíč.
primární klíč je zaručený jedinečný identifikátor řádku v tabulce. Z tohoto důvodu můžeme použít hodnotu primárního klíče řádku k odkazu na tento řádek z jiných tabulek. V předchozí kapitole jsme na základě toho vytvořili vztahy mezi více tabulkami, ale relační databáze potřebují způsob, jak se navzájem vztahovat, a sloupec primárního klíče je způsob, jak to udělat efektivně. V PostgreSQL mají primární klíče také výhody výkonu, protože je známo, že budou často používány k vyhledávání dat, zejména při vyhledávání více tabulek.
uvědomte si, že ne všechny sloupce s názvem “ id “ jsou primární klíče; toto je pouze konvence. Kromě toho mohou mít primární klíče libovolný název.
syntaxi pro označení sloupce jako sloupce primárního klíče jsme již viděli v předchozích kapitolách:
pojďme se podívat na výše uvedený příkaz, který vytvoří tabulku s názvem users
z pohledu porozumění primárním klíčům.
-
id
sloupec je primárním klíčem této tabulky. Můžeme také říci, že omezení primárního klíče bylo použito na sloupecid
. -
id
může obsahovat pouze číselné hodnoty (int
). - pro každý nový řádek přidaný do tabulky se pole
id
automaticky zvýší o 1. U mnoha RDBMS se používá klíčové slovoAUTO_INCREMENT
. S PostgreSQL, používáme serial k automatickému přírůstku našich ID a nastavíme jejich typ jako celé číslo. Není nutné ručně zadat hodnotu primárního klíče při každém vložení dat, PostgreSQL to udělá za vás, pokud zadáte serial jako typ pro id.
cizí klíč
sloupce cizích klíčů se používají k odkazu na jiný řádek dat, možná v jiné tabulce. Aby bylo možné odkazovat na jiný řádek, databáze potřebuje pro tento řádek jedinečný identifikátor. Sloupce cizích klíčů proto obsahují hodnotu primárního klíče odkazovaného řádku. Například tabulka může mít sloupec nazvaný user_id
jako sloupec cizího klíče, který odpovídá sloupci id
tabulky users
. Cizí klíče jsou způsob, jakým RDBMS nastavuje vztahy mezi řádky dat, buď ve stejné tabulce, nebo napříč tabulkami.
z výše uvedeného příkazu SQL můžete vidět, že řádek pro navázání tohoto vztahu je
FOREIGN KEY (book_id) REFERENCES books(id) ON DELETE CASCADE
ve výše uvedeném příkladu id
je primární klíč tabulky books
, který se používá k navázání vztahu s tabulkou recenzí. Data id
jsou uložena v tabulce recenzí v poli book_id
a mapují knihy s recenzemi. Klauzule ON DELETE CASCADE
označuje, že pokud je kniha odstraněna, jsou odstraněny také všechny recenze spojené s touto knihou.
kompozitní klíč jako primární klíč
v předchozí kapitole jsme vytvořili vztah mnoho k mnoha, ve kterém byl náš primární klíč vytvořen ze dvou sloupců. user_id
a book_id
oba společně tvořily primární klíč pro křížovou referenční tabulku, jak je vidět v tomto řádku příkazu SQL.
PRIMARY KEY (user_id, book_id)
pokud se primární klíč skládá z jedinečného páru PRIMARY KEY (user_id, book_id)
, je znám jako složený klíč. Obvykle se vyskytuje v mnoha až mnoha vztazích, a pro uložení těchto dat o vztahu musíme přidat další tabulku. Kompozitní klíč zajišťuje, že data v tabulce budou jedinečná pro vztah mezi uživatelem a knihou. Příklad:
|User_id | Book_id | | 1 | 1 | | 1 | 2 | | 2 | 1 |
unikátní omezení
kromě primárního klíče umožňuje databáze také použití jedinečného omezení na libovolný sloupec v databázi. Například v tabulce knihy můžeme zvolit nejen book_id
jako jedinečný primární klíč, ale také je třeba uložit číslo ISBN knihy. ISBN, mezinárodní standardní číslo knihy je 10 místné jedinečné číslo pro knihu. Můžeme se rozhodnout navrhnout naši databázi, aby byl tento sloupec jedinečný. I když se nejedná o primární klíč, duplicitní isbn nebudou v tabulce knih povoleny a kvalita dat bude zachována.
unikátní omezení zakazuje duplicitní zápis do tabulky knih pro hodnotu sloupce isbn.
NOT NULL Constraints
v mnoha našich SQL příkazech jsme viděli „NOT NULL“. Omezení NOT NULL
brání sloupci povolit hodnotu null (tj. tento sloupec musí obsahovat data). To je důležité pro klíčová pole. Například: pokud chcete přidat uživatele do databáze, musíte zadat uživatelské jméno. Bez tohoto omezení by se Databáze naplnila hodnotami null a stala se méně užitečnou.
jak SQL zpracovává tyto vztahy?
PostgreSQL umožňuje vztahy mezi schématem a daty různých tabulek pomocí cizích klíčů a operace nazvané a JOIN
. Jak název napovídá, účelem je spojit tabulky. Prostřednictvím tohoto mechanismu můžeme například získat úplné podrobnosti o autorovi výše uvedené tabulky recenzí, protože má pole user_id
, které se vztahuje k tabulce user
. Zde je rychlý příklad:
Nyní, když jsme pochopili, jak vytvořit více tabulek a role klíče hrají při vytváření vztahů, budeme se hlouběji podívat na různé spojení a jak SQL dotazy jsou postaveny pomocí těchto spojení načíst data požadovaná z více tabulek.