Skip to main content

Jeden-k-Mnoho vztahů v databázi

THE PLEIADIANS AND THEIR CITIES/ONLY SPEECH/ SOURCE- www.arcturi.com (Smět 2025)

THE PLEIADIANS AND THEIR CITIES/ONLY SPEECH/ SOURCE- www.arcturi.com (Smět 2025)
Anonim

Vztah mezi jednotlivci v databázi nastane, když každý záznam v tabulce A může mít mnoho propojených záznamů v tabulce B, ale každý záznam v tabulce B může mít pouze jeden odpovídající záznam v tabulce A. Jeden vztah jeden v mnoha databáze je nejběžnější návrh relační databáze a je jádrem dobrého designu.

Zvažte vztah mezi učitelem a kurzy, které učí. Učitel může vyučovat více kurzů, ale kurz by neměl stejný vztah s učitelem.

Proto pro každý záznam v tabulce Učitelé by mohlo být mnoho záznamů v tabulce Kurzy. Jedná se o vztah jeden k mnoho: jeden učitel na více kurzů.

Proč je důležité vytvořit vztah typu one-to-many

Chcete-li zastupovat vztah one-to-many, potřebujete alespoň dvě tabulky. Uvidíme proč.

Možná jsme vytvořili tabulku, ve které jsme chtěli zaznamenat jméno a vyučované předměty. Mohli bychom to navrhnout takto:

Učitelé a kurzy
Učitel_IDJméno učiteleChod
Teacher_001CarmenBiologie
Teacher_002RozrazilMatematika
Teacher_003JorgeAngličtina

Co když Carmen vyučuje dva nebo více kurzů? V tomto designu máme dvě možnosti. Mohli bychom ji přidat do existujícího záznamu společnosti Carmen, a to takto:

Učitelé a kurzy
Učitel_IDUčitel_NázevChod
Teacher_001CarmenBiologie, Matematika
Teacher_002RozrazilMatematika
Teacher_003JorgeAngličtina

Výše uvedený návrh je však nepružný a může způsobit problémy později při pokusu o vkládání, úpravu nebo mazání dat.

Zpřístupňuje vyhledávání dat. Tento návrh poruší 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.

Dalším alternativním řešením by mohlo být jednoduché přidání druhého záznamu pro Carmen:

Učitelé a kurzy
Učitel_IDUčitel_NázevChod
Teacher_001CarmenBiologie
Teacher_001CarmenMatematika
Teacher_002RozrazilMatematika
Teacher_003JorgeAngličtina

To se drží 1NF, ale stále je špatný návrh databáze, protože zavádí redundanci a může zbytečně nabobtnat velice rozsáhlou databázi. Ještě důležitější je, že údaje mohou být nekonzistentní. Například, co se změní jméno Carmen? Někdo, kdo pracuje s daty, může aktualizovat své jméno v jednom záznamu a ve druhém záznamu jej nemůže aktualizovat. Tento návrh porušuje druhou normální podobu (2NF), která dodržuje 1NF a musí se také vyhnout nadbytečnosti více záznamů oddělením podmnožin dat do více tabulek a vytvořením vztahu mezi nimi.

Jak navrhnout databázi s relacemi typu one-to-many

Chcete-li implementovat vztah one-to-many v tabulce učitelů a kurzů, rozdělíme tabulky do dvou a propojíme je pomocí cizího klíče.

Zde jsme odstranili sloupec kurz v tabulce učitelů:

Učitelé
Učitel_IDUčitel_Název
Teacher_001Carmen
Teacher_002Rozrazil
Teacher_003Jorge

A zde je tabulka Kurzy. Všimněte si, že cizí klíč Teacher_ID propojuje kurz s učitelem v tabulce Učitelé:

Kurzy
ID kurzuNázev kurzuUčitel_ID
Course_001BiologieTeacher_001
Course_002MatematikaTeacher_001
Course_003AngličtinaTeacher_003

Vytvořili jsme vztah mezi tabulkou Učitelé a kurzy pomocí cizího klíče.

To nám říká, že Carmen vyučuje jak biologii, tak matematiku a že Jorge učí angličtinu.

Vidíme, jak se tento návrh vyhýbá jakémukoli možnému propouštění, umožňuje jednotlivým učitelům vyučovat více kurzů a zavádí vztah jeden k mnoho.

Databáze mohou také implementovat vztah one-to-one a vztah mnoho k mnoha.