Database Ontwerp: Evenementen Beheer

Volledig overzicht van DDL, voorbeelddata en resultaten van SQL Views

1. Relationeel Ontwerp

Het model maakt gebruik van een intersectie-tabel om de N:M relatie tussen gebruikers en evenementen op te lossen. Alle entiteiten zijn genormaliseerd naar de 3e normaalvorm.

2. DDL – SQL Definities

SQL
-- Statustabellen
CREATE TABLE evenement_status (
    evenement_status_id INT AUTO_INCREMENT PRIMARY KEY,
    naam VARCHAR(50) NOT NULL
);

CREATE TABLE inschrijving_status (
    inschrijving_status_id INT AUTO_INCREMENT PRIMARY KEY,
    naam VARCHAR(50) NOT NULL
);

-- Hoofdentiteiten
CREATE TABLE evenement (
    evenement_id INT AUTO_INCREMENT PRIMARY KEY,
    naam VARCHAR(100) NOT NULL,
    beschrijving TEXT,
    start_datumtijd DATETIME NOT NULL,
    eind_datumtijd DATETIME NOT NULL,
    max_deelnemers INT NOT NULL DEFAULT 0,
    evenement_status INT,
    FOREIGN KEY (evenement_status) REFERENCES evenement_status(evenement_status_id)
);

CREATE TABLE evenement_afbeelding (
    evenement_afbeelding_id INT AUTO_INCREMENT PRIMARY KEY,
    bestand_pad VARCHAR(255) NOT NULL,
    alt_tekst VARCHAR(255),
    volgorde INT DEFAULT 0,
    is_hoofd BOOLEAN DEFAULT FALSE,
    evenement_id INT,
    FOREIGN KEY (evenement_id) REFERENCES evenement(evenement_id) ON DELETE CASCADE
);

CREATE TABLE inschrijving (
    inschrijving_id INT AUTO_INCREMENT PRIMARY KEY,
    ingeschreven_op DATETIME DEFAULT CURRENT_TIMESTAMP,
    gebruiker_id INT NOT NULL,
    evenement_id INT NOT NULL,
    inschrijving_status INT NOT NULL,
    FOREIGN KEY (evenement_id) REFERENCES evenement(evenement_id) ON DELETE CASCADE,
    FOREIGN KEY (inschrijving_status) REFERENCES inschrijving_status(inschrijving_status_id)
);

3. Realistische Gegevens

Tabel: evenement

evenement_id naam beschrijving start_datumtijd eind_datumtijd max_deelnemers evenement_status
1 Tech Conference Jaarlijkse conferentie over cloud computing. 2025-06-12 09:00 2025-06-12 17:00 200 2 (Volgeboekt)
2 SQL Workshop Interactieve sessie over joins en views. 2025-03-20 13:00 2025-03-20 16:00 15 1 (Gepland)

Tabel: evenement_afbeelding

afbeelding_id bestand_pad alt_tekst volgorde is_hoofd evenement_id
10/assets/tech_main.jpgConferentie Banner1TRUE1
20/assets/sql_header.pngSQL Logo1TRUE2

Tabel: inschrijving

inschrijving_id ingeschreven_op gebruiker_id evenement_id inschrijving_status
1012025-01-10 10:4550011 (Bevestigd)
1022025-01-12 14:2050111 (Bevestigd)
1032025-01-15 09:0050221 (Bevestigd)

4. Analytische Views & Resultaten

View A: v_evenement_bezetting

SQL
CREATE VIEW v_evenement_bezetting AS
SELECT 
    e.evenement_id,
    e.naam AS titel,
    e.max_deelnemers,
    COUNT(i.inschrijving_id) AS totaal_inschrijvingen,
    (e.max_deelnemers - COUNT(i.inschrijving_id)) AS beschikbare_plaatsen,
    es.naam AS huidige_status
FROM evenement e
LEFT JOIN inschrijving i ON e.evenement_id = i.evenement_id AND i.inschrijving_status = 1
JOIN evenement_status es ON e.evenement_status = es.evenement_status_id
GROUP BY e.evenement_id, e.naam, e.max_deelnemers, es.naam;
Resultaat van v_evenement_bezetting
evenement_id titel max_deelnemers totaal_inschrijvingen beschikbare_plaatsen huidige_status
1Tech Conference2002000Volgeboekt
2SQL Workshop15114Gepland

View B: v_event_media_overzicht

SQL
CREATE VIEW v_event_media_overzicht AS
SELECT 
    e.naam AS evenement_naam,
    ea.bestand_pad AS thumbnail,
    ea.alt_tekst,
    e.start_datumtijd
FROM evenement e
JOIN evenement_afbeelding ea ON e.evenement_id = ea.evenement_id
WHERE ea.is_hoofd = TRUE;
Resultaat van v_event_media_overzicht
evenement_naam thumbnail alt_tekst start_datumtijd
Tech Conference /assets/tech_main.jpg Conferentie Banner 2025-06-12 09:00
SQL Workshop /assets/sql_header.png SQL Logo 2025-03-20 13:00