Database Model: Bestellingen

Studiestof: Entiteiten, Relaties en SQL Structuur

1. Overzicht van het model

Onderstaand diagram toont de visuele opbouw van de centrale tabel bestelling en de omliggende relaties. Klik op de afbeelding om deze te vergroten:

De tabel bestelregel vormt de koppeling tussen bestelling en product. Dit is een klassiek voorbeeld van een Many-to-Many relatie.

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_stuk in 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

  1. Wat is de functie van de PRIMARY KEY in de bestelregel tabel?
  2. Waarom is DECIMAL(10,2) beter voor prijzen dan FLOAT?
  3. Kun je uitleggen waarom de klant-ID (gebruiker_id) in de tabel bestelling staat en niet in bestelregel?
  4. Wat gebeurt er met de dagplanning als je een JOIN vergeet tussen bestelling en bestelregel?

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.