En relation upprättas mellan två databastabeller när en tabell använder en främmande nyckel som refererar till primärnyckeln för en annan tabell. Detta är grundkonceptet bakom termen relationsdatabas.
Hur en utländsk nyckel fungerar för att etablera ett förhållande
En primärnyckel identifierar unikt varje post i tabellen. Det är en typ av kandidatnyckel som vanligtvis är den första kolumnen i en tabell och som automatiskt kan genereras av databasen för att säkerställa att den är unik. En främmande nyckel är en annan kandidatnyckel (inte primärnyckeln) 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 i vilken kurs. Här är kurstabellens primärnyckel Course_ID. Dess främmande nyckel är Teacher_ID:
Course_ID | Course_Name | Teacher_ID |
---|---|---|
Course_001 | Biology | Teacher_001 |
Course_002 | Math | Teacher_002 |
Course_003 | engelska | Teacher_003 |
Du kan se att den främmande nyckeln i Courses matchar en primärnyckel i Teachers:
Teacher_ID | Teacher_Name |
---|---|
Teacher_001 | Carmen |
Teacher_002 | Veronica |
Teacher_003 | Jorge |
Vi kan säga att den främmande nyckeln Teacher_ID hjälpte till att upprätta en relation mellan kurserna och lärartabellerna.
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
Den här typen av relation tillåter endast en post på varje sida 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. Den här typen av relation kan implementeras i en enda tabell och använder därför inte en främmande nyckel.
En-till-många
En en-till-många-relation 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 kund- och beställningstabeller.
En enskild kund kan köpa flera beställningar, men en enda beställning kunde inte kopplas till flera kunder. Därför skulle tabellen Order innehålla en främmande nyckel som matchade primärnyckeln i tabellen Kunder, medan tabellen Kunder inte skulle ha någon främmande nyckel som pekar mot tabellen Order.
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 kund- och beställningstabeller, och troligen behöver vi också en produkttabell.
Återigen, förhållandet mellan tabellen Kunder och beställningar är en till många, men tänk på förhållandet mellan tabellen beställningar och produkter. En beställning kan innehålla flera produkter, och en produkt kan vara kopplad till flera beställningar eftersom flera kunder kan skicka en beställning som innehåller några av samma produkter. Den här typen av relation kräver minst tre bord.
Varför är databasrelationer viktiga?
Att upprätta konsekventa relationer mellan databastabeller hjälper till att säkerställa dataintegritet, vilket bidrar till databasnormalisering. Tänk till exempel om vi inte länkade några tabeller genom en främmande nyckel och istället kombinerade data i kurs- och läraretabellerna, som så:
Teacher_ID | Teacher_Name | Kurs |
---|---|---|
Teacher_001 | Carmen | Biologi, matematik |
Teacher_002 | Veronica | Math |
Teacher_003 | Jorge | engelska |
Den här designen är oflexibel och bryter mot den första principen för databasnormalisering, First Normal Form, som säger att varje tabellcell ska innehålla en enda, diskret databit.
Eller kanske vi bestämde oss för att lägga till en andra post för Carmen, för att upprätthålla 1NF:
Teacher_ID | Teacher_Name | Kurs |
---|---|---|
Teacher_001 | Carmen | Biology |
Teacher_001 | Carmen | Math |
Teacher_002 | Veronica | Math |
Teacher_003 | Jorge | engelska |
Detta är fortfarande en svag design som introducerar onödig dubblering och vad som kallas datainsättningsavvikelser, vilket innebär att det kan bidra till inkonsekventa data. Till exempel, om en lärare har flera poster, vad händer om vissa data behöver redigeras, men personen som utför dataredigeringen inte inser att det finns flera poster? Tabellen skulle då innehålla olika data för samma individ, utan något tydligt sätt att identifiera eller undvika det.
Att dela upp den här tabellen i två tabeller, lärare och kurser, skapar den korrekta relationen mellan data och hjälper därför till att säkerställa datakonsistens och exakthet.