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">
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);

);
</code>

<run id="69830cf503466">
SELECT 
    COUNT(*) AS Anzahl_Tickets,
    Besucher_ID, 
    Vorname, Nachname
FROM Ticket
GROUP BY Besucher_ID, Vorname, Nachname
ORDER BY Anzahl_Tickets DESC;
</run>

<run id="6983111b4caa2">
SELECT 
    COUNT(*) AS Anzahl, 
    Ticket.Becken_ID, 
    Becken.Name
FROM Ticket
WHERE Ticket.Becken_ID IN (1, 2, 3)
GROUP BY Ticket.Becken_ID, Becken.Name;

</run>

<run id="6983111b4cb55">
SELECT COUNT(*) AS Anzahl_Kurse, Becken_ID, Name
FROM Kurs 
WHERE Becken_ID IN (1, 2, 3)
GROUP BY Becken_ID, Name;

</run>

<run id="6983111b4cbd5">
SELECT COUNT(*) AS Teilnehmer, Kurs_ID
FROM Besucher_Kurs 
WHERE Kurs_ID IN (1, 2, 3)
GROUP BY Kurs_ID;

</run>

<run id="6983111b4cc3f">
SELECT COUNT(*) AS Anzahl, Typ
FROM Ticket 
WHERE Typ IN ('Einzelticket', 'Familienticket', 'Tageskarte')
GROUP BY Typ;


<run id="6983111b4cca4">
SELECT COUNT(DISTINCT b.Besucher_ID) AS Besucher, k.Wochentag
FROM Besucher_Kurs bk
JOIN Kurs k ON bk.Kurs_ID = k.Kurs_ID
WHERE k.Wochentag IN ('Montag', 'Mittwoch', 'Freitag')
GROUP BY k.Wochentag;
</run>


== kritische Reflexion ==
Ich habe die Tabellen für Mitglieder, Verträge, Kurse und die Teilnahme erstellt, um alle wichtigen Informationen abzubilden. Dabei habe ich gelernt, wie wichtig eine 
klare Struktur ist, z. B. dass alle Spalten richtig vorhanden sind und die Daten konsistent bleiben. Einige Fehler, wie fehlende Spalten, fehlerbehaftete Syntax oder  
falsche Einträge haben mir gezeigt, dass man beim Planen genau arbeiten muss.
Positiv ist, dass ich Abfragen erstellen konnte, die zum Beispiel alle Kurse oder Verträge eines Mitglieds zusammenfassen. Gleichzeitig habe ich gemerkt,
dass manche Filter genau überlegt sein müssen, damit keine Mitglieder in der Abfrage fehlen.
Insgesamt hat mir das Projekt geholfen, den Umgang mit SQL und relationalen Datenbanken besser zu verstehen.


== Quellen ==
LearnSQL.de: Datenmodellierung – Schwimmverein-Beispiel
https://badeninbautzen.bbbautzen.de/roehrscheidtbad