Databázové vztahy

Databázové vztahy jsou páteří všech relačních databází

Mezi dvěma databázovými tabulkami vzniká vztah, pokud má jedna tabulka cizí klíč, který odkazuje na primární klíč jiné tabulky. Jedná se o základní pojetí relační databáze.

Jak funguje cizí klíč k vytvoření vztahu

Pojďme se podívat na základy primárních a cizích klíčů. Primární klíč jednoznačně identifikuje každý záznam v tabulce. Jedná se o typ kandidátského klíče, který je obvykle první sloupec v tabulce a může být automaticky generován databází, aby bylo zajištěno, že je jedinečný.

Cizí klíč je jiný kandidátní klíč (nikoli primární klíč), který slouží k propojení záznamu s daty v jiné tabulce.

Zvažte například tyto dvě tabulky, které určují, který učitel učí, který kurz.

Zde je primární klíč tabulky Kurzy identifikátor Course_ID. Jeho cizí klíč je Teacher_ID:

Kurzy
ID kurzu Název kurzu Učitel_ID
Course_001 Biologie Teacher_001
Course_002 Matematika Teacher_001
Course_003 Angličtina Teacher_003

Můžete vidět, že cizí klíč v kurzech odpovídá primárnímu klíči učitelů:

Učitelé
Učitel_ID Jméno učitele
Teacher_001 Carmen
Teacher_002 Rozrazil
Teacher_003 Jorge

Můžeme říci, že cizí klíč Teacher_ID pomohl vytvořit vztah mezi kurzy a tabulkami učitelů.

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:

One-to-One : 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 nikoli - v jiné tabulce. Například v manželství má každý z manželů pouze jednoho dalšího manžela. Tento druh vztahu může být implementován v jedné tabulce, a proto nepoužívá cizí klíč.

Jeden-k-mnoho : Jeden-k-mnoho vztah umožňuje jediný záznam v jedné tabulce se vztahuje k více záznamům v jiné tabulce.

Zvažte firmu s databází, která má tabulky Zákazníci a Objednávky.

Jeden zákazník si může zakoupit několik objednávek, ale jedna objednávka nemůže být propojena s více zákazníky. Tabulka objednávek by tedy obsahovala cizí klíč, který 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 mnoho záznamů v tabulce může odkazovat na mnoho záznamů v jiné tabulce. Například naše podnikání pravděpodobně potřebuje nejen tabulky Zákazníci a Objednávky, ale pravděpodobně potřebuje také tabulku Produkty.

Opět platí, že vztah mezi tabulkou Zákazníci a Objednávky je jeden k mnoha, ale zvažte vztah mezi tabulkou Objednávky a Produkty. Objednávka může obsahovat více produktů a produkt může být spojen s několika objednávkami: 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.

Co jsou vztahy s databázemi důležité?

Vytváření konzistentních vztahů mezi tabulkami databáze pomáhá zajistit integritu dat a přispívá k normalizaci databáze. Například, co bychom neměli odkazovat žádné tabulky přes cizí klíč a namísto toho jsme jen sloučili data v tabulkách Kurzy a učitelé, a to takto:

Učitelé a kurzy
Učitel_ID Jméno učitele Chod
Teacher_001 Carmen Biologie, Matematika
Teacher_002 Rozrazil Matematika
Teacher_003 Jorge Angličtina

Tento návrh je nepružný a porušuje první princip normalizace databáze, First Normal Form (1NF), který uvádí, že každá buňka tabulky by měla obsahovat jediný, diskrétní datový soubor.

Nebo snad jsme se rozhodli jednoduše přidat druhou nahrávku pro Carmen, abychom prosadili 1NF:

Učitelé a kurzy
Učitel_ID Jméno učitele Chod
Teacher_001 Carmen Biologie
Teacher_001 Carmen Matematika
Teacher_002 Rozrazil Matematika
Teacher_003 Jorge Angličtina

Je to stále slabý návrh, který zavádí zbytečnou duplikaci a to, co se nazývá anomálie vkládání dat , což jen znamená, že by to mohlo přispět k nekonzistentním datům.

Například pokud učitel má více záznamů, co když některé údaje je třeba upravit, ale osoba, která provádí úpravy dat, si neuvědomuje, že existuje více záznamů? Tabulka by pak obsahovala různá data pro stejnou osobu, aniž by měla jasný způsob, jak ji identifikovat nebo se jí vyhnout.

Zrušení této tabulky do dvou tabulek, Učitelé a kurzy (viz výše), vytváří správný vztah mezi daty a proto pomáhá zajistit konzistenci a přesnost dat.