Database Model: Bestellingen
Studiestof: Entiteiten, Relaties en SQL Structuur
1. Overzicht van het model
2. DDL – Tabellen & Views maken
Tabel: bestelling
SQL
CREATE TABLE bestelling (
bestelling_id INT AUTO_INCREMENT PRIMARY KEY,
besteld_op DATETIME DEFAULT CURRENT_TIMESTAMP,
totaal_bedrag DECIMAL(10,2) NOT NULL,
gebruiker_id INT,
bestelling_status_id INT,
betaalmethode_id INT,
betaling_status_id INT
);
Tabel: bestelregel
SQL
CREATE TABLE bestelregel (
bestelling_id INT,
product_id INT,
aantal INT NOT NULL,
prijs_per_stuk DECIMAL(10,2) NOT NULL,
PRIMARY KEY (bestelling_id, product_id),
FOREIGN KEY (bestelling_id) REFERENCES bestelling(bestelling_id),
FOREIGN KEY (product_id) REFERENCES product(product_id)
);
View: v_order_detail
SQL
CREATE VIEW v_order_detail AS
SELECT
b.bestelling_id,
b.besteld_op,
p.naam AS product_naam,
br.aantal,
br.prijs_per_stuk,
(br.aantal * br.prijs_per_stuk) AS subtotal
FROM bestelling b
JOIN bestelregel br ON b.bestelling_id = br.bestelling_id
JOIN product p ON br.product_id = p.product_id;
3. Praktijkvoorbeeld
Hieronder zie je hoe data wordt opgeslagen. Let op dat kolomnamen exact overeenkomen met de DDL.
Tabel: bestelling
| bestelling_id | besteld_op | totaal_bedrag | gebruiker_id |
|---|---|---|---|
| 1 | 2025-01-10 14:30 | 49.97 | 105 |
Tabel: bestelregel
| bestelling_id | product_id | aantal | prijs_per_stuk |
|---|---|---|---|
| 1 | 5 | 2 | 19.99 |
| 1 | 12 | 1 | 9.99 |
4. Werken met de View
Een View verbergt de complexiteit van JOINS. Je kunt deze bevragen alsof het een normale tabel is:
SQL
SELECT * FROM v_order_detail WHERE bestelling_id = 1;
5. Waarom dit model werkt
- Historische Prijs: Door
prijs_per_stukin de bestelregel op te slaan, blijft de prijs van een order gelijk, ook als het product later duurder wordt in de webshop. - Lookup Tabellen: Statussen en betaalmethoden worden apart beheerd via IDs. Dit voorkomt typefouten en maakt wijzigingen (bijv. "Creditcard" naar "Mastercard") makkelijk.
- Schaalbaarheid: Door de koppeltabel kan een bestelling oneindig veel verschillende producten bevatten zonder dat de tabelstructuur hoeft te veranderen.
6. Toets Checklist
- Wat is de functie van de
PRIMARY KEYin debestelregeltabel? - Waarom is
DECIMAL(10,2)beter voor prijzen danFLOAT? - Kun je uitleggen waarom de klant-ID (
gebruiker_id) in de tabelbestellingstaat en niet inbestelregel? - Wat gebeurt er met de dagplanning als je een
JOINvergeet tussenbestellingenbestelregel?
7. De Kern
Bestelling (De Order) ↔ Bestelregel (De Regels) ↔ Product (De Voorraad)
Dit model vormt het fundament voor vrijwel elke e-commerce database ter wereld.