Vztah je vytvořen mezi dvěma databázovými tabulkami, když jedna tabulka používá cizí klíč, který odkazuje na primární klíč jiné tabulky. Toto je základní koncept pojmu relační databáze.
Jak funguje cizí klíč k navázání vztahu
Primární klíč jednoznačně identifikuje každý záznam v tabulce. Jedná se o typ kandidátního klíče, který je obvykle prvním sloupcem v tabulce a který může být automaticky generován databází, aby se zajistilo, že je jedinečný. Cizí klíč je další kandidátský klíč (nikoli primární klíč) používaný k propojení záznamu s daty v jiné tabulce. Zvažte například tyto dvě tabulky, které identifikují, který učitel učí který kurz. Zde je primárním klíčem tabulky Courses Course_ID. Jeho cizí klíč je Teacher_ID:
Course_ID | Název kurzu | Učitel_ID |
---|---|---|
Kurz_001 | Biologie | Učitel_001 |
Kurz_002 | Matematika | Učitel_002 |
Kurz_003 | Angličtina | Učitel_003 |
Vidíte, že cizí klíč v Kurzech odpovídá primárnímu klíči v Učitelích:
Učitel_ID | Jméno učitele |
---|---|
Učitel_001 | Carmen |
Učitel_002 | Rozrazil |
Učitel_003 | Jorge |
Typy databázových vztahů
Pomocí cizích klíčů nebo jiných kandidátských klíčů můžete implementovat tři typy vztahů mezi tabulkami:
Jeden na jednoho
Tento typ vztahu umožňuje pouze jeden záznam na každé straně vztahu. Primární klíč se týká pouze jednoho záznamu (nebo žádného) v jiné tabulce. Například v manželství má každý z manželů pouze jednoho dalšího manžela. Tento druh vztahu lze implementovat do jediné tabulky, a proto nepoužívá cizí klíč.
Jeden na mnoho
Vztah jedna k mnoha umožňuje, aby jeden záznam v jedné tabulce souvisel s více záznamy v jiné tabulce. Zvažte podnikání s databází, která má tabulky Zákazníci a Objednávky. Jeden zákazník může zakoupit více objednávek, ale jednu objednávku nelze propojit s více zákazníky. Tabulka Objednávky by proto obsahovala cizí klíč, který by odpovídal primárnímu klíči tabulky Zákazníci, zatímco tabulka Zákazníci by neměla žádný cizí klíč směřující do tabulky Objednávky.
Mnoho-k-mnoha
Jedná se o složitý vztah, ve kterém lze mnoho záznamů v tabulce propojit s mnoha záznamy v jiné tabulce. Naše firma například pravděpodobně potřebuje tabulky Zákazníci a Objednávky a pravděpodobně také potřebuje tabulku Produkty. Opět platí, že vztah mezi tabulkou Zákazníci a Objednávky je individuální, ale vezměte v úvahu vztah mezi tabulkou Objednávky a Produkty. Objednávka může obsahovat více produktů a produkt může být propojen s více objednávkami, protože několik zákazníků může odeslat objednávku, která obsahuje některé stejné produkty. Tento druh vztahu vyžaduje minimálně tři tabulky.
Proč jsou databázové vztahy důležité?
Vytváření konzistentních vztahů mezi databázovými tabulkami pomáhá zajistit integritu dat a přispívá k normalizaci databáze. Co kdybychom například nepropojili žádné tabulky pomocí cizího klíče a místo toho spojili data v tabulkách Kurzy a Učitelé, takto:
Učitel_ID | Jméno učitele | Kurs |
---|---|---|
Učitel_001 | Carmen | Biologie, matematika |
Učitel_002 | Rozrazil | Matematika |
Učitel_003 | Jorge | Angličtina |
Tento návrh je nepružný a porušuje první princip normalizace databáze, First Normal Form, který uvádí, že každá buňka tabulky by měla obsahovat jeden, diskrétní kus dat. Nebo jsme se možná rozhodli přidat druhý záznam pro Carmen, abychom prosadili 1NF:
Učitel_ID | Jméno učitele | Kurs |
---|---|---|
Učitel_001 | Carmen | Biologie |
Učitel_001 | Carmen | Matematika |
Učitel_002 | Rozrazil | Matematika |
Učitel_003 | Jorge | Angličtina |
Toto je stále slabý návrh, který zavádí zbytečnou duplikaci a čemu se říká anomálie vkládání dat, což znamená, že by mohl přispět k nekonzistentním datům. Pokud má například učitel více záznamů, co když je třeba některá data upravit, ale osoba provádějící úpravu dat si neuvědomuje, že existuje více záznamů? Tabulka by pak obsahovala různá data pro stejnou osobu, bez jakéhokoli jasného způsobu, jak je identifikovat nebo se jim vyhnout. Rozdělení této tabulky na dvě tabulky, Učitelé a Kurzy, vytvoří správný vztah mezi daty, a proto pomůže zajistit konzistenci a přesnost dat. Více od Lifewire
-
Úvod do databázových vztahů
-
Definice relace databáze
-
Vztahy One-to-Many v databázi
-
Uvedení databáze do třetí normální formy (3NF)
-
Plná funkční závislost na normalizaci databáze
-
Fakta vs. Tabulky kót v databázi
-
Co je to tranzitivní závislost v databázi
-
Co je primární klíč?
-
Definice diagramu vztahů mezi entitami
-
5 nejlepších databázových tipů pro začátečníky
-
Uvedení databáze do první normální formy
-
Co je databáze?
-
Atribut databáze definuje vlastnosti tabulky
-
Síla cizích klíčů v relačních databázích
-
Vytváření databázových vztahů v Accessu
-
Glosář společných databázových podmínek
Vaše práva na ochranu osobních údajů
Společnost Lifewire a naši partneři třetích stran používají soubory cookie a zpracovávají osobní údaje, jako jsou jedinečné identifikátory, na základě vašeho souhlasu s ukládáním a/nebo přístupem k informacím na zařízení, zobrazováním personalizovaných reklam a pro měření obsahu, přehled publika a vývoj produktů. Chcete -li změnit nebo odvolat své možnosti souhlasu pro Lifewire.com, včetně vašeho práva vznést námitku v případě použití oprávněného zájmu, klikněte níže. Svá nastavení můžete kdykoli aktualizovat pomocí odkazu „Ochrana osobních údajů EU“ v dolní části jakékoli stránky. Tyto možnosti budou globálně signalizovány našim partnerům a nebudou mít vliv na údaje o prohlížení. Seznam partnerů (prodejců)
My a naši partneři zpracováváme údaje za účelem:
Aktivně skenujte charakteristiky zařízení pro identifikaci. Použijte přesná data o geolokaci. Ukládejte a/nebo přistupujte k informacím na zařízení. Vyberte personalizovaný obsah. Vytvořte si přizpůsobený profil obsahu. Změřte výkon reklam. Vyberte základní reklamy. Vytvořte si přizpůsobený reklamní profil. Vyberte personalizované reklamy. Aplikujte průzkum trhu a generujte poznatky o publiku. Měření výkonu obsahu. Vyvíjet a zlepšovat produkty. Seznam partnerů (prodejců)