Et enkelt til mange forhold i en database opstår, når hver post i tabel A kan have mange sammenknyttede poster i tabel B, men hver post i tabel B må kun have en tilsvarende post i tabel A. Et forhold til et stort antal i en database er den mest almindelige relationelle database design og er kernen i godt design.
Overvej forholdet mellem en lærer og de kurser, de underviser. En lærer kan undervise i flere kurser, men kurset vil ikke have det samme forhold til læreren.
Derfor kunne der for hver post i et lærerbord være mange optegnelser i kurser-tabellen. Dette er et enkelt til mange forhold: en lærer til flere kurser.
Hvorfor etablere et enkelt til mange forhold er vigtigt
For at repræsentere et til mange forhold, skal du have mindst to tabeller. Lad os se hvorfor.
Måske skabte vi et bord, hvor vi ønskede at registrere navn og kurser undervist. Vi kan designe det sådan:
Teacher_ID | TEACHER_NAME | Rute |
---|---|---|
Teacher_001 | Carmen | Biologi |
Teacher_002 | Veronica | Math |
Teacher_003 | Jorge | engelsk |
Hvad hvis Carmen lærer to eller flere kurser? Vi har to muligheder med dette design. Vi kunne bare føje det til Carmens eksisterende rekord, som dette:
Teacher_ID | Lærer_Navn | Rute |
---|---|---|
Teacher_001 | Carmen | Biologi, Math |
Teacher_002 | Veronica | Math |
Teacher_003 | Jorge | engelsk |
Udformningen ovenfor er dog ufleksibel og kan resultere i problemer senere, når du forsøger at indsætte, redigere eller slette data.
Det gør det svært at søge efter data. Dette design krænker det første princip om database normalisering, First Normal Form (1NF), som angiver, at hver tabelcelle skal indeholde et enkelt, diskret datastykke.
Et andet design alternativ kan være at blot tilføje en ny rekord for Carmen:
Lærer_id | Lærer_Navn | Rute |
---|---|---|
Teacher_001 | Carmen | Biologi |
Teacher_001 | Carmen | Math |
Teacher_002 | Veronica | Math |
Teacher_003 | Jorge | engelsk |
Dette overholder 1NF, men er stadig dårlig database design, fordi det introducerer redundans og kunne opblussen en meget stor database unødigt. Endnu vigtigere kan dataene blive inkonsekvente. For eksempel, hvad hvis Carmen's navn ændrede sig? Nogen der arbejder med dataene, kan opdatere hendes navn i en post og undlader at opdatere det i den anden post. Dette design overtræder Second Normal Form (2NF), som overholder 1NF og skal også undgå afskedigelser af flere poster ved at adskille undergrupper af data til flere tabeller og skabe et forhold mellem dem.
Sådan designer du en database med en-til-mange forhold
For at gennemføre et enkelt til mange forhold i tabellen Lærere og kurser bryder vi tabellerne i to og knytter dem til en udenlandsk nøgle.
Her har vi fjernet kurskolonnen i lærerbordet:
Lærer_id | Lærer_Navn |
---|---|
Teacher_001 | Carmen |
Teacher_002 | Veronica |
Teacher_003 | Jorge |
Og her er kurserbordet. Bemærk, at dens udenlandske nøgle, Teacher_ID, forbinder et kursus til en lærer i lærerbordet:
Course_ID | COURSE_NAME | Teacher_ID |
---|---|---|
Course_001 | Biologi | Teacher_001 |
Course_002 | Math | Teacher_001 |
Course_003 | engelsk | Teacher_003 |
Vi har udviklet et forhold mellem lærer og kurser bordet ved hjælp af en fremmed nøgle.
Dette fortæller os, at både biologi og matematik er undervist af Carmen og at Jorge underviser engelsk.
Vi kan se, hvordan dette design undgår mulige afskedigelser, giver individuelle lærere mulighed for at undervise i flere kurser og implementerer et enkelt til mange forhold.
Databaser kan også implementere et et-til-et-forhold og et mange til mange forhold.