Skip to main content

Vad är en databasförhållande?

Anonim

Ett förhållande upprättas mellan två databastabeller när ett bord har en främmande nyckel som refererar till den primära nyckeln till en annan tabell. Detta är grundbegreppet bakom begreppet relationell databas.

Hur en utländsk nyckel fungerar för att upprätta ett förhållande

Låt oss granska grunderna för primära och utländska nycklar. En primär nyckel identifierar varje enskild post i tabellen. Det är en typ av kandidatnyckel som vanligtvis är den första kolumnen i ett bord och kan automatiskt genereras av databasen för att säkerställa att den är unik.

En utländsk nyckel är en annan kandidatnyckel (inte den primära nyckeln) som används för att länka en post till data i en annan tabell.

Tänk på exempel på dessa två tabeller som identifierar vilken lärare som läser vilken kurs.

Här är kurser tabellen primära nyckeln Course_ID. Dess utländska nyckel är Lärare_ID:

Kurser
Course_IDKursnamnTeacher_ID
Course_001BiologiTeacher_001
Course_002MatematikTeacher_001
Course_003engelskTeacher_003

Du kan se att den utländska nyckeln i kurser matchar en primär nyckel i lärare:

lärare
Teacher_IDLärarnamn
Teacher_001Carmen
Teacher_002Veronica
Teacher_003Jorge

Vi kan säga att den främmande nyckeln Teacher_ID har hjälpt till att skapa en relation mellan kurser och lärarnas tabeller.

Typer av databasförhållanden

Med hjälp av utländska nycklar eller andra kandidatnycklar kan du implementera tre typer av relationer mellan tabeller:

En till en: Denna typ av relation tillåter bara en post på vardera sidan av relationen.

Den primära nyckeln avser endast en post - eller ingen - i en annan tabell. Till exempel, i ett äktenskap, har varje make endast en annan make. Denna typ av relation kan genomföras i ett enda bord och använder därför inte en främmande nyckel.

En till många: Ett ett till många förhållanden gör att en enda post i ett bord kan relateras till flera poster i en annan tabell.

Tänk på ett företag med en databas som har kunder och beställnings tabeller.

En enskild kund kan köpa flera beställningar, men en enda order kunde inte kopplas till flera kunder. Därför skulle beställningstabellen innehålla en utländsk nyckel som matchade den primära nyckeln i tabellen Kunder, medan tabellen Kunder inte skulle ha någon utländsk nyckel som pekar på Order-tabellen.

Många-till-många: Detta är ett komplicerat förhållande där många poster i ett bord kan länka till många poster i en annan tabell. Vår verksamhet behöver till exempel inte bara kunder och beställningsbord, men behöver även en produkttabell.

Återigen är förhållandet mellan tabellen Kunder och order en till många, men betrakta förhållandet mellan tabellen Orders and Products. En beställning kan innehålla flera produkter, och en produkt kan kopplas till flera beställningar: flera kunder kan skicka en beställning som innehåller några av samma produkter. Denna typ av relation kräver minst tre tabeller.

Vad är databasrelationer viktiga?

Att upprätta konsekventa relationer mellan databastabeller hjälper till att säkerställa dataintegritet, vilket bidrar till databas normalisering. Till exempel, om vi inte länkar några tabeller via en främmande nyckel och istället bara kombinerar data i kurser och lärare tabeller, så här:

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

Denna design är oflexibel och bryter mot den första principen för databas normalisering, First Normal Form (1NF), vilket säger att varje tabellcell ska innehålla en enda, diskret datauppgift.

Eller kanske vi bestämde oss för att helt enkelt lägga till en andra rekord för Carmen, för att genomföra 1NF:

Lärare och kurser
Teacher_IDLärarnamnKurs
Teacher_001CarmenBiologi
Teacher_001CarmenMatematik
Teacher_002VeronicaMatematik
Teacher_003Jorgeengelsk

Det här är fortfarande en svag design, som introducerar onödig dubbelarbete och vad som kallas datainsättningsanomalier , vilket bara innebär att det kan bidra till inkonsekventa uppgifter.

Om en lärare till exempel har flera poster, vad händer om vissa data behöver redigeras, men personen som utför dataredigeringen inser inte att flera poster finns? Bordet skulle då innehålla olika data för samma individ, utan något tydligt sätt att identifiera det eller undvika det.

Att bryta denna tabell i två tabeller, lärare och kurser (som visualiseras ovan) skapar det korrekta förhållandet mellan data och hjälper därför till att säkerställa datakonsistens och noggrannhet.