PMG2426 1/DB Beleg/Luis

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>SQL</language>
== Ziel der Datenbank ==

Die Datenbank dient der Verwaltung eines Schwimmbades, und besteht aus den Entitäten '''Besucher''', '''Ticket''', '''Kurs''', '''Becken'''. In der Entität '''Besucher''', werden die persönlichen Daten der Schwimmbadbesucher gespeichert. Ein '''Besucher''' kann mehrere '''Tickets''' kaufen, ein '''Ticket''' gehört jedoch immer nur zu einem '''Besucher'''. Demzufolge herrscht zwischen '''Besucher''' und '''Ticket''' eine 1:n-Beziehung. '''Besucher''' können an verschiedenen '''Kursen''' teilnehmen und ein '''Kurs''' kann von verschiedenen''' Besuchern''' besucht werden. Diese 1:n-Beziehung wird über die Teilnahme abgebildet Jeder Kurs findet in einem ''' Becken''' statt, während ein '''Becken''' für mehrere '''Kurse''' genutzt werden kann. Dadurch entsteht zwischen '''Kurs''' und ''' Becken''' eine 1:n-Beziehung.


[[Bild:Luisp._Screenshot_2026-01-28_at_10-26-47_ERDPlus.png]]


== Transformation in das Relationenmodell ==

BESUCHER ( Besucher-ID, , Vorname, Nachname, Geburtsdatum, Email-Adresse)

TICKET (Ticket-ID, Kaufdatum, Preis, Typ (Einzelticket, Familienticket))

KURS ( Kurs-ID, Bezeichnung, Niveau, Uhrzeit, Wochentag)

BECKEN ( Becken_ID, Name, Innen/Außen, Tiefe, Art von Becken)


<code id="69830ab76d669"></code>
INSERT INTO Besucher (Besucher_ID, Vorname, Nachname, Geburtsdatum, Email_Adresse) VALUES
(1, 'Anna',  'Schmidt',  '1995-04-12', 'anna.schmidt@example.com'),
(2, 'Lukas', 'Meyer',    '1988-11-03', 'lukas.meyer@example.com'),
(3, 'Sara',  'Klein',    '2002-07-25', 'sara.klein@example.com'),
(4, 'Jonas', 'Fischer',  '1990-01-18', 'jonas.fischer@example.com');


INSERT INTO Becken (Becken_ID, Name, Innen_Aussen, Tiefe, Art_von_Becken) VALUES
(1, 'Sportbecken',   'Innen', 1.80, 'Schwimmerbecken'),
(2, 'Lehrschwimmbecken', 'Innen', 1.20, 'Nichtschwimmerbecken'),
(3, 'Außenbecken',   'Außen', 2.00, 'Freizeitbecken');


INSERT INTO Kurs (Kurs_ID, Bezeichnung, Niveau, Uhrzeit, Wochentag, Becken_ID) VALUES
(1, 'Anfängerschwimmen',   'Anfänger', '16:00:00', 'Montag',    2),
(2, 'Fortgeschrittenen­kurs', 'Mittel',   '18:00:00', 'Mittwoch',  1),
(3, 'Aqua-Fitness',        'Offen',   '19:30:00', 'Freitag',   3);


INSERT INTO Ticket (Ticket_ID, Kaufdatum, Preis, Typ, Besucher_ID) VALUES
(1, '2026-02-01', 4.50,  'Einzelticket',    1),
(2, '2026-02-01', 12.00, 'Familienticket',  2),
(3, '2026-02-02', 4.50,  'Einzelticket',    3),
(4, '2026-02-03', 8.00,  'Tageskarte',      4);

);


<run id="69830cf503466">
-- Alle Besucher
SELECT * FROM Besucher;

-- Alle Kurse mit zugehörigem Becken
SELECT k.*, b.Name AS Beckenname
FROM Kurs k
JOIN Becken b ON k.Becken_ID = b.Becken_ID;

-- Alle Tickets mit Besucher
SELECT t.*, v.Vorname, v.Nachname
FROM Ticket t
JOIN Besucher v ON t.Besucher_ID = v.Besucher_ID;


-- Alle Kurse am Montag
SELECT * FROM Kurs
WHERE Wochentag = 'Montag';

-- Alle Besucher, die nach 2000 geboren sind
SELECT * FROM Besucher
WHERE Geburtsdatum >= '2000-01-01';

-- Alle Tickets teurer als 5 Euro
SELECT * FROM Ticket
WHERE Preis > 5.00;


-- Alle Kurse, an denen eine bestimmte Besucherin teilnimmt (z.B. Anna Schmidt)
SELECT v.Vorname, v.Nachname, k.Bezeichnung, k.Wochentag, k.Uhrzeit
FROM Besucher v
JOIN Besucher_Kurs bk ON v.Besucher_ID = bk.Besucher_ID
JOIN Kurs k          ON bk.Kurs_ID = k.Kurs_ID
WHERE v.Vorname = 'Anna' AND v.Nachname = 'Schmidt';


-- Alle Teilnehmer eines bestimmten Kurses (z.B. Anfängerschwimmen)
SELECT k.Bezeichnung, v.Vorname, v.Nachname
FROM Kurs k
JOIN Besucher_Kurs bk ON k.Kurs_ID = bk.Kurs_ID
JOIN Besucher v       ON bk.Besucher_ID = v.Besucher_ID
WHERE k.Bezeichnung = 'Anfängerschwimmen';


-- Wie viele Tickets hat jeder Besucher gekauft?
SELECT v.Besucher_ID, v.Vorname, v.Nachname,
       COUNT(t.Ticket_ID) AS Anzahl_Tickets
FROM Besucher v
LEFT JOIN Ticket t ON v.Besucher_ID = t.Besucher_ID
GROUP BY v.Besucher_ID, v.Vorname, v.Nachname;


-- Wie viele Teilnehmer pro Kurs (bei n:m‑Tabelle)
SELECT k.Kurs_ID, k.Bezeichnung,
       COUNT(bk.Besucher_ID) AS Teilnehmerzahl
FROM Kurs k
LEFT JOIN Besucher_Kurs bk ON k.Kurs_ID = bk.Kurs_ID
GROUP BY k.Kurs_ID, k.Bezeichnung;

</run>