Databasetermerne relationel og relation beskriver den måde, data i tabeller er forbundet på. En relationsdatabase består af en række af to eller flere tabeller, der er forbundet med en bestemt nøgle. En relationel database adskiller sig fra ustrukturerede databaser, som er almindelige i big data-initiativer. Relationelle databaser har en tendens til at kræve strenge regler for, hvordan tabeller defineres, og hvad der udgør et gyldigt forhold mellem tabeller.
Typer af databaserelationer
Relationer giver dig mulighed for at beskrive forbindelserne mellem databasetabeller på effektive måder. Disse relationer kan så udnyttes til at udføre effektive krydstabelforespørgsler, kendt som JOINs.
Der er tre typer databaserelationer, hver navngivet efter antallet af tabelrækker involveret i relationen. Hver af disse tre relationstyper eksisterer mellem to tabeller.
- En-til-en-relationer opstår, når hver post i den første tabel kun har én modpart i den anden tabel. En-til-en-relationer bruges sjældent, fordi det ofte er mere effektivt at lægge alle oplysningerne i en enkelt tabel. Nogle databasedesignere udnytter dette forhold ved at oprette tabeller, der indeholder en delmængde af data fra en anden tabel.
- En-til-mange-relationer er den mest almindelige type databaserelation. De opstår, når hver post i tabel A svarer til en eller flere poster i tabel B, men hver post i tabel B svarer kun til én post i tabel A. For eksempel forholdet mellem en lærertabel og en elevtabel i en folkeskole database ville sandsynligvis være et en-til-mange forhold, fordi hver elev kun har én lærer, men hver lærer har flere elever. Dette en-til-mange-design hjælper med at eliminere duplikerede data.
- Mange-til-mange relationer opstår, når hver post i tabel A svarer til en eller flere poster i tabel B, og hver post i tabel B svarer til en eller flere poster i tabel A. For eksempel vil forholdet mellem en lærertabel og en kurstabel sandsynligvis være mange-til-mange, fordi hver lærer kan instruere mere end ét kursus, og hvert kursus kan have mere end én instruktør.
Bundlinje
Selvrefererende relationer opstår, når der kun er én tabel involveret. Et almindeligt eksempel er en medarbejdertabel, der indeholder oplysninger om hver enkelt medarbejders supervisor. Hver vejleder er også medarbejder og har en vejleder. I dette tilfælde er der et en-til-mange selvrefererende forhold, da hver medarbejder har én supervisor, men hver supervisor kan have mere end én medarbejder.
Oprettelse af relationer med fremmednøgler
Du opretter relationer mellem tabeller ved at angive en fremmednøgle. Denne nøgle fortæller relationsdatabasen, hvordan tabellerne er relateret. I mange tilfælde indeholder en kolonne i tabel A primære nøgler, der henvises til fra tabel B.
Overvej eksemplet med lærer- og elevtabellerne. Lærertabellen indeholder et ID, et navn og en kursuskolonne:
Instruktør-id | Teacher_Name | Kursus |
001 | John Doe | engelsk |
002 | Jane Schmoe | Math |
Studenter-tabellen indeholder et ID, navn og en fremmednøglekolonne:
StudentID | Student_Name | Teacher_FK |
0200 | Lowell Smith | 001 |
0201 | Brian Short | 001 |
0202 | Corky Mendez | 002 |
0203 | Monica Jones | 001 |
Kolonnen Teacher_FK i elevtabellen refererer til den primære nøgleværdi for en instruktør i lærertabellen. Ofte bruger databasedesignere PK eller FK i kolonnenavnet til at identificere en primærnøgle eller fremmednøglekolonne.
Disse to tabeller illustrerer et en-til-mange forhold mellem lærerne og eleverne.
Relationer og referenceintegritet
Når du har tilføjet en fremmednøgle til en tabel, skal du oprette en databasebegrænsning, der håndhæver referentiel integritet mellem de to tabeller. Dette trin sikrer, at relationerne mellem tabeller forbliver konsistente. Når en tabel har en fremmednøgle til en anden tabel, kræver referenceintegritet, at enhver fremmednøgleværdi i tabel B skal referere til en eksisterende post i tabel A.
Implementering af relationer
Afhængigt af din database vil du implementere relationer mellem tabeller på forskellige måder. Microsoft Access tilbyder en guide, der giver dig mulighed for at linke tabeller og også håndhæve referenceintegritet.
Hvis du skriver SQL direkte, skal du først oprette tabellen Lærere, og erklære en ID-kolonne som den primære nøgle:
CREATE TABLE Lærere (Instruktør-ID INT AUTO_INCREMENT PRIMÆR NØGLE, Teacher_Name VARCHAR(100), Kursus VARCHAR(100));
Når du opretter Elev-tabellen, erklærer du Teacher_FK-kolonnen for at være en fremmednøgle, der refererer til kolonnen InstructorID i Teachers'-tabellen:
CREATE TABLE Studerende (StudentID INT AUTO_INCREMENT PRIMARY KEY, Student_Name VARCHAR(100), Teacher_FK INT, FOREIGN KEY (Teacher_FK) REFERENCER Lærere)(Instruktør-ID));
Brug af relationer til at deltage i tabeller
Når du har oprettet en eller flere relationer i din database, kan du udnytte deres kraft ved at bruge SQL JOIN-forespørgsler til at kombinere information fra flere tabeller. Den mest almindelige type join er en SQL INNER JOIN, som er en simpel join. Denne type join returnerer alle poster, der opfylder join-betingelsen fra en eller flere tabeller.
For eksempel returnerer denne JOIN-betingelse Student_Name, Teacher_Name og Course, hvor fremmednøglen i Elevs-tabellen matcher den primære nøgle i Teachers-tabellen:
SELECT Students. Student_Name, Teachers. Teacher_Name, Teachers. Course
FROM Students
INNER JOIN TeachersON Students. Teacher_FK=Teachers. InstructorID;
Denne erklæring producerer en tabel noget som denne:
Student_Name | Teacher_Name | Kursus |
Lowell Smith | John Doe | engelsk |
Brian Short | John Doe | engelsk |
Corky Mendez | Jane Schmoe | Math |
Monica Jones | John Doe | engelsk |