Database Ontwerp: Evenementen Beheer
Volledig overzicht van DDL, voorbeelddata en resultaten van SQL Views
1. Relationeel Ontwerp
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.jpg | Conferentie Banner | 1 | TRUE | 1 |
| 20 | /assets/sql_header.png | SQL Logo | 1 | TRUE | 2 |
Tabel: inschrijving
| inschrijving_id | ingeschreven_op | gebruiker_id | evenement_id | inschrijving_status |
|---|---|---|---|---|
| 101 | 2025-01-10 10:45 | 500 | 1 | 1 (Bevestigd) |
| 102 | 2025-01-12 14:20 | 501 | 1 | 1 (Bevestigd) |
| 103 | 2025-01-15 09:00 | 502 | 2 | 1 (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 |
|---|---|---|---|---|---|
| 1 | Tech Conference | 200 | 200 | 0 | Volgeboekt |
| 2 | SQL Workshop | 15 | 1 | 14 | Gepland |
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 |