Junior
Hoe worden de relaties tussen tabellen in relationele databases ingesteld?
sobes.tech AI
Antwoord van AI
In relationele databases worden de relaties tussen tabellen geconfigureerd met behulp van foreign keys (buitenlandse sleutels).
Een foreign key is een kolom of een set kolommen in een tabel die verwijst naar de primaire sleutel (Primary Key) van een andere tabel. Het legt een logische relatie tussen de records in twee tabellen.
Bij het instellen van de relatie:
- Wordt de primaire sleutel gedefinieerd in de "ouder" (Parent) tabel. De primaire sleutel identificeert elke record uniek.
- In de "kinder" (Child) tabel wordt een kolom (of set kolommen) gemaakt die dient als foreign key.
- Deze kolom in de "kinder" tabel wordt gekoppeld aan de primaire sleutel van de "ouder" tabel.
- Er worden dataintegriteitsbeperkingen (Constraint) ingesteld:
- REFERENCES: Geeft aan naar welke tabel en kolom (primaire sleutel) de foreign key verwijst.
- ON UPDATE behavior: Bepaalt wat er gebeurt met de records in de kindertabel wanneer de primaire sleutel in de oudertabel wordt gewijzigd. De opties zijn:
CASCADE: Wijzigingen worden cascade toegepast op de records in de kindertabel.SET NULL: De waarden van de foreign key in de kindertabel worden op NULL gezet.RESTRICT: De wijziging wordt verboden als er gerelateerde records bestaan.NO ACTION: Vergelijkbaar met RESTRICT in de meeste DBMS.SET DEFAULT: De waarden van de foreign key worden ingesteld op de standaardwaarde.
- ON DELETE behavior: Bepaalt wat er gebeurt met de records in de kindertabel wanneer records in de oudertabel worden verwijderd. De opties zijn dezelfde als voor
ON UPDATE.
Voorbeeld van SQL-syntaxis voor het maken van een relatie:
CREATE TABLE Customers (
customer_id INT PRIMARY KEY, -- Primaire sleutel in de tabel Customer
customer_name VARCHAR(255)
);
CREATE TABLE Orders (
order_id INT PRIMARY KEY,
customer_id INT, -- Foreign key die verwijst naar customer_id in de tabel Customers
order_date DATE,
FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
ON UPDATE CASCADE -- Bij wijziging van customer_id in Customers wordt ook in Orders bijgewerkt
ON DELETE CASCADE -- Bij verwijderen van een Customer worden ook de gerelateerde Orders verwijderd
);
Soorten relaties tussen tabellen:
| Relatietype | Beschrijving | Voorbeeld |
|---|---|---|
| One-to-One (1:1) | Eén record in de eerste tabel komt overeen met precies één record in de tweede tabel en vice versa. Zeldzaam in relationele databases. | Gebruiker en zijn profiel. |
| One-to-Many (1:N) | Eén record in de eerste tabel komt overeen met meerdere records in de tweede, maar elk record in de tweede komt slechts overeen met één in de eerste. | Klant en zijn bestellingen. |
| Many-to-Many (N:M) | Meerdere records in de eerste tabel komen overeen met meerdere records in de tweede, en vice versa. Wordt gerealiseerd via een tussentabel (koppeltabel). | Producten en categorieën. |
Voor de Many-to-Many-relatie wordt een derde tabel gemaakt die foreign keys bevat naar beide te relateren tabellen.
CREATE TABLE Products (
product_id INT PRIMARY KEY,
product_name VARCHAR(255)
);
CREATE TABLE Categories (
category_id INT PRIMARY KEY,
category_name VARCHAR(255)
);
CREATE TABLE ProductCategories ( -- Koppeltabel
product_id INT,
category_id INT,
PRIMARY KEY (product_id, category_id), -- Samengestelde primaire sleutel
FOREIGN KEY (product_id) REFERENCES Products(product_id),
FOREIGN KEY (category_id) REFERENCES Categories(category_id)
);