Příručka k relacím mezi tabulkami

Platí pro
Access pro Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

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. Potom Accessu poskytnete způsob, jak rozdělené informace opět spojit, a to umístěním společných polí do souvisejících tabulek. 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

Po vytvoření tabulek pro jednotlivé předměty v databázi je třeba aplikaci Access umožnit tyto informace v případě potřeby opět spojit. 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:

Formulář Objednávky zobrazující související informace z pěti tabulek najednou

1. Informace v tomto formuláři pocházejí z tabulky Zákazníci...

2. ... tabulka Objednávky...

3. ... Tabulka Produkty...

4. ... a tabulky Rozpis objednávek.

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í.

ID zaměstnance použité jako primární klíč v tabulce Zaměstnanci a jako cizí klíč v tabulce Objednávky

1. ID zaměstnance se objevuje v obou tabulkách – jako primární klíč ...

2. ... a jako cizí klíč.

Začátek stránky

Typy relací mezi tabulkami

V Accessu existují tři typy relací mezi tabulkami.

  • Relace typu 1:N
    Vezměme si jako příklad databázi pro sledování objednávek, jež obsahuje tabulky Zákazníci a 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 potom může pomocí identifikačního čísla zákazníka v tabulce Objednávky vyhledat u každé objednávky správného zákazníka.
  • Relace typu M:N
    Teď se podívejme na relaci mezi tabulkami Výrobky a 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.

Začátek stránky

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 určení způsobu spojení tabulek v případě, že 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 je však relace mezi tabulkami již definována, aplikace Access vytvoří výchozí spojení na základě stávající relace mezi tabulkami. Pokud použijete některého z průvodců dotazem, Access navíc použije informace shromážděné z již definovaných relací tabulek k tomu, aby vám nabídl informované volby a přednaplnil nastavení vlastností příslušnými výchozími hodnotami.
  • Relace mezi tabulkami informují návrhy formulářů a sestav.
    Když navrhujete formulář nebo sestavu, Access používá informace shromážděné z již definovaných relací tabulek k tomu, aby vám nabídl informované volby a předem naplnil 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 byly tyto reference cizího a primárního klíče udržovány synchronizované. Referenční integrita, která je závislá na relacích mezi tabulkami, pomáhá zajistit, aby byly reference synchronní.

Začátek stránky

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 umožníte dát data zpět dohromady umístěním společných polí 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“. Access data spojí tak, že vezme hodnotu v tabulce N a vyhledá odpovídající hodnotu v tabulce 1. 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 nastavení vynucování Access odmítne jakoukoli operaci, která porušuje referenční integritu pro danou relaci mezi tabulkami. To znamená, že Access odmítne aktualizace, které mění cíl reference, i odstranění, která odebírají cíl reference. Je možné, že máte naprosto oprávněnou potřebu změnit primární klíč u dopravce, který má objednávky v tabulce Objednávky. V takových případech je skutečně nutné, aby Access automaticky aktualizoval všechny ovlivněné řádky při jedné operaci. Access tak zajistí, že aktualizace bude úplná a databáze nezůstane v nekonzistentním stavu s některými řádky aktualizovanými a jinými ne. Z tohoto důvodu Access podporuje možnost Kaskádová aktualizace souvisejících polí . Pokud vynutíte referenční integritu a zvolíte možnost Kaskádová aktualizace souvisejících polí a následně aktualizujete primární klíč, Access automaticky aktualizuje všechna pole, která na tento primární klíč odkazují.

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 polí . Pokud vynutíte referenční integritu a zvolíte možnost Kaskádové odstranění souvisejících polí a potom odstraníte záznam na straně primárního klíče v relaci, Access automaticky odstraní všechny záznamy, které na primární klíč odkazují.

Začátek stránky

Zobrazení relací mezi tabulkami

Chcete-li zobrazit relace mezi tabulkami, klikněte na tlačítko Relace na kartě Databázové nástroje . Otevře se okno Relace se zobrazením všech existujících relací. Pokud nebyly definovány žádné relace mezi tabulkami a otevíráte okno Relace poprvé, Access vás vyzve k přidání tabulky nebo dotazu do okna.

Otevření okna Relace

  1. Klikněte na Soubor, klikněte na Otevřít a pak vyberte a otevřete databázi.

  2. Na kartě Databázové nástroje klikněte ve skupině Relace na Relace.

  3. Na kartě Návrh relací klikněte ve skupině Relace na 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 :

  • Úprava relací 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 zobrazující 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řidání tabulek 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řít 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.

Začátek stránky