Sdílet prostřednictvím


Jak definovat relace mezi tabulkami v accessové databázi

Poznámka:

Novice: Vyžaduje znalost uživatelského rozhraní na počítačích s jedním uživatelem. Tento článek se týká pouze databáze Microsoft Accessu (.mdb nebo .accdb).

Shrnutí

Tento článek popisuje, jak definovat relace v databázi Microsoft Accessu. Tento článek obsahuje:

  • Co jsou relace mezi tabulkami?
  • Druhy relací mezi tabulkami
    • Relace jedna ku mnohým
    • Mnoho-k-mnoho vztahy
    • Vztahy jedna ku jedné
  • Definování relací mezi tabulkami
    • Jak definovat relaci 1:N nebo 1:1
    • Definování relace M:N
  • Referenční integrita
  • Kaskádové aktualizace a odstranění
  • Typy spojení

Co jsou relace mezi tabulkami?

V relační databázi umožňují relace zabránit redundantním datům. Pokud například navrhujete databázi, která sleduje informace o knihách, můžete mít tabulku s názvem "Názvy", která ukládá informace o jednotlivých knihách, jako je název knihy, datum publikování a vydavatel. K dispozici jsou také informace, které můžete chtít uložit o vydavateli, například telefonní číslo, adresu a PSČ vydavatele. Pokud uložíte všechny tyto informace do tabulky "Názvy", bude telefonní číslo vydavatele duplikováno pro každý název, který vydavatel vytiskne.

Lepším řešením je uložit informace vydavatele jenom jednou, a to v samostatné tabulce s názvem Vydavatelé. Pak byste umístili ukazatel do tabulky "Názvy", která odkazuje na položku v tabulce Vydavatelé.

Abyste měli jistotu, že vaše data zůstanou synchronizovaná, můžete vynutit referenční integritu mezi tabulkami. Relace referenční integrity pomáhají zajistit, aby informace v jedné tabulce odpovídaly informacím v jiné. Například každý název v tabulce "Názvy" musí být přidružený ke konkrétnímu vydavateli v tabulce Publishers. Název nelze přidat do databáze vydavatele, který v databázi neexistuje.

Logické relace v databázi umožňují efektivně provádět dotazy na data a vytvářet reporty.

Druhy relací mezi tabulkami

Relace funguje tak, že porovnává data v klíčových sloupcích, obvykle sloupce (nebo pole) se stejným názvem v obou tabulkách. Ve většině případů relace spojuje primární klíč nebo sloupec jedinečného identifikátoru pro každý řádek z jedné tabulky do pole v jiné tabulce. Sloupec v druhé tabulce se označuje jako "cizí klíč". Pokud například chcete sledovat prodeje jednotlivých nadpisů knih, vytvoříte relaci mezi sloupcem primárního klíče (zavoláme ho title_ID) v tabulce "Názvy" a sloupcem v tabulce "Sales", která má název title_ID. Sloupec title_ID v tabulce "Sales" je cizí klíč.

Mezi tabulkami existují tři druhy relací. Druh vytvořené relace závisí na tom, jak jsou definovány související sloupce.

Jedno-ke-mnoha vztahy

Vztah jeden k mnoha (1:N) je nejběžnějším druhem vztahu. V tomto typu relace může řádek v tabulce A obsahovat mnoho odpovídajících řádků v tabulce B. Řádek v tabulce B ale může mít v tabulce A pouze jeden odpovídající řádek. Například tabulky Vydavatelé a Názvy mají relaci 1:N. To znamená, že každý vydavatel vytváří mnoho titulů. Každý název ale pochází jenom od jednoho vydavatele.

Relace 1:N se vytvoří, pokud je primárním klíčem pouze jeden ze souvisejících sloupců nebo má jedinečné omezení.

V okně relace v Accessu je strana primárního klíče relace 1:N označená číslem 1. Cizí klíč na straně vztahu je označen symbolem nekonečna.

Snímek obrazovky s příkladem relací 1:N v okně relací v Accessu

Mnoho-k-mnoho vztahy

V relaci M:N může řádek v tabulce A obsahovat mnoho odpovídajících řádků v tabulce B a naopak. Takovou relaci vytvoříte definováním třetí tabulky, která se nazývá spojovací tabulka. Primární klíč spojovací tabulky se skládá z cizích klíčů z obou tabulek A i B. Například tabulka "Autoři" a tabulka "Názvy" mají vztah mnoho-ku-mnoha, který je definován vztahem jedna-ku-mnoha z každé z těchto tabulek do tabulky "TitleAuthors." Primárním klíčem tabulky TitleAuthors je kombinace sloupce au_ID (primárního klíče tabulky Autoři) a sloupce title_ID (primární klíč tabulky Názvy).

Snímek obrazovky příkladu mnoho-ku-mnoha relací v okně relací v Accessu.

Relace jeden na jednoho

V relaci 1:1 nemůže řádek v tabulce A obsahovat více než jeden odpovídající řádek v tabulce B a naopak. Relace 1:1 se vytvoří, pokud jsou oba související sloupce primárními klíči nebo mají jedinečná omezení.

Tento druh relace není běžný, protože většina informací souvisejících tímto způsobem by byla v jedné tabulce. Relaci 1:1 můžete použít k provedení následujících akcí:

  • Rozdělte tabulku s mnoha sloupci.
  • Izolujte část tabulky z bezpečnostních důvodů.
  • Ukládejte data, která jsou krátkodobá a je možné je snadno odstranit odstraněním tabulky.
  • Ukládat informace, které se vztahují pouze na podmnožinu hlavní tabulky.

V Accessu je strana primárního klíče relace 1:1 označená symbolem klíče. Strana cizího klíče je také označena symbolem klíče.

Definování relací mezi tabulkami

Když vytvoříte relaci mezi tabulkami, související pole nemusí mít stejné názvy. Související pole však musí mít stejný datový typ, pokud pole primárního klíče není polem typu Automatické číslo. Pole typu Automatické číslo lze párovat s polem Číslo pouze v případě, že vlastnost VelikostPole u obou odpovídajících polí je stejná. Můžete například shodovat pole typu Automatické číslo a pole Číslo, pokud vlastnost VelikostPole obou polí je Long Integer. I když jsou obě odpovídající pole Číselná pole, musí mít stejné nastaveníFieldSizeproperty.

Jak definovat relaci 1:N nebo 1:1

Pokud chcete vytvořit relaci 1:N nebo 1:1, postupujte takto:

  1. Zavřete všechny tabulky. Nemůžete vytvářet ani měnit relace mezi otevřenými tabulkami.

  2. V aplikaci Access 2002 nebo Access 2003 postupujte takto:

    1. Stisknutím klávesy F11 přepněte do okna Databáze.
    2. V nabídce Nástroje klepněte na příkaz Relace.

    V Accessu 2007, Accessu 2010 nebo Accessu 2013 klikněte na Relace ve skupině Zobrazit nebo skrýt na kartě Databázové nástroje .

  3. Pokud jste ještě nedefinovali žádné relace v databázi, zobrazí se automaticky dialogové okno Zobrazit tabulku . Chcete-li přidat tabulky, které chcete propojit, ale dialogové okno Zobrazit tabulku se nezobrazí, klepněte v nabídce Relace na příkaz Zobrazit tabulku.

  4. Poklikejte na názvy tabulek, které chcete propojit, a zavřete dialogové okno Zobrazit tabulku . Pokud chcete vytvořit relaci mezi tabulkou a samotnou, přidejte ji dvakrát.

  5. Přetáhněte pole, které chcete propojit z jedné tabulky, do souvisejícího pole v druhé tabulce. Pokud chcete přetáhnout více polí, stiskněte ctrl, klikněte na každé pole a potom je přetáhněte.

    Ve většině případů přetáhnete pole primárního klíče (toto pole se zobrazí tučně) z jedné tabulky do podobného pole (toto pole má často stejný název), které se označuje jako cizí klíč v druhé tabulce.

  6. Zobrazí se dialogové okno Upravit relace . Ujistěte se, že názvy polí, které jsou zobrazeny ve dvou sloupcích, jsou správné. Pokud je to potřeba, můžete názvy změnit.

    V případě potřeby nastavte možnosti relace. Pokud potřebujete informace o konkrétní položce v dialogovém okně Upravit relace , klikněte na tlačítko otazníku a potom klikněte na položku. (Tyto možnosti budou podrobně vysvětleny dále v tomto článku.)

  7. Kliknutím na Vytvořit vytvoříte relaci.

  8. Opakujte kroky 4 až 7 pro každou dvojici tabulek, které chcete propojit.

    Když zavřete dialogové okno Upravit relace , Access se zeptá, jestli chcete rozložení uložit. Bez ohledu na to, jestli rozložení uložíte nebo neuložíte, uloží se relace, které vytvoříte, do databáze.

    Poznámka:

    Relace můžete vytvářet nejen v tabulkách, ale i v dotazech. U dotazů se však nevynucuje referenční integrita.

Definování relace M:N

Pokud chcete vytvořit relaci mezi mnoha entity, postupujte takto:

  1. Vytvořte dvě tabulky, které budou mít relaci mnoho-na-mnoho.

  2. Vytvořte třetí tabulku. Toto je propojovací tabulka. Do spojovací tabulky přidejte nová pole se stejnými definicemi jako pole primárního klíče z každé tabulky, kterou jste vytvořili v kroku 1. V spojovací tabulce fungují pole primárního klíče jako cizí klíče. Do spojovací tabulky můžete přidat další pole stejně jako do jakékoli jiné tabulky.

  3. Ve spojovací tabulce nastavte primární klíč tak, aby zahrnoval pole primárního klíče z ostatních dvou tabulek. V spojovací tabulce TitleAuthors by se například primární klíč skládal z polí OrderID a ProductID.

    Poznámka:

    Pokud chcete vytvořit primární klíč, postupujte takto:

    1. Otevřete tabulku v návrhovém zobrazení.

    2. Vyberte pole nebo pole, která chcete definovat jako primární klíč. Chcete-li vybrat jedno pole, klikněte na volič řádku požadovaného pole. Pokud chcete vybrat více polí, podržte stisknutou klávesu Ctrl a potom klikněte na volič řádku pro každé pole.

    3. V aplikaci Access 2002 nebo Access 2003 klepněte na tlačítko Primární klíč na panelu nástrojů.

      V aplikaci Access 2007 klepněte na tlačítko Primární klíč ve skupině Nástroje na kartě Návrh .

      Poznámka:

      Pokud chcete, aby se pořadí polí v primárním klíči více polí liší od pořadí těchto polí v tabulce, kliknutím na Indexy na panelu nástrojů zobrazte dialogové okno Indexy a potom přeuspořádejte názvy polí pro index s názvem PrimaryKey.

  4. Definujte relaci 1:N mezi primárními tabulkami a spojovací tabulkou.

Referenční integrita

Referenční integrita je systém pravidel, která Access používá k zajištění platnosti relací mezi záznamy v souvisejících tabulkách a že nechtěně neodstraníte nebo nezměníte související data. Referenční integritu můžete nastavit, pokud jsou splněny všechny následující podmínky:

  • Odpovídající pole z primární tabulky je primární klíč nebo má jedinečný index.
  • Související pole mají stejný datový typ. Existují dvě výjimky. Pole Automatické číslo může být související s polem Číslo, které má FieldSize nastavení vlastnosti Dlouhé celé číslo, a pole Automatické číslo s FieldSize nastavením vlastnosti ID replikace může být související s polem Číslo, které má FieldSize nastavení vlastnosti Replikační ID.
  • Obě tabulky patří do stejné accessové databáze. Pokud jsou tabulky propojené, musí se jednat o tabulky ve formátu Accessu a je nutné otevřít databázi, ve které jsou uloženy, a nastavit referenční integritu. Referenční integritu nelze vynutit pro propojené tabulky z databází v jiných formátech.

Při použití referenční integrity platí následující pravidla:

  • Do pole cizího klíče související tabulky, která v primárním klíči primární tabulky neexistuje, nelze zadat hodnotu. Do cizího klíče však můžete zadat hodnotu Null. Určuje, že záznamy nesouvisejí. Například nemůžete mít objednávku, která je přiřazena zákazníkovi, který neexistuje. Můžete však mít objednávku, která není přiřazena nikomu, tak že zadáte hodnotu Null do pole CustomerID.
  • Záznam z primární tabulky nelze odstranit, pokud v související tabulce existují odpovídající záznamy. Záznam zaměstnance například nelze odstranit z tabulky Zaměstnanci, pokud jsou zaměstnanci přiřazené objednávky v tabulce Objednávky.
  • Hodnotu primárního klíče v primární tabulce nelze změnit, pokud má tento záznam související záznamy. Nemůžete například změnit ID zaměstnance v tabulce Zaměstnanci, pokud jsou k danému zaměstnanci přiřazené objednávky v tabulce Objednávky.

Kaskádové aktualizace a odstranění

U relací, ve kterých se vynucuje referenční integrita, můžete určit, jestli má Access automaticky kaskádovat aktualizaci nebo kaskádové odstranění souvisejících záznamů. Pokud nastavíte tyto možnosti, operace odstranění a aktualizace, kterým by obvykle zabránila pravidla referenční integrity, jsou povolena. Když odstraníte záznamy nebo změníte hodnoty primárního klíče v primární tabulce, Access provede potřebné změny souvisejících tabulek, aby se zachovala referenční integrita.

Pokud kliknete na zaškrtávací políčko Kaskádová aktualizace souvisejících polí při definování relace, kdykoli změníte primární klíč záznamu v primární tabulce, Microsoft Access automaticky aktualizuje primární klíč na novou hodnotu ve všech souvisejících záznamech. Pokud například změníte ID zákazníka v tabulce Zákazníci, pole CustomerID v tabulce Objednávky se automaticky aktualizuje pro každou objednávku daného zákazníka, aby nedošlo k přerušení relace. Přistupujte k aktualizacím kaskád bez zobrazení jakýchkoli zpráv.

Poznámka:

Pokud je primárním klíčem v primární tabulce pole automatické číslo, nemá zaškrtnutí políčka Kaskádová aktualizace souvisejících polí žádný vliv, protože hodnotu v poli Automatické číslo nelze změnit.

Pokud zaškrtnete políčko Kaskádové odstranění souvisejících záznamů při definování relace, kdykoli odstraníte záznamy v primární tabulce, Access automaticky odstraní související záznamy v související tabulce. Pokud například odstraníte záznam zákazníka z tabulky Zákazníci, všechny objednávky zákazníka se automaticky odstraní z tabulky Objednávky. (To zahrnuje záznamy v tabulce Podrobnosti objednávky, které se vztahují k záznamům Objednávky). Když odstraníte záznamy z formuláře nebo datového listu, když je zaškrtnuté políčko Kaskádové odstranění souvisejících záznamů , Access vás upozorní, že související záznamy mohou být také odstraněny. Když však odstraníte záznamy pomocí odstraňovacího dotazu, Access automaticky odstraní záznamy v souvisejících tabulkách bez zobrazení upozornění.

Typy spojení

Existují tři typy spojení. Můžete je vidět na následujícím snímku obrazovky:

Snímek obrazovky s vlastnostmi spojení, který zobrazuje tři typy spojení

Možnost 1 definuje vnitřní spojení. Vnitřní spojení je spojení, ve kterém se záznamy ze dvou tabulek zkombinují ve výsledcích dotazu jenom v případě, že hodnoty ve spojených polích splňují zadanou podmínku. V dotazu je výchozím spojením vnitřní spojení, které vybere záznamy pouze v případě, že se hodnoty ve spojených polích shodují.

Možnost 2 definuje levé vnější spojení. Levé vnější spojení je spojení, ve kterém se do výsledků dotazu přidají všechny záznamy z levé strany operace LEFT JOIN v příkazu SQL dotazu, a to i v případě, že v připojeném poli na pravé straně nejsou žádné odpovídající hodnoty.

Možnost 3 definuje pravé vnější spojení. Pravé vnější spojení je spojení, ve kterém se do výsledků dotazu přidají všechny záznamy z pravé strany operace RIGHT JOIN v příkazu SQL dotazu, a to i v případě, že v připojeném poli na levé straně nejsou žádné odpovídající hodnoty.