Vzťahy typu one-to-many v databáze

Vzťah medzi jednotlivými ľuďmi v databáze sa vyskytuje, keď každý záznam v tabuľke A môže mať mnoho prepojených záznamov v tabuľke B, ale každý záznam v tabuľke B môže mať iba jeden zodpovedajúci záznam v tabuľke A. Vzťah one-to-many v databáza je najbežnejší dizajn relačnej databázy a je jadrom dobrého dizajnu.

Zvážte vzťah medzi učiteľom a kurzmi, ktoré vyučujú. Učiteľ môže vyučovať viacero kurzov, ale kurz by nemal rovnaký vzťah s učiteľom.

Preto pre každý záznam v tabuľke Učitelia by mohlo byť veľa záznamov v tabuľke kurzov. Ide o vzťah jedného k viacerým: jeden učiteľ na viacerých kurzoch.

Prečo je dôležité vytvoriť vzťah medzi jedným a mnohými

Na to, aby ste zastupovali vzťah medzi jedným a viacerými, potrebujete aspoň dve tabuľky. Pozrime sa prečo.

Možno sme vytvorili tabuľku učiteľov, v ktorej chceme zaznamenať meno a vyučované kurzy. Mohli by sme to navrhnúť takto:

Učitelia a kurzy
Teacher_ID TEACHER_NAME kurz
Teacher_001 carmen biológie
Teacher_002 rozrazil matematika
Teacher_003 jorge Angličtina

Čo ak Carmen vyučuje dva alebo viac kurzov? V tomto dizajne máme dve možnosti. Mohli by sme to len pridať k existujúcemu záznamu spoločnosti Carmen, a to takto:

Učitelia a kurzy
Teacher_ID Učiteľ _Name kurz
Teacher_001 carmen Biológia, Math
Teacher_002 rozrazil matematika
Teacher_003 jorge Angličtina

Vyššie uvedený návrh je však nepružný a môže viesť k problémom neskôr pri pokuse o vloženie, úpravu alebo vymazanie údajov.

To sťažuje vyhľadávanie údajov. Tento návrh porušuje prvý princíp normalizácie databázy, prvý normálny formát (1NF) , ktorý uvádza, že každá bunka tabuľky by mala obsahovať jediný, diskrétny údaj.

Ďalšou konštrukčnou alternatívou by bolo jednoducho pridať druhý záznam pre Carmen:

Učitelia a kurzy
Učiteľ _ID Učiteľ _Name kurz
Teacher_001 carmen biológie
Teacher_001 carmen matematika
Teacher_002 rozrazil matematika
Teacher_003 jorge Angličtina

Toto sa drží 1NF, ale stále je to slabý dizajn databázy, pretože prináša redundanciu a môže zbytočne nadmerne nadmerne zväčšovať veľkú databázu. Ešte dôležitejšie je, že údaje sa môžu stať nekonzistentné. Napríklad, čo sa zmenilo meno Carmen? Niekto, kto pracuje s údajmi, môže aktualizovať svoje meno v jednom zázname a nedokáže ho aktualizovať v druhom zázname. Tento návrh porušuje Druhý normálny formulár (2NF), ktorý dodržiava 1NF a musí tiež vyhnúť prepúšťaniu viacerých záznamov oddelením podmnožín údajov do viacerých tabuliek a vytvorením vzťahu medzi nimi.

Ako navrhnúť databázu s one-to-Mnoho vzťahov

Na implementáciu vzťahu one-to-many v tabuľke učiteľov a kurzov rozdeľujeme tabuľky na dve a prepájame ich pomocou cudzieho kľúča .

Tu sme odstránili stôl kurz v tabuľke učiteľov:

učitelia
Učiteľ _ID Učiteľ _Name
Teacher_001 carmen
Teacher_002 rozrazil
Teacher_003 jorge

A tu je tabuľka kurzov. Upozorňujeme, že jeho cudzí kľúč Teacher_ID spája kurz s učiteľom v tabuľke učiteľov:

predmety
Course_ID Názov kurzu Teacher_ID
Course_001 biológie Teacher_001
Course_002 matematika Teacher_001
Course_003 Angličtina Teacher_003

Vytvorili sme vzťah medzi tabuľkou učiteľov a kurzov pomocou cudzieho kľúča.

To nám hovorí, že Carmina je vyučovaná ako biológia, tak aj matematika a Jorge učí angličtinu.

Vidíme, ako sa tento návrh vyhýba akémukoľvek možnému prepúšťaniu, umožňuje individuálnym učiteľom vyučovať viacero kurzov a realizuje vzťah medzi jedným a mnohými.

Databázy môžu tiež implementovať vzájomný vzťah a vzájomný vzťah od mnohých k mnohým.