Skip to main content

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

Anonim

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, v ktorej chceme zaznamenať meno a vyučované kurzy. Mohli by sme to navrhnúť takto:

Učitelia a kurzy
Teacher_IDTEACHER_NAMEkurz
Teacher_001carmenbiológie
Teacher_002rozrazilmatematika
Teacher_003jorgeAnglič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_IDučiteľ_Názovkurz
Teacher_001carmenBiológia, Math
Teacher_002rozrazilmatematika
Teacher_003jorgeAnglič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ľ_IDučiteľ_Názovkurz
Teacher_001carmenbiológie
Teacher_001carmenmatematika
Teacher_002rozrazilmatematika
Teacher_003jorgeAnglič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ľ_IDučiteľ_Názov
Teacher_001carmen
Teacher_002rozrazil
Teacher_003jorge

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_IDNázov kurzuTeacher_ID
Course_001biológieTeacher_001
Course_002matematikaTeacher_001
Course_003AngličtinaTeacher_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.