Database Model: Reserveringen

Volledig technisch ontwerp van de tabellen, onderlinge relaties en gegevensstructuur

1. Overzicht van het model

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

De tabel reservering_tafel vormt de koppeling tussen reservering en tafel. Dit is een klassiek voorbeeld van een Many-to-Many relatie.

2. DDL – Tabeldefinities (SQL)

A. Tabel: reservering

SQL
CREATE TABLE reservering (
    reservering_id INT AUTO_INCREMENT PRIMARY KEY,
    naam VARCHAR(255) NOT NULL,
    totaal_personen INT NOT NULL,
    start_datumtijd DATETIME NOT NULL,
    eind_datumtijd DATETIME NOT NULL,
    email VARCHAR(255),
    telefoon VARCHAR(20),
    gereserveerd_op TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

B. Tabel: tafel

SQL
CREATE TABLE tafel (
    tafel_id INT AUTO_INCREMENT PRIMARY KEY,
    nummer INT NOT NULL UNIQUE,
    capaciteit INT NOT NULL,
    omschrijving TEXT
);

C. Tabel: reservering_tafel

SQL
CREATE TABLE reservering_tafel (
    reservering_id INT,
    tafel_id INT,
    bezetting_per_tafel INT,
    
    PRIMARY KEY (reservering_id, tafel_id),
    FOREIGN KEY (reservering_id) REFERENCES reservering(reservering_id) ON DELETE CASCADE,
    FOREIGN KEY (tafel_id) REFERENCES tafel(tafel_id)
);

3. Voorbeeld Data

Tabel: reservering

reservering_id naam totaal_personen start_datumtijd eind_datumtijd
50 Bakker 10 2025-12-24 18:00:00 2025-12-24 21:00:00

Tabel: tafel

tafel_id nummer capaciteit
114
224
332

Tabel: reservering_tafel

reservering_id tafel_id bezetting_per_tafel
5014
5024
5032

4. De VIEW: Virtuele Tabel

SQL
CREATE VIEW v_reservering_overzicht AS
SELECT 
    r.naam,
    r.start_datumtijd,
    r.totaal_personen,
    t.nummer AS tafel_nummer,
    rt.bezetting_per_tafel,
    t.capaciteit
FROM reservering r
JOIN reservering_tafel rt ON r.reservering_id = rt.reservering_id
JOIN tafel t ON rt.tafel_id = t.tafel_id;

Resultaat van de View (v_reservering_overzicht)

Output bij SELECT * FROM v_reservering_overzicht;:

naam start_datumtijd totaal_personen tafel_nummer bezetting_per_tafel capaciteit
Bakker 2025-12-24 18:00 10 1 4 4
Bakker 2025-12-24 18:00 10 2 4 4
Bakker 2025-12-24 18:00 10 3 2 2

5. Toets Voorbereiding

  • Foreign Keys: reservering_id en tafel_id verbinden de koppeltabel met de hoofdgegevens.
  • On Delete Cascade: Verwijdert koppelingen automatisch als een klant annuleert.
  • Composite Key: De PK van reservering_tafel is de combinatie van (reservering_id, tafel_id).