Vzťahy jeden k mnohým v databáze

Obsah:

Vzťahy jeden k mnohým v databáze
Vzťahy jeden k mnohým v databáze
Anonim

Vzťah jedna k mnohým v databáze nastane, keď každý záznam v tabuľke A môže mať veľa 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 typu one-to-many v databáze je najbežnejším návrhom relačnej databázy a je základom dobrého dizajnu.

Databázy môžu tiež implementovať vzťah typu one-to-one a mnoho-to-many.

Image
Image

Príklad vzťahu jeden k mnohým

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

Pre každý záznam v tabuľke Učitelia môže byť v tabuľke Kurzy veľa záznamov. Tento príklad ilustruje vzťah jeden k mnohým: jeden učiteľ k viacerým kurzom.

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

Na reprezentáciu vzťahu jeden k mnohým potrebujete aspoň dve tabuľky. Pozrime sa prečo.

Dodržiavanie návrhu prvého normálneho formulára

Možno sme vytvorili tabuľku, do ktorej chceme zaznamenávať meno a vyučované kurzy. Tabuľku učiteľov a kurzov môžeme navrhnúť takto:

Teacher_ID Teacher_Name Kurz
Teacher_001 Carmen Biológia
Teacher_002 Veronica Math
Teacher_003 Jorge angličtina

Čo ak Carmen vyučuje dva alebo viac kurzov? S týmto dizajnom máme dve možnosti. Mohli by sme to pridať do existujúceho záznamu Carmen takto:

Teacher_ID Učiteľ_Name Kurz
Teacher_001 Carmen Biológia, matematika
Teacher_002 Veronica Math
Teacher_003 Jorge angličtina

Vyššie uvedený dizajn je však neflexibilný a môže spôsobiť problémy neskôr pri vkladaní, úprave alebo odstraňovaní údajov. Sťažuje vyhľadávanie údajov.

Tento návrh tiež porušuje prvý princíp normalizácie databázy, First Normal Form (1NF), ktorý uvádza, že každá bunka tabuľky by mala obsahovať jeden samostatný údaj.

Pravidlo druhej normálnej formy

Ďalšou dizajnovou alternatívou môže byť pridanie druhej nahrávky pre Carmen:

Učiteľ_ID Učiteľ_Name Kurz
Teacher_001 Carmen Biológia
Teacher_001 Carmen Math
Teacher_002 Veronica Math
Teacher_003 Jorge angličtina

Tento prístup dodržiava 1NF, ale stále ide o zlý návrh databázy, pretože zavádza redundanciu a môže zbytočne nafúknuť veľkú databázu. Ešte dôležitejšie je, že údaje môžu byť nekonzistentné.

Čo keby sa napríklad zmenilo meno Carmen? Niekto, kto pracuje s údajmi, môže aktualizovať jej meno v jednom zázname a nedokáže ho aktualizovať v druhom zázname.

Tento dizajn porušuje štandard druhej normálnej formy (2NF), ktorý dodržiava 1NF a musí sa tiež vyhýbať redundanciám viacerých záznamov. Pravidlo 2NF to dosahuje oddelením podmnožín údajov do viacerých tabuliek a vytvorením vzťahu medzi nimi.

Ako navrhnúť databázu s jednotlivými vzťahmi

Ak chcete implementovať vzťah jeden k mnohým v tabuľke Učitelia a Kurzy, rozdeľte tabuľky na dve a prepojte ich pomocou cudzieho kľúča.

Tu sme odstránili stĺpec Kurz v tabuľke Učitelia:

Učiteľ_ID Učiteľ_Name
Teacher_001 Carmen
Teacher_002 Veronica
Teacher_003 Jorge

A tu je tabuľka kurzov. Všimnite si, že jeho cudzí kľúč, Teacher_ID, spája kurz s učiteľom v tabuľke Učitelia:

Course_ID Course_Name Teacher_ID
Course_001 Biológia Teacher_001
Course_002 Math Teacher_001
Course_003 angličtina Teacher_003

Vyvinuli sme vzťah medzi učiteľmi a tabuľkou Kurzy pomocou cudzieho kľúča. Toto usporiadanie nám hovorí, že Carmen učí biológiu aj matematiku a že Jorge učí angličtinu.

Vidíme, ako sa tento dizajn vyhýba akýmkoľvek možným prepúšťaniam, umožňuje jednotlivým učiteľom vyučovať viacero kurzov a implementuje vzťah „one-to-many“.

Odporúča: