Téma 2.2 Primární klíč, cizí klíč, referenční integrita, pravidla normalizace, relace Obecný postup: Každá tabulka databáze by měla obsahovat pole (případně sadu polí), které jednoznačně identifikuje každý záznam uložený v tabulce. Takové pole je označováno jako primární klíč. Protože informace v databázi rozdělujeme do samostatných tabulek, relace mezi tabulkami (díky primárním a cizím klíčům) nám umožňují informace z jednotlivých tabulek následně pospojovat prostřednictvím dotazů. Aby pole mohlo sloužit jako primární klíč, mělo by splňovat několik následujících podmínek. Za prvé, pole musí jednoznačně identifikovat každý řádek. Za druhé, pole nesmí být prázdné nebo obsahovat hodnotu Null musí vždy obsahovat hodnotu. Za třetí, pole by se mělo pouze zřídkakdy (v ideálním případě nikdy) měnit. V relaci (vztahu, spojení) jsou pole, která jsou nastavena na datový typ Automatické číslo, kompatibilní s poli nastavenými na datový typ Číslo, pokud má pole typu Číslo vlastnost Velikost pole nastavenou na Dlouhé celé číslo. Jakmile je primární klíč definován, lze jej použít v jiných tabulkách jako odkaz (cizí klíč) na tabulku s primárním klíčem. Například pole Kód zákazníka z tabulky Zákazníci může být použito v tabulce Objednávky. V tabulce Zákazníci je to primární klíč. V tabulce Objednávky se toto pole nazývá cizí klíč. Cizí klíč je tedy vlastně primárním klíčem jiné tabulky. KIT PEF ČZU v Praze Stránka 1
KIT PEF ČZU v Praze Stránka 2
S pojmy primární a cizí klíč souvisí pojem referenční integrita. Tabulka v databázi nesmí obsahovat žádné hodnoty cizího klíče, které nemají odpovídající hodnoty primárního klíče v relevantní bázové tabulce, např. nelze vložit do tabulky výrobek, jenž nemá v odpovídající bázové (nadřízené) tabulce Výrobci určeného výrobce. Pravidla normalizace Při sestavování relační databáze musíme dodržovat jistá pravidla. Pravidla jsou uspořádána do 3 "normálních forem", mluvíme o procesu normalizace. První normální forma: žádné vícehodnotové atributy - každý průsečík řádku a sloupce musí obsahovat nejvýše jednu datovou hodnotu. Kód filmu Název filmu Rok produkce Jazyk 1 Poslední samuraj 2003 angl, fr, es 2 Loupež po italsku 2003 fr, es, it KIT PEF ČZU v Praze Stránka 3
- řešením je vznik samostatné tabulky Jazyky. Druhá normální forma Relace (tabulka) je ve druhé normální formě tehdy, když splňuje následující kritéria: 1. je v první normální formě, 2. všechny neklíčové atributy funkčně závisí na celém primárním klíči (na celém jedinečném identifikátoru). Jinak řečeno: v jedné tabulce nebudou argumenty (sloupce) týkající se dvou odlišných objektů reálného světa (entit). Důležité je vnímat, že se to týká neklíčových atributů (a ne atributu cizí klíč). Třetí normální forma nejdříve objasnění, co znamená tranzitivně závislý atribut: je to takový atribut, který závisí na atributu, jenž není jedinečným identifikátorem (primárním klíčem) relace (tabulky). Relace je ve třetí normální formě, pokud splňuje následující kritéria: 1. relace (tabulka) je ve druhé normální formě, 2. neexistují žádné tranzitivní závislosti. Relace Mezi tabulkami jsou vytvořeny vztahy (relace). Relace pracují na principu porovnání dat v klíčových polích (primární klíč, cizí klíč). Cizí klíč vyjadřuje, jak spolu tabulky souvisejí. Pokud jsou v databázi definovány relace mezi tabulkami, pak lze data z několika tabulek zobrazit v jednom formuláři, sestavě, a také tvořit dotazy na údaje z více tabulek najednou. Typy relací jsme definovali na přednášce i na cvičení č.1: relace typu 1:N, relace typu N:N, relace typu 1:1. KIT PEF ČZU v Praze Stránka 4
Řešený příklad č. 221 V databázi Inventarizace nastavte relaci mezi tabulkami Zaměstnanci a Inventář. Obrazová ukázka řešení Postup řešení Předpokladem je, že v tabulce Zaměstnanci je správně určen primární klíč a v tabulce Inventář je určen cizí klíč, který tvoří vazbu na tabulku Zaměstnanci. Než začnete vytvářet relaci (relace), uložte a zavřete tabulky. Na kartě Databázové nástroje, ve skupině Zobrazit či skrýt zvolte nástroj Vztahy. Zobrazí se dialogové okno Zobrazit tabulku (nebo Návrh Vztahy Zobrazit tabulku). V okně Zobrazit tabulku poklepejte na tabulky, které budete potřebovat v relaci (zde obě tabulky, Zaměstnanci i Inventář). Tabulky se zobrazí v okně Relace. KIT PEF ČZU v Praze Stránka 5
Uchopte myší primární klíč tabulky Zaměstnanci (to je tabulka na straně 1 v relaci) a přetáhněte jej na položku cizího klíče do tabulky na straně N v relaci. Přetáhnete tedy položku Číslo zaměstnance z tabulky Zaměstnanci na položku Spravuje tabulky Inventář. Objeví se dialogové okno Upravit relace. Zaškrtněte Zajistit referenční integritu a stiskněte Vytvořit. KIT PEF ČZU v Praze Stránka 6
Nastavili jste relaci 1:N mezi tabulkou Zaměstnanci a tabulkou Inventář. Jeden zaměstnanec má nekonečně mnoho položek inventáře. Jeden kus inventáře je v držení jednoho zaměstnance. A nyní je čas na naplnění tabulek vlastními daty, tedy zaměstnanci i inventáři. Záznamy do tabulky vyplňujete v zobrazení Datového listu. Tabulky obsahují následující údaje: V tabulce Inventář představuje číslo 4 v poli Spravuje, že skříň s policemi má v držení zaměstanec s primárním klíčem 4 (tedy pan Černý). V poli Inventární číslo je vidět, že pro toto pole je nastavena Maska, která usnadní vložení inventárního čísla. Vkládání čísla do pole Spravuje je při větším počtu zaměstnanců nepříjemné, protože bychom si čísla zaměstnanců museli pamatovat (nebo je mít někde vypsané), řeší se tato situace pomocí datového typu Průvodce vyhledávání. Ten umožní, abychom místo čísla mohli vybírat napříkald ze seznamu jmen a příjmení zaměstnanců. Vysvětlení k použití datového typu průvodce vyhledávání je řešeno v samostatném návodu. KIT PEF ČZU v Praze Stránka 7