Skip to main content

En-til-mange relasjoner i en database

Relasjonsdatabaser: En-til-mange relasjon (April 2025)

Relasjonsdatabaser: En-til-mange relasjon (April 2025)
Anonim

Et en-til-mange-forhold i en database oppstår når hver post i tabell A kan ha mange sammenhengte poster i tabell B, men hver plate i tabell B kan ha bare en tilsvarende post i tabell A. En til mange forhold i en database er den mest vanlige relasjonsdatabaseutformingen og er hjertet i god design.

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

Derfor, for hver post i et lærerbord, kan det være mange poster i kursbordet. Dette er en til mange forhold: en lærer til flere kurs.

Hvorfor etablere en til mange forhold er viktig

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

Kanskje vi opprettet et bord der vi ønsket å registrere navn og kurs undervist. Vi kan utforme det slik:

Lærere og kurs
Teacher_IDLærernavnKurs
Teacher_001CarmenBiologi
Teacher_002VeronicaMatte
Teacher_003JorgeEngelsk

Hva om Carmen lærer to eller flere kurs? Vi har to alternativer med denne designen. Vi kan bare legge den til Carmens eksisterende rekord, slik:

Lærere og kurs
Teacher_IDLærer_NavnKurs
Teacher_001CarmenBiologi, matematikk
Teacher_002VeronicaMatte
Teacher_003JorgeEngelsk

Utformingen ovenfor er imidlertid ufleksibel og kan føre til problemer senere når du prøver å sette inn, redigere eller slette data.

Det gjør det vanskelig å søke etter data. Denne konstruksjonen bryter med det første prinsippet om database normalisering, First Normal Form (1NF), som sier at hver tabellcell skal inneholde et enkelt, diskret datatykke.

Et annet designalternativ kan være å bare legge til en ny rekord for Carmen:

Lærere og kurs
Lærer_idLærer_NavnKurs
Teacher_001CarmenBiologi
Teacher_001CarmenMatte
Teacher_002VeronicaMatte
Teacher_003JorgeEngelsk

Dette overholder 1NF, men er fortsatt dårlig databasedesign fordi den introduserer redundans og kan oppblåse en veldig stor database unødvendig. Enda viktigere, dataene kan bli inkonsekvente. For eksempel, hva om Carmens navn endret seg? Noen som jobber med dataene, kan oppdatere navnet sitt i en post og mislykkes i å oppdatere den i den andre posten. Denne utformingen bryter med Second Normal Form (2NF), som overholder 1NF, og må også unngå redundans av flere poster ved å skille delmengder av data inn i flere tabeller og skape et forhold mellom dem.

Hvordan lage en database med en-til-mange relasjoner

For å implementere en til mange forhold i Lærer og kurs-bordet, bryter vi tabellene inn i to og knytter dem sammen med en fremmednøkkel.

Her har vi fjernet kurskolonnen i lærerbordet:

lærere
Lærer_idLærer_Navn
Teacher_001Carmen
Teacher_002Veronica
Teacher_003Jorge

Og her er kursbordet. Merk at den utenlandske nøkkelen, Teacher_ID, kobler et kurs til en lærer i lærerbordet:

kurs
Course_IDCOURSE_NAMETeacher_ID
Course_001BiologiTeacher_001
Course_002MatteTeacher_001
Course_003EngelskTeacher_003

Vi har utviklet et forhold mellom lærer og kursbord ved hjelp av en utenlandsk nøkkel.

Dette forteller oss at både biologi og matematikk er undervist av Carmen og at Jorge lærer engelsk.

Vi kan se hvordan dette designet unngår eventuelle redundanser, gjør det mulig for enkelte lærere å lære flere kurs, og implementerer en til mange forhold.

Databaser kan også implementere et ett-til-ett-forhold og et mange til mange forhold.