Applicaties 6 min

Wat is een databaseschema?

Kort antwoord

Een databaseschema is de structuurbeschrijving van een database: welke tabellen er zijn, welke kolommen elke tabel heeft, welk datatype elke kolom bevat en welke regels gelden (verplicht, uniek, relaties tussen tabellen). Het schema is de blauwdruk waar alle data in wordt opgeslagen. Een goed schema voorkomt dubbele data, inconsistenties en trage queries.

Een databaseschema is de blauwdruk van je database: welke tabellen bestaan, welke kolommen ze hebben en hoe alles samenhangt.

Wat een schema is en waarom het belangrijk is

Elke applicatie die data opslaat, heeft een database. En elke database heeft een schema: de formele beschrijving van wat erin zit. Zonder schema kan een database geen gestructureerde data opslaan.

Vergelijk het met een Excel-bestand: je kunt niet zomaar data invullen zonder kolommen te hebben. Het schema definieert die kolommen: naam, type, regels. Alleen is een databaseschema veel strikter dan Excel. De database dwingt het schema af en weigert data die er niet aan voldoet.

Een goed schema is de basis van elke stabiele applicatie. Meer over hoe databases werken lees je in het artikel over wat een relationele database is.

Tabellen, kolommen en datatypes

Een relationele database bestaat uit tabellen. Elke tabel slaat data op over een specifiek soort object. In een webshop heb je typisch:

  • Tabel klanten: klant_id, naam, e-mail, adres, aangemaakt_op
  • Tabel producten: product_id, naam, prijs, voorraad, categorie
  • Tabel bestellingen: bestelling_id, klant_id, datum, status, totaalbedrag
  • Tabel bestelregels: regel_id, bestelling_id, product_id, aantal, prijs_per_stuk

Elke kolom heeft een datatype: TEXT voor tekst, INTEGER voor gehele getallen, DECIMAL voor bedragen, BOOLEAN voor ja/nee-waarden, TIMESTAMP voor datum en tijd. Het datatype bepaalt hoeveel ruimte de kolom inneemt en welke bewerkingen je erop kunt uitvoeren.

Primary keys, foreign keys en relaties

Elke tabel heeft een primary key: een kolom die elke rij uniek identificeert. Meestal is dit een automatisch oplopend getal (klant_id = 1, 2, 3...) of een UUID.

Een foreign key is een kolom die verwijst naar de primary key van een andere tabel. In de tabel bestellingen verwijst klant_id naar de klanten-tabel. Zo weet de database van elke bestelling exact welke klant die heeft geplaatst, zonder dat je de klantgegevens in elke bestelling hoeft te herhalen.

De database dwingt deze relaties af: je kunt geen bestelling aanmaken met een klant_id van een klant die niet bestaat. Dit heet referentiële integriteit.

Constraints: regels die de database afdwingt

Constraints zijn regels die je in het schema definieert en die de database automatisch handhaaft:

  • NOT NULL: de kolom moet altijd een waarde hebben (een bestelling zonder datum is niet toegestaan)
  • UNIQUE: twee rijen mogen niet dezelfde waarde hebben (twee klanten mogen niet hetzelfde e-mailadres hebben)
  • CHECK: een waarde moet aan een formule voldoen (prijs moet groter zijn dan 0)
  • DEFAULT: als er geen waarde wordt opgegeven, gebruik dan deze standaardwaarde

Constraints zijn goedkoper dan applicatiecode: ze worden op databaseniveau afgedwongen, zelfs als een bug in de applicatie er omheen probeert te gaan.

Schema-ontwerp als fundament

Een slecht schema is de meest voorkomende oorzaak van problemen in applicaties die groeien. Als je klantgegevens op tien plekken herhaalt en een klant verhuist, moet je ze op tien plekken bijwerken. Als je dat op negen plekken doet, heb je inconsistente data.

Normalisatie voorkomt dit: bewaar elk gegeven op precies één plek en verwijs ernaar via foreign keys. Dat maakt de database kleiner, consistenter en makkelijker te onderhouden.

Bij het bouwen van een webapplicatie is het schema-ontwerp vaak het eerste wat we doen. Het bepaalt de structuur van alles wat daarna komt. Tools als Supabase bieden een visuele schema-editor waarmee je tabellen en relaties kunt definiëren zonder direct SQL te hoeven schrijven.

Onze tip: teken je schema altijd op papier of in een tool (dbdiagram.io is gratis) voordat je begint te bouwen. Vraag je af: welke objecten heeft mijn applicatie? Welke gegevens bewaar ik per object? Hoe hangen objecten samen? Aanpassingen aan een schema zijn eenvoudig zolang de database leeg is, maar kostbaar als er eenmaal productiedata in zit.

Veelgestelde vragen

Wat is het verschil tussen een primary key en een foreign key?

Een primary key is een kolom die elke rij in een tabel uniek identificeert. In een klantentabel is `klant_id` de primary key: geen twee klanten hebben hetzelfde ID. Een foreign key is een kolom in een andere tabel die verwijst naar die primary key. In een bestellingentabel verwijst `klant_id` als foreign key naar de klantentabel. Zo weet de database precies welke bestelling van welke klant is, zonder dat je alle klantgegevens in elke bestelling moet herhalen.

Wat is normalisatie van een database?

Normalisatie is het proces waarbij je een databaseschema zo ontwerpt dat gegevens niet onnodig worden herhaald. In plaats van in elke bestelregel de volledige naam en het adres van de klant op te slaan, bewaar je de klantgegevens eenmalig in een klantentabel en verwijst elke bestelling via een klant_id naar die klant. Dit voorkomt inconsistentie (wat als het adres op twee plekken staat maar op slechts een plek wordt bijgewerkt?) en bespaart opslagruimte. De eerste drie normaalvormen (1NF, 2NF, 3NF) dekken de meeste praktische situaties.

Wat zijn constraints in een databaseschema?

Constraints zijn regels die de database afdwingt op de data die erin wordt opgeslagen. NOT NULL betekent dat een kolom altijd een waarde moet hebben. UNIQUE betekent dat twee rijen niet dezelfde waarde mogen hebben in die kolom, handig voor e-mailadressen. CHECK laat je een formule definiëren waaraan de waarde moet voldoen, bijvoorbeeld dat een prijs altijd groter dan nul moet zijn. FOREIGN KEY dwingt af dat een verwijzing altijd naar een bestaande rij wijst. Constraints beschermen de integriteit van je data op het laagste niveau.

Wat is een ER-diagram?

Een Entity-Relationship (ER) diagram is een visuele weergave van een databaseschema. Elke tabel is een rechthoek met de kolomnamen erin. Lijnen tussen rechthoeken geven relaties aan: een klant heeft meerdere bestellingen (1 op veel), een bestelling heeft meerdere producten en een product kan in meerdere bestellingen zitten (veel op veel, via een koppeltabel). Een ER-diagram is het ontwerptekening dat je maakt voordat je de database bouwt, zodat alle betrokkenen het eens zijn over de structuur.

Hier over sparren?

Plan een vrijblijvend gesprek. We luisteren mee, schetsen een aanpak en geven een eerlijk beeld van wat haalbaar is, zonder verkoopdruk.