De databasetermen relationeel en relatie beschrijven de manier waarop gegevens in tabellen met elkaar verbonden zijn. Een relationele database bestaat uit een reeks van twee of meer tabellen die door een specifieke sleutel zijn verbonden. Een relationele database verschilt van ongestructureerde databases, die veel voorkomen bij big data-initiatieven. Relationele databases vereisen doorgaans strikte regels over hoe tabellen worden gedefinieerd en wat een geldige relatie tussen tabellen vormt.
Soorten databaserelaties
Relaties stellen je in staat om de verbindingen tussen databasetabellen op krachtige manieren te beschrijven. Deze relaties kunnen vervolgens worden gebruikt om krachtige kruistabelquery's uit te voeren, bekend als JOINs.
Er zijn drie typen databaserelaties, elk genoemd naar het aantal tabelrijen dat bij de relatie betrokken is. Elk van deze drie relatietypes bestaat tussen twee tabellen.
- Een-op-een relaties treden op wanneer elk item in de eerste tabel slechts één tegenhanger heeft in de tweede tabel. Eén-op-één relaties worden zelden gebruikt omdat het vaak efficiënter is om alle informatie in één tabel te zetten. Sommige databaseontwerpers profiteren van deze relatie door tabellen te maken die een subset van de gegevens uit een andere tabel bevatten.
- Een-op-veel-relaties is het meest voorkomende type databaserelatie. Ze treden op wanneer elk record in Tabel A overeenkomt met een of meer records in Tabel B, maar elk record in Tabel B komt overeen met slechts één record in Tabel A. Bijvoorbeeld, de relatie tussen een tabel Docenten en een tabel Studenten in een basisschool database zou waarschijnlijk een een-op-veel-relatie zijn, omdat elke student slechts één leraar heeft, maar elke leraar heeft meerdere studenten. Dit een-op-veel-ontwerp helpt dubbele gegevens te elimineren.
- Veel-op-veel-relaties treden op wanneer elk record in tabel A overeenkomt met een of meer records in tabel B en elk record in tabel B overeenkomt met een of meer records in Tabel A. De relatie tussen een tabel Docenten en een tabel Cursussen is bijvoorbeeld waarschijnlijk veel-op-veel omdat elke docent meer dan één cursus kan instrueren en elke cursus meer dan één instructeur kan hebben.
Bottom Line
Zelfverwijzende relaties treden op wanneer er slechts één tabel bij betrokken is. Een veelvoorkomend voorbeeld is een tabel Werknemers die informatie bevat over de supervisor van elke werknemer. Elke supervisor is ook een werknemer en heeft een supervisor. In dit geval is er een een-op-veel-zelfverwijzende relatie, aangezien elke werknemer één supervisor heeft, maar elke supervisor kan meer dan één werknemer hebben.
Relaties creëren met buitenlandse sleutels
U maakt relaties tussen tabellen door een externe sleutel op te geven. Deze sleutel vertelt de relationele database hoe de tabellen gerelateerd zijn. In veel gevallen bevat een kolom in Tabel A primaire sleutels waarnaar wordt verwezen in Tabel B.
Beschouw het voorbeeld van de tabellen Docenten en Studenten. De tabel Docenten bevat een ID, een naam en een cursuskolom:
Instructeur-ID | Teacher_Name | Cursus |
001 | John Doe | Engels |
002 | Jane Schmoe | Wiskunde |
De tabel Studenten bevat een ID, naam en een externe sleutelkolom:
Student-ID | Student_Name | Teacher_FK |
0200 | Lowell Smith | 001 |
0201 | Brian Short | 001 |
0202 | Corky Mendez | 002 |
0203 | Monica Jones | 001 |
De kolom Teacher_FK in de tabel Studenten verwijst naar de primaire sleutelwaarde van een instructeur in de tabel Docenten. Vaak gebruiken databaseontwerpers PK of FK in de kolomnaam om een primaire sleutel of een externe sleutelkolom te identificeren.
Deze twee tabellen illustreren een een-op-veel-relatie tussen de docenten en de studenten.
Relaties en referentiële integriteit
Nadat u een externe sleutel aan een tabel hebt toegevoegd, maakt u een databasebeperking die de referentiële integriteit tussen de twee tabellen afdwingt. Deze stap zorgt ervoor dat relaties tussen tabellen consistent blijven. Wanneer een tabel een referentiële sleutel heeft naar een andere tabel, vereist referentiële integriteit dat elke referentiële sleutelwaarde in Tabel B moet verwijzen naar een bestaand record in Tabel A.
Relaties implementeren
Afhankelijk van uw database, implementeert u op verschillende manieren relaties tussen tabellen. Microsoft Access biedt een wizard waarmee u tabellen kunt koppelen en ook referentiële integriteit kunt afdwingen.
Als u rechtstreeks SQL schrijft, maakt u eerst de tabel Docenten, waarbij u een ID-kolom als de primaire sleutel aangeeft:
MAAK TABEL Leraren (InstructorID INT AUTO_INCREMENT PRIMARY KEY, Teacher_Name VARCHAR(100), Course VARCHAR(100));
Wanneer u de tabel Studenten maakt, declareert u de kolom Teacher_FK als een externe sleutel die verwijst naar de kolom Instructeur-ID in de tabel Docenten:
CREATE TABLE Studenten (StudentID INT AUTO_INCREMENT PRIMARY KEY, Student_Name VARCHAR(100), Teacher_FK INT, FOREIGN KEY (Teacher_FK) REFERENTIES Docenten (InstructorID)));
Relaties gebruiken om aan tabellen deel te nemen
Nadat u een of meer relaties in uw database hebt gemaakt, maakt u gebruik van hun kracht door SQL JOIN-query's te gebruiken om informatie uit meerdere tabellen te combineren. Het meest voorkomende type join is een SQL INNER JOIN, een eenvoudige join. Dit type join retourneert alle records die voldoen aan de join-voorwaarde uit een of meer tabellen.
Deze JOIN-voorwaarde retourneert bijvoorbeeld Student_Name, Teacher_Name en Course, waarbij de refererende sleutel in de tabel Studenten overeenkomt met de primaire sleutel in de tabel Docenten:
SELECT Students. Student_Name, Teachers. Teacher_Name, Teachers. Course
FROM Students
INNER JOIN TeachersON Students. Teacher_FK=Teachers. InstructorID;
Deze verklaring levert een tabel op als volgt:
Student_Name | Teacher_Name | Cursus |
Lowell Smith | John Doe | Engels |
Brian Short | John Doe | Engels |
Corky Mendez | Jane Schmoe | Wiskunde |
Monica Jones | John Doe | Engels |