En-till-många-relationer i en databas

Innehållsförteckning:

En-till-många-relationer i en databas
En-till-många-relationer i en databas
Anonim

En en-till-många-relation i en databas uppstår när varje post i tabell A kan ha många länkade poster i tabell B, men varje post i tabell B kan bara ha en motsvarande post i tabell A.

En en-till-många-relation i en databas är den vanligaste relationsdatabasdesignen och är kärnan i bra design.

Databaser kan också implementera en en-till-en-relation och en många-till-många-relation.

Image
Image

Exempel på en en-till-många-relation

Tänk på förhållandet mellan en lärare och de kurser de undervisar i. En lärare kan undervisa i flera klasser, men kursen skulle inte ha samma relation med läraren.

Därför, för varje post i en lärartabell, kan det finnas många poster i kurstabellen. Det här exemplet illustrerar en en-till-många-relation: en lärare till flera kurser.

Varför det är viktigt att etablera en en-till-många-relation

För att representera en en-till-många-relation behöver du minst två tabeller. Låt oss se varför.

Anslutning till den första normala formdesignen

Kanske skapade vi en tabell där vi vill spela in namnet och de kurser som undervisas. Vi kan designa en lärare och kurstabell så här:

Teacher_ID Teacher_Name Kurs
Teacher_001 Carmen Biology
Teacher_002 Veronica Math
Teacher_003 Jorge engelska

Vad händer om Carmen undervisar i två eller flera kurser? Vi har två alternativ med denna design. Vi skulle kunna lägga till det till Carmens befintliga rekord, så här:

Teacher_ID Lärare_Name Kurs
Teacher_001 Carmen Biologi, matematik
Teacher_002 Veronica Math
Teacher_003 Jorge engelska

Men designen ovan är oflexibel och kan resultera i problem senare när du infogar, redigerar eller raderar data. Det gör det svårt att söka efter data.

Denna design bryter också mot den första principen för databasnormalisering, First Normal Form (1NF), som säger att varje tabellcell ska innehålla en enda, diskret databit.

Den andra normala formregeln

Ett annat design alternativ kan vara att lägga till en andra post för Carmen:

Lärare_ID Lärare_Name Kurs
Teacher_001 Carmen Biology
Teacher_001 Carmen Math
Teacher_002 Veronica Math
Teacher_003 Jorge engelska

Det här tillvägagångssättet följer 1NF men är fortfarande dålig databasdesign eftersom det introducerar redundans och kan blåsa upp en stor databas i onödan. Ännu viktigare är att uppgifterna kan bli inkonsekventa.

Tänk till exempel om Carmens namn ändrades? Någon som arbetar med data kan uppdatera hennes namn i en post och misslyckas med att uppdatera det i den andra posten.

Denna design bryter mot standarden Second Normal Form (2NF), som följer 1NF och måste också undvika redundanser för flera poster. 2NF-regeln uppnår detta genom att separera delmängder av data i flera tabeller och skapa en relation mellan dem.

Hur man designar en databas med en-till-många-relationer

För att implementera en en-till-många-relation i tabellen Lärare och kurser, dela tabellerna i två och länka dem med en främmande nyckel.

Här tog vi bort kurskolumnen i Lärartabellen:

Lärare_ID Lärare_Name
Teacher_001 Carmen
Teacher_002 Veronica
Teacher_003 Jorge

Och här är kurstabellen. Observera att dess främmande nyckel, Teacher_ID, länkar en kurs till en lärare i Lärartabellen:

Course_ID Course_Name Teacher_ID
Course_001 Biology Teacher_001
Course_002 Math Teacher_001
Course_003 engelska Teacher_003

Vi har utvecklat en relation mellan tabellen Lärare och kurser med hjälp av en främmande nyckel. Det här arrangemanget berättar för oss att Carmen undervisar i både biologi och matematik och att Jorge undervisar i engelska.

Vi kan se hur den här designen undviker eventuella uppsägningar, tillåter enskilda lärare att undervisa i flera kurser och implementerar en en-till-många-relation.

Rekommenderad: