Dictionary

Vreemde sleutel (foreign key)

Een vreemde sleutel is een kolom die verwijst naar de primaire sleutel van een andere tabel. Zo bewaakt de databank dat een order alleen naar een bestaande klant verwijst.

Wat is een vreemde sleutel?

Een vreemde sleutel is een kolom die naar een rij in een andere tabel verwijst. In een ordertabel staat bijvoorbeeld customer_id. Die waarde hoort overeen te komen met een bestaande klant in de klantentabel.

De primaire sleutel zegt wie een rij is. De vreemde sleutel zegt naar welke rij ergens anders je verwijst. Samen houden ze relaties tussen tabellen betrouwbaar.

Zonder vreemde sleutel kan een databank een order bewaren voor klant 999, ook als die klant niet bestaat. Met een vreemde sleutel weigert de databank die fout.

Hoe ziet dat eruit in SQL?

Een foreign key legt vast welke kolom naar welke tabel en kolom verwijst.

CREATE TABLE customers (
  customer_id integer PRIMARY KEY,
  name text NOT NULL
);

CREATE TABLE orders (
  order_id integer PRIMARY KEY,
  customer_id integer NOT NULL REFERENCES customers (customer_id),
  order_date date NOT NULL
);

Voeg je nu een order toe met een onbekende customer_id, dan stopt de databank de schrijfactie. Dat heet referentiële integriteit: verwijzingen in je data blijven kloppen.

Wanneer gebruik je een vreemde sleutel?

  • Voor relaties tussen tabellen. Orders horen bij klanten, factuurlijnen horen bij facturen, en tickets horen bij accounts.

  • Voor datakwaliteit aan de bron. Je voorkomt zwevende records die nergens meer bij horen.

  • Voor begrijpelijke datamodellen. Tools en mensen zien sneller welke tabellen bij elkaar horen.

  • Voor ETL-controles. In een data warehouse kan je controleren of elke factrij naar bestaande dimensies verwijst.

Wat gebeurt er bij verwijderen?

De lastige vraag is wat er moet gebeuren wanneer de rij waarnaar verwezen wordt verdwijnt. SQL kent daar verschillende regels voor.

CREATE TABLE orders (
  order_id integer PRIMARY KEY,
  customer_id integer NOT NULL,
  FOREIGN KEY (customer_id)
    REFERENCES customers (customer_id)
    ON DELETE RESTRICT
);

Met RESTRICT kan je een klant niet verwijderen zolang er orders naar verwijzen. Met CASCADE zouden de orders mee verdwijnen. Met SET NULL blijft de order bestaan, maar wordt de verwijzing leeg. Welke optie juist is, hangt af van het proces. Voor boekhoudkundige data is automatisch mee verwijderen vaak gevaarlijk.

Vreemde sleutel versus join

Een join is een query waarmee je tabellen samen leest. Een vreemde sleutel is een regel waarmee de databank bewaakt dat de relatie klopt. Je kan dus joinen zonder foreign key, maar dan vertrouw je erop dat de data netjes blijft.

In analytische omgevingen ontbreken foreign keys soms bewust, bijvoorbeeld omdat ze ladingen vertragen of omdat de data uit losse bestanden komt. Dan moet je dezelfde controle elders organiseren, via tests, data contracts of datakwaliteitsregels.

Waar moet je op letten bij het gebruik van een vreemde sleutel

  • Maak delete-regels expliciet. De verkeerde cascade kan veel data verwijderen. Denk dit door voor je de regel toevoegt.

  • Controleer laadvolgorde. Je kan geen orders laden voor klanten die nog niet geladen zijn.

  • Let op historische data. Een order uit 2021 moet soms blijven verwijzen naar een klantversie uit 2021, niet naar de klant zoals die vandaag is.

FAQ over vreemde sleutels

1. Is een foreign key verplicht om te joinen?
Nee. SQL kan tabellen joinen op elke kolom. De foreign key is de kwaliteitsregel die zegt dat de relatie geldig moet zijn.

2. Waarom ontbreken foreign keys soms in een data warehouse?
Omdat analytische systemen vaak snelheid, bulk loads en flexibele modellering voorrang geven. De controle verschuift dan naar tests en monitoring.

3. Kan een vreemde sleutel naar meerdere kolommen verwijzen?
Ja. Als de doelrij een samengestelde primaire sleutel heeft, moet de foreign key dezelfde combinatie gebruiken.

Laatst Bijgewerkt: July 9, 2026 Terug naar Woordenboek
Trefwoorden
vreemde sleutel foreign key primaire sleutel sql datakwaliteit data warehouse relationele database referentiële integriteit