Skip to content

Vad är en databasrelation?

24 de juli de 2021
database relationship eb40478e1d9b4b73aec6452586c8927f

En relation upprättas mellan två databastabeller när en tabell använder en främmande nyckel som refererar till den primära nyckeln i en annan tabell. Detta är det grundläggande konceptet bakom termen relationsdatabas.

 

Hur en främmande nyckel fungerar för att skapa ett förhållande

En primär nyckel identifierar unikt varje post i tabellen. Det är en typ av kandidatnyckel som vanligtvis är den första kolumnen i en tabell och kan genereras automatiskt av databasen för att säkerställa att den är unik. En främmande 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 till exempel på dessa två tabeller som identifierar vilken lärare som undervisar vilken kurs. Här är kurstabellens primära nyckel Course_ID. Dess främmande nyckel är Teacher_ID:

Kurs_ID Kursnamn Lärare_ID
Kurs_001 Biologi Lärare_001
Kurs_002 Matematik Lärare_002
Kurs_003 engelsk Lärare_003

Du kan se att den främmande nyckeln i kurser matchar en primärnyckel i lärarna:

Lärare_ID Lärarnamn
Lärare_001 Carmen
Lärare_002 Veronica
Lärare_003 Jorge

Vi kan säga att den främmande nyckeln Teacher_ID hjälpte till att skapa en relation mellan kurserna och tabellerna för lärare.

 

Typer av databasrelationer

Med hjälp av främmande 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å varje sida av relationen. Primärnyckeln avser endast en post (eller ingen) i en annan tabell. Till exempel, i ett äktenskap har varje make bara en annan make. Denna typ av relation kan implementeras i en enda tabell och använder därför inte en främmande nyckel.

En till många

En relation till en till många gör att en enskild post i en tabell kan relateras till flera poster i en annan tabell. Överväg ett företag med en databas som har tabeller Kunder och beställningar. En enskild kund kan köpa flera beställningar, men en enda beställning kunde inte länkas till flera kunder. Därför skulle ordertabellen innehålla en främmande nyckel som matchade den primära nyckeln i tabellen Kunder, medan tabellen Kunder inte skulle ha någon främmande nyckel som pekar på ordertabellen.

Många till många

Detta är en komplex relation där många poster i en tabell kan länka till många poster i en annan tabell. Till exempel behöver vår verksamhet troligen kunder och beställningstabeller och troligtvis också en produkttabell. Återigen är förhållandet mellan tabellen Kunder och Order en-till-många, men beakta förhållandet mellan tabellen Order och produkter. En beställning kan innehålla flera produkter och en produkt kan länkas till flera beställningar eftersom flera kunder kan lämna en beställning som innehåller några av samma produkter. Denna typ av relation kräver minst tre tabeller.

 

Varför är databasrelationer viktiga?

Att skapa konsekventa förhållanden mellan databastabeller hjälper till att säkerställa dataintegritet, vilket bidrar till normalisering av databasen. Till exempel vad händer om vi inte länkar några tabeller via en främmande nyckel och istället kombinerar data i kurser och lärartabeller, så här:

Lärare_ID Lärarnamn Kurs
Lärare_001 Carmen Biologi, matematik
Lärare_002 Veronica Matematik
Lärare_003 Jorge engelsk

Denna design är oflexibel och bryter mot den första principen för databasnormalisering, First Normal Form, som anger att varje tabellcell ska innehålla en enda, diskret bit data. Eller kanske bestämde vi oss för att lägga till en andra skiva för Carmen, för att genomdriva 1NF:

Lärare_ID Lärarnamn Kurs
Lärare_001 Carmen Biologi
Lärare_001 Carmen Matematik
Lärare_002 Veronica Matematik
Lärare_003 Jorge engelsk

Detta är fortfarande en svag design som introducerar onödig duplicering och vad som kallas datainföringsavvikelser, vilket innebär att det kan bidra till inkonsekvent data. Om en lärare till exempel har flera poster, vad händer om vissa data behöver redigeras, men den person som utför dataredigeringen inser inte att det finns flera poster? Tabellen skulle då innehålla olika data för samma person, utan något tydligt sätt att identifiera eller undvika det. Att dela denna tabell i två tabeller, lärare och kurser, skapar ett korrekt förhållande mellan data och hjälper därför till att säkerställa datakonsistens och noggrannhet.