En en-til-mange-relation i en database opstår, når hver post i tabel A kan have mange sammenkædede poster i tabel B, men hver post i tabel B kan kun have én tilsvarende post i tabel A.
Et en-til-mange-forhold i en database er det mest almindelige relationelle databasedesign og er kernen i godt design.
Databaser kan også implementere en en-til-en-relation og en mange-til-mange-relation.
Eksempel på et en-til-mange-forhold
Overvej forholdet mellem en lærer og de kurser, de underviser i. En lærer kan undervise i flere klasser, men kurset ville ikke have det samme forhold til læreren.
Derfor kan der for hver post i en lærertabel være mange poster i kurser-tabellen. Dette eksempel illustrerer et en-til-mange forhold: én lærer til flere kurser.
Hvorfor er det vigtigt at etablere et en-til-mange-forhold
For at repræsentere et en-til-mange forhold skal du have mindst to tabeller. Lad os se hvorfor.
Adherence to First Normal Form Design
Måske har vi oprettet en tabel, hvor vi vil registrere navnet og de underviste kurser. Vi kan designe en lærer- og kurstabel som denne:
Teacher_ID | Teacher_Name | Kursus |
---|---|---|
Teacher_001 | Carmen | Biologi |
Teacher_002 | Veronica | Math |
Teacher_003 | Jorge | engelsk |
Hvad hvis Carmen underviser i to eller flere kurser? Vi har to muligheder med dette design. Vi kunne tilføje det til Carmens eksisterende rekord, sådan her:
Teacher_ID | Lærer_Name | Kursus |
---|---|---|
Teacher_001 | Carmen | Biologi, matematik |
Teacher_002 | Veronica | Math |
Teacher_003 | Jorge | engelsk |
Men ovenstående design er ufleksibel og kan resultere i problemer senere, når du indsætter, redigerer eller sletter data. Det gør det svært at søge efter data.
Dette design overtræder også det første princip for databasenormalisering, First Normal Form (1NF), som siger, at hver tabelcelle skal indeholde et enkelt, diskret stykke data.
Den anden normalformregel
Et andet design alternativ kan være at tilføje en anden rekord for Carmen:
Lærer_ID | Lærer_Name | Kursus |
---|---|---|
Teacher_001 | Carmen | Biologi |
Teacher_001 | Carmen | Math |
Teacher_002 | Veronica | Math |
Teacher_003 | Jorge | engelsk |
Denne tilgang overholder 1NF, men er stadig dårligt databasedesign, fordi den introducerer redundans og kan svulme en stor database unødigt op. Endnu vigtigere er det, at dataene kan blive inkonsekvente.
For eksempel, hvad hvis Carmens navn blev ændret? En person, der arbejder med dataene, opdaterer muligvis hendes navn i én post og undlader at opdatere det i den anden post.
Dette design overtræder standarden Second Normal Form (2NF), som overholder 1NF og også skal undgå redundans af flere poster. 2NF-reglen opnår dette ved at adskille delmængder af data i flere tabeller og skabe en relation mellem dem.
Sådan designes en database med en-til-mange-relationer
For at implementere en en-til-mange-relation i tabellen Lærere og kurser skal du dele tabellerne op i to og forbinde dem med en fremmednøgle.
Her fjernede vi kolonnen Kursus i lærertabellen:
Lærer_ID | Lærer_Name |
---|---|
Teacher_001 | Carmen |
Teacher_002 | Veronica |
Teacher_003 | Jorge |
Og her er kurstabellen. Bemærk, at dens fremmednøgle, Teacher_ID, linker et kursus til en lærer i lærertabellen:
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 kurstabellen ved hjælp af en fremmednøgle. Dette arrangement fortæller os, at Carmen underviser i både biologi og matematik, og at Jorge underviser i engelsk.
Vi kan se, hvordan dette design undgår enhver mulig redundans, giver individuelle lærere mulighed for at undervise i flere kurser og implementerer et en-til-mange forhold.