Jedním z cílů kvalitního návrhu databáze je odstranit redundanci dat (duplicitní data). Dosáhnete toho tak, že data rozdělíte do mnoha tabulek s různými předměty, aby byl každý fakt reprezentován pouze jednou. Pak accessu poskytnete způsob, jak rozdělit informace znovu dohromady – uděláte to tak, že do tabulek, které spolu souvisejí, umístíte společná pole. Chcete-li však tento krok provést správně, je nutné pochopit vztahy (relace) mezi tabulkami a tyto relace potom určit v databázi.
V tomto článku
- Úvod
- Typy relací mezi tabulkami
- Proč vytvářet relace mezi tabulkami?
- Význam referenční integrity
- Zobrazení relací mezi tabulkami
Úvod
Jakmile vytvoříte tabulku pro každý předmět v databázi, musíte accessu dát způsob, jak v případě potřeby znovu spojit informace. To lze provést vložením společných polí do souvisejících tabulek a definováním vzájemných relací mezi tabulkami. Pak můžete vytvářet dotazy, formuláře a sestavy zobrazující informace z několika tabulek současně. Níže uvedený formulář například obsahuje informace získané z několika tabulek:
1. Informace v tomto formuláři pocházejí z tabulky Zákazníci...
2. ... tabulka Objednávky...
3. ... the Products table...
4. ... a tabulku Podrobnosti objednávky.
Jméno zákazníka v poli Pro fakturaci je načteno z tabulky Zákazníci, kód a datum objednávky z tabulky Objednávky, název výrobku z tabulky Výrobky a jednotková cena a množství z tabulky Rozpis objednávek. Tyto tabulky jsou různými způsoby vzájemně propojeny, aby z nich bylo možné načítat informace do formuláře.
V předchozím příkladu musí být pole v jednotlivých tabulkách koordinována, aby zobrazovala informace o téže objednávce. Této koordinace se dosahuje pomocí relací mezi tabulkami. Relace mezi tabulkami pracují na základě porovnání dat v klíčových polích (často v polích se stejným názvem v obou tabulkách). Ve většině případů se jedná o pole primárního klíče jedné tabulky, které poskytuje jedinečný identifikátor každého záznamu, a pole cizího klíče druhé tabulky. Tak mohou být například vytvořením relace mezi poli Kód v tabulkách Zaměstnanci a Objednávky spojeni zaměstnanci s objednávkami, za které odpovídají.
1. EmployeeID se zobrazuje v obou tabulkách – jako primární klíč ...
2. ... a jako cizí klíč.
Typy relací mezi tabulkami
V Accessu existují tři typy relací mezi tabulkami.
- Relace typu 1:N
Jako příklad použijeme databázi pro sledování objednávek, která obsahuje tabulku Customers (Zákazníci) a Orders (Objednávky). Zákazník může vytvořit libovolný počet objednávek. To znamená, že pro každého zákazníka uvedeného v tabulce Zákazníci může existovat celá řada objednávek zaznamenaných v tabulce Objednávky. Typ relace mezi tabulkami Zákazníci a Objednávky je 1:N.
Chcete-li znázornit relaci 1:N v návrhu databáze, vezměte primární klíč na straně 1 relace a přidejte jej jako další pole do tabulky na straně N relace. V tomto případě například přidáte nové pole – pole Kód z tabulky Zákazníci – do tabulky Objednávky a nazvete je Kód zákazníka. Access pak může použít id zákazníka v tabulce Objednávky k vyhledání správného zákazníka pro každou objednávku. - Relace typu M:N
Teď se podíváme na relaci mezi tabulkou Products (Produkty) a tabulkou Orders (Objednávky). Jedna objednávka může obsahovat více výrobků. Na druhou stranu se jeden výrobek může objevit v mnoha objednávkách. Z tohoto důvodu může pro každý záznam v tabulce Objednávky existovat mnoho záznamů v tabulce Výrobky. Navíc pro každý záznam v tabulce Výrobky může existovat celá řada záznamů v tabulce Objednávky. Tato relace se nazývá M:N. Všimněte si, že ke zjištění existující relace typu M:N mezi tabulkami je důležité vzít v úvahu obě strany relace.
Chcete-li vyjádřit relaci typu M:N, je nutné vytvořit třetí tabulku, která se často nazývá spojená tabulka, jež rozdělí relaci typu M:N na dvě relace typu 1:N. Primární klíč z těchto dvou tabulek vložíte do třetí tabulky. Výsledkem je, že třetí tabulka zaznamená každý výskyt nebo instanci relace. V relaci M:N jsou například tabulky Objednávky a Výrobky a tato relace je definována vytvořením dvou relací 1:N s tabulkou Rozpis objednávek. V každé objednávce může být uvedeno více výrobků a každý výrobek může být uveden ve více objednávkách. - Relace typu 1:1
V relaci 1:1 odpovídá jednomu záznamu v první tabulce maximálně jeden záznam v druhé tabulce a naopak jednomu záznamu v druhé tabulce maximálně jeden záznam v první tabulce. Tato relace není obvyklá, protože většina takto souvisejících informací by byla obvykle uložena ve stejné tabulce. Relaci 1:1 můžete použít k rozdělení rozsáhlé tabulky, k oddělení části tabulky z důvodů zabezpečení nebo k uložení informací, které mají vztah pouze k části hlavní tabulky. Při určování relace musí obě tabulky sdílet společné pole.
Proč vytvářet relace mezi tabulkami?
Relace mezi tabulkami můžete explicitně vytvářet pomocí okna Relace nebo přetažením pole z podokna Seznam polí. Access používá relace mezi tabulkami k rozhodování o tom, jak spojit tabulky, když je potřebujete použít v databázovém objektu. Existuje několik důvodů, proč byste relace mezi tabulkami měli vytvořit před vytvořením ostatních objektů databáze, například formulářů, dotazů a sestav.
- Relace mezi tabulkami informují návrhy dotazů.
Chcete-li pracovat se záznamy z více než jedné tabulky, je často nutné vytvořit dotaz, který tabulky spojí. Dotaz funguje tak, že porovnává hodnoty v poli primárního klíče první tabulky s polem cizího klíče ve druhé tabulce. Pokud například chcete vrátit řádky, jež uvádějí všechny objednávky každého zákazníka, vytvoříte dotaz, který spojí tabulku Zákazníci s tabulkou Objednávky na základě pole Kód zákazníka. V okně Relace můžete ručně určit pole, jež mají být spojena. Pokud už ale máte mezi tabulkami definovanou relaci, Access poskytne výchozí spojení na základě existující relace tabulky. Pokud navíc použijete některého z průvodců dotazem, Access použije informace získané z relací mezi tabulkami, které jste už definovali, k tomu, aby vám předložil informované volby a předem vyplní nastavení vlastností odpovídajícími výchozími hodnotami. - Relace mezi tabulkami informují návrhy formulářů a sestav.
Při návrhu formuláře nebo sestavy používá Access informace, které shromažďuje z relací mezi tabulkami, které jste už definovali, k tomu, aby vám předložil informované volby a předem vyplní nastavení vlastností příslušnými výchozími hodnotami. - Relace mezi tabulkami jsou základnou, na které můžete vynucovat referenční integritu a zabránit tak vytváření osiřelých záznamů v databázi. Osiřelým záznamem se rozumí záznam s referencí na neexistující záznam – například záznam objednávky, který odkazuje na neexistující záznam zákazníka.
Při navrhování databáze rozdělíte informace do tabulek, z nichž každá má primární klíč. Potom do souvisejících tabulek přidáte cizí klíče, které na primární klíče odkazují. Tyto páry cizích a primárních klíčů jsou základem relací mezi tabulkami a dotazů napříč několika tabulkami. Je důležité, aby tyto odkazy cizího klíče a primárního klíče zůstaly synchronizované. Referenční integrita, která je závislá na relacích mezi tabulkami, pomáhá zajistit, aby byly reference synchronní.
Význam referenční integrity
Když navrhujete databázi, rozdělíte informace o databázi do mnoha tabulek s různými předměty, abyste minimalizovali redundanci dat. Potom accessu dáte způsob, jak data znovu spojit tak, že společná pole umístíte do souvisejících tabulek. Tak například vyjádření relace typu 1:N: vezmete primární klíč z tabulky „1“ a přidáte ho jako další pole do tabulky „N“. Aby access data znovu spojil, vezme hodnotu v tabulce "N" a vyhledá odpovídající hodnotu v tabulce "jedna". Tak hodnoty v tabulce „N“ odpovídají souvisejícím hodnotám v tabulce „1“.
Řekněme, že mezi tabulkami Přepravci a Objednávky máte relaci typu 1:N a chcete odstranit jednoho přepravce. Pokud pro tohoto přepravce existují objednávky v tabulce Objednávky, stanou se z těchto objednávek po odstranění záznamu přepravce osiřelé záznamy. Budou nadále obsahovat kód přepravce, ale ten nebude platný, protože záznam, na který odkazuje, již nebude existovat.
Účelem referenční integrity je zabránit vzniku osiřelých záznamů a udržovat reference synchronní, aby k této hypotetické situaci nikdy nedošlo.
Referenční integrita se vynucuje tak, že ji povolíte pro relaci mezi tabulkami. Po vynucování access odmítne jakoukoli operaci, která porušuje referenční integritu dané relace mezi tabulkami. To znamená, že Access odmítne aktualizace, které mění cíl odkazu, i odstranění, která odeberou cíl odkazu. Je možné, že máte naprosto platnou potřebu změnit primární klíč pro dopravce, který má objednávky v tabulce Objednávky. V takových případech skutečně potřebujete, aby Access automaticky aktualizoval všechny ovlivněné řádky v rámci jedné operace. Access tak zajistí, že se aktualizace dokončí v plném rozsahu, aby vaše databáze nezůstala v nekonzistentním stavu, přičemž některé řádky byly aktualizovány a některé ne. Z tohoto důvodu Access podporuje možnost Kaskádová aktualizace souvisejících polí . Když vynutíte referenční integritu a zvolíte možnost Kaskádová aktualizace souvisejících polí a pak aktualizujete primární klíč, Access automaticky aktualizuje všechna pole, která odkazují na primární klíč.
Také je možné, že budete opodstatněně potřebovat odstranit řádek a všechny související záznamy – například záznam přepravce a všechny související objednávky tohoto přepravce. Z tohoto důvodu Access podporuje možnost Kaskádové odstranění souvisejících záznamů . Když vynutíte referenční integritu a zvolíte možnost Kaskádové odstranění souvisejících záznamů a pak odstraníte záznam na straně primárního klíče relace, Access automaticky odstraní všechny záznamy, které odkazují na primární klíč.
Zobrazení relací mezi tabulkami
Pokud chcete zobrazit relace mezi tabulkami, klikněte na Relace na kartě Databázové nástroje . Otevře se okno Relace a zobrazí se všechny existující relace. Pokud nebyly definovány žádné relace mezi tabulkami a okno Relace otevíráte poprvé, Access vás vyzve k přidání tabulky nebo dotazu do okna.
Otevření okna Relace
Klikněte na Soubor, klikněte na Otevřít a pak vyberte a otevřete databázi.
Na kartě Databázové nástroje klikněte ve skupině Relace na Relace.
Na kartě Návrh relací klikněte ve skupině Relace na Položku Všechny relace.
Zobrazí se všechny definované relace v databázi. Skryté tabulky (tabulky, u kterých je zaškrtnuté políčko Skryté v dialogovém okně Vlastnosti tabulky) a jejich relace se nezobrazí, pokud nebude zaškrtnuté políčko Zobrazit skryté objekty v dialogovém okně Možnosti navigace.
Relaci mezi tabulkami vyjadřuje čára relace mezi tabulkami v okně Relace. Relace, ve které není vynucována referenční integrita, je zobrazena jako tenká čára mezi obvyklými poli podporujícími relaci. Vyberete-li relaci kliknutím na její čáru, zvětší se tloušťka čáry. Pokud pro tuto relaci vynucujete referenční integritu, bude čára na obou koncích silnější. Navíc se nad silnou částí čáry na jedné straně relace zobrazí číslo 1 a nad silnou částí čáry na druhé straně se zobrazí symbol nekonečna (?).
Když je okno Relace aktivní, můžete na pásu karet vybrat následující příkazy:
Na kartě Návrh relací ve skupině Nástroje :
- Upravit relace Otevře dialogové okno Upravit relace . Po výběru čáry relace můžete kliknutím na tlačítko Upravit relace změnit relaci tabulky. Na čáru relace můžete také poklikat.
- Vymazat rozložení Odebere všechny tabulky a relace ze zobrazení v okně Relace. Tento příkaz tabulky a relace pouze skryje – neodstraní je.
- Sestava relací Vytvoří sestavu, která zobrazí tabulky a relace v databázi. V sestavě budou zobrazeny pouze ty tabulky a relace, které nejsou v okně Relace skryty.
Na kartě Návrh relací ve skupině Relace :
- Přidat tabulky Umožňuje výběr tabulek, které se mají zobrazit v okně Relace.
- Skrýt tabulku: Skryje vybranou tabulku v okně Relace.
- Přímé relace: Zobrazí všechny relace a související tabulky pro vybranou tabulku v okně Relace, pokud již nejsou zobrazeny.
- Všechny relace Zobrazí všechny relace a související tabulky v databázi v okně Relace. Skryté tabulky (tabulky, u nichž je zaškrtnuto políčko Skryté v dialogovém okně Vlastnosti tabulky) a jejich relace se nezobrazí, dokud nebude zaškrtnuto políčko Zobrazit skryté objekty v dialogovém okně Možnosti navigace.
- Zavřete Zavře okno Relace. Pokud jste provedli jakékoli změny v rozložení okna Relace, budete dotázáni, zda chcete tyto změny uložit.