En-til-mange relasjoner i en database

Innholdsfortegnelse:

En-til-mange relasjoner i en database
En-til-mange relasjoner i en database
Anonim

En en-til-mange-relasjon i en database oppstår når hver post i tabell A kan ha mange koblede poster i tabell B, men hver post i tabell B kan ha bare én tilsvarende post i tabell A.

Et en-til-mange-forhold i en database er den vanligste relasjonsdatabasedesignen og er kjernen i god design.

Databaser kan også implementere en en-til-en-relasjon og en mange-til-mange-relasjon.

Image
Image

Eksempel på et en-til-mange-forhold

Vurder forholdet mellom en lærer og kursene de underviser i. En lærer kan undervise i flere klasser, men kurset vil ikke ha det samme forholdet til læreren.

Derfor, for hver post i en lærertabell, kan det være mange poster i kurstabellen. Dette eksemplet illustrerer et en-til-mange-forhold: én lærer til flere kurs.

Hvorfor det er viktig å etablere et en-til-mange-forhold

For å representere en en-til-mange-relasjon trenger du minst to tabeller. La oss se hvorfor.

Adherence to First Normal Form Design

Kanskje vi har laget en tabell der vi ønsker å registrere navnet og kursene som undervises. Vi kan designe en lærer- og kurstabell slik:

Teacher_ID Teacher_Name kurs
Teacher_001 Carmen Biology
Teacher_002 Veronica Math
Teacher_003 Jorge engelsk

Hva om Carmen underviser i to eller flere kurs? Vi har to alternativer med dette designet. Vi kan legge den til Carmens eksisterende rekord, slik:

Teacher_ID Lærer_Name kurs
Teacher_001 Carmen Biologi, matematikk
Teacher_002 Veronica Math
Teacher_003 Jorge engelsk

Utformingen ovenfor er imidlertid lite fleksibel og kan føre til problemer senere når du setter inn, redigerer eller sletter data. Det gjør det vanskelig å søke etter data.

Denne utformingen bryter også med det første prinsippet for databasenormalisering, First Normal Form (1NF), som sier at hver tabellcelle skal inneholde en enkelt, diskret del av data.

Den andre normalformregelen

Et annet design alternativ kan være å legge til en ny rekord for Carmen:

Lærer_ID Lærer_Name kurs
Teacher_001 Carmen Biology
Teacher_001 Carmen Math
Teacher_002 Veronica Math
Teacher_003 Jorge engelsk

Denne tilnærmingen følger 1NF, men er fortsatt dårlig databasedesign fordi den introduserer redundans og kan blåse opp en stor database unødvendig. Enda viktigere, dataene kan bli inkonsekvente.

Hva for eksempel om Carmens navn ble endret? Noen som jobber med dataene kan oppdatere navnet hennes i én post og ikke oppdatere det i den andre posten.

Denne utformingen bryter med Second Normal Form (2NF)-standarden, som følger 1NF og må også unngå redundanser for flere poster. 2NF-regelen oppnår dette ved å separere delsett av data i flere tabeller og opprette en relasjon mellom dem.

Hvordan designe en database med en-til-mange-relasjoner

For å implementere en en-til-mange-relasjon i lærere og kurs-tabellen, del tabellene i to og koble dem sammen med en fremmednøkkel.

Her fjernet vi kurskolonnen i lærertabellen:

Lærer_ID Lærer_Name
Teacher_001 Carmen
Teacher_002 Veronica
Teacher_003 Jorge

Og her er kurstabellen. Merk at fremmednøkkelen, Teacher_ID, kobler et kurs til en lærer i lærertabellen:

Course_ID Course_Name Teacher_ID
Course_001 Biology Teacher_001
Course_002 Math Teacher_001
Course_003 engelsk Teacher_003

Vi har utviklet et forhold mellom lærer- og kurstabellen ved å bruke en fremmednøkkel. Denne ordningen forteller oss at Carmen underviser i både biologi og matematikk, og at Jorge underviser i engelsk.

Vi kan se hvordan denne utformingen unngår eventuelle oppsigelser, lar individuelle lærere undervise i flere kurs og implementerer et en-til-mange forhold.

Anbefalt: