Ett ett till många förhållande i en databas inträffar när varje post i tabell A kan ha många länkade poster i tabell B, men varje post i tabell B får bara ha en motsvarande post i tabell A. Ett till många förhållande i en databas är den vanligaste relationella databasdesignen och ligger i hjärtat av bra design.
Tänk på förhållandet mellan en lärare och de kurser de undervisar. En lärare kan undervisa flera kurser, men kursen skulle inte ha samma relation med läraren.
Därför kan det för varje skiva i ett lärarbord finnas många poster i kurser-tabellen. Detta är ett till många förhållande: en lärare till flera kurser.
Varför är det viktigt att upprätta ett till många förhållande
För att representera ett till många förhållande behöver du minst två tabeller. Låt oss se varför.
Kanske skapade vi ett bord där vi ville spela in namnet och kurser som lärdes. Vi kan utforma det så här:
Teacher_ID | Lärarnamn | Kurs |
---|---|---|
Teacher_001 | Carmen | Biologi |
Teacher_002 | Veronica | Matematik |
Teacher_003 | Jorge | engelsk |
Vad händer om Carmen lär ut två eller flera kurser? Vi har två alternativ med denna design. Vi kan bara lägga till det i Carmens existerande rekord, så här:
Teacher_ID | Lärare_Namn | Kurs |
---|---|---|
Teacher_001 | Carmen | Biologi, Math |
Teacher_002 | Veronica | Matematik |
Teacher_003 | Jorge | engelsk |
Konstruktionen ovan är dock oflexibel och kan leda till problem senare när man försöker infoga, redigera eller radera data.
Det gör det svårt att söka efter data. Denna design bryter mot den första principen om databas normalisering, First Normal Form (1NF), som säger att varje tabellcell ska innehålla en enda, diskret datauppgift.
Ett annat designalternativ kan vara att helt enkelt lägga till en andra rekord för Carmen:
Lärare_ID | Lärare_Namn | Kurs |
---|---|---|
Teacher_001 | Carmen | Biologi |
Teacher_001 | Carmen | Matematik |
Teacher_002 | Veronica | Matematik |
Teacher_003 | Jorge | engelsk |
Detta följer 1NF men är fortfarande dålig databasdesign eftersom den introducerar redundans och kan uppblåsa en mycket stor databas onödigt. Ännu viktigare är att uppgifterna kan bli inkonsekventa. Till exempel, om Carmens namn ändras? Någon som arbetar med data kan uppdatera sitt namn i en post och misslyckas med att uppdatera det i den andra posten. Denna design bryter mot Second Normal Form (2NF), som följer 1NF och måste också undvika redundans av flera poster genom att separera delmängden data i flera tabeller och skapa ett förhållande mellan dem.
Hur man designer en databas med en till många relationer
För att genomföra ett till många förhållande i tabellen Lärare och kurser bryter vi tabellerna i två och länkar dem med en främmande nyckel.
Här har vi tagit bort kolumnen Kurs i lärartabellen:
Lärare_ID | Lärare_Namn |
---|---|
Teacher_001 | Carmen |
Teacher_002 | Veronica |
Teacher_003 | Jorge |
Och här är kurser bordet. Observera att dess utländska nyckel, Teacher_ID, länkar en kurs till en lärare i lärarutbildningen:
Course_ID | Kursnamn | Teacher_ID |
---|---|---|
Course_001 | Biologi | Teacher_001 |
Course_002 | Matematik | Teacher_001 |
Course_003 | engelsk | Teacher_003 |
Vi har utvecklat en relation mellan lärarna och kurser med en främmande nyckel.
Detta berättar att både biologi och matematik lärs av Carmen och att Jorge undervisar engelska.
Vi kan se hur denna design undviker eventuella uppsägningar, gör det möjligt för enskilda lärare att undervisa flera kurser och implementerar ett till många förhållande.
Databaser kan också genomföra ett ett-till-ett-förhållande och ett många till många förhållanden.