Skip to main content

En-till-många relationer i en databas

What Does Ron Paul Stand For? On Education, the Federal Reserve, Finance, and Libertarianism (Maj 2025)

What Does Ron Paul Stand For? On Education, the Federal Reserve, Finance, and Libertarianism (Maj 2025)
Anonim

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:

Lärare och kurser
Teacher_IDLärarnamnKurs
Teacher_001CarmenBiologi
Teacher_002VeronicaMatematik
Teacher_003Jorgeengelsk

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:

Lärare och kurser
Teacher_IDLärare_NamnKurs
Teacher_001CarmenBiologi, Math
Teacher_002VeronicaMatematik
Teacher_003Jorgeengelsk

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 och kurser
Lärare_IDLärare_NamnKurs
Teacher_001CarmenBiologi
Teacher_001CarmenMatematik
Teacher_002VeronicaMatematik
Teacher_003Jorgeengelsk

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
Lärare_IDLärare_Namn
Teacher_001Carmen
Teacher_002Veronica
Teacher_003Jorge

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:

Kurser
Course_IDKursnamnTeacher_ID
Course_001BiologiTeacher_001
Course_002MatematikTeacher_001
Course_003engelskTeacher_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.