PMG2426 4/DB Beleg/Nelly
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>SQL</language>
= Datenbank - Fitnessstudio =
<font size=4>'''Erstellen und Modellieren von meinem Datenbankprojekt'''</font>
=Ziel der Datenbank=
Diese Datenbank dient zur Strukturierung und Verwaltung der Daten eines Fitnessstudios, indem Mitglieder, deren Verträge sowie angebotene Kurse übersichtlich erfasst und miteinander verknüpft werden. Zusätzlich ermöglicht sie durch die Teilnahme Tabelle die Dokumentation, welche Mitglieder an welchen Kursen teilnehmen und unterstützt so Auswertungen und organisatorische Prozesse.
=Modellierung in einem ERM=
[[Bild:Nels_Screenshot_2026-01-26_105952.jpg]]
=Transformation in das Relationenmodell (= die zu erstellende Tabellen)=
*Mitglied ('''Mitglied_ID''', Vorname, Nachname, Geschlecht, Ort, Straße, Status)
*Vertrag ('''Vertrag_ID''', Startdatum, Enddatum, Laufzeit, Monatsbeitrag, ''Mitglied_ID'' )
*Kurs ('''Kurs_ID''', Kursname, Trainername, Raum, Wochentag, Uhrzeit)
*Teilnahme(''Mitglied_ID'', ''Kurs_ID'')
=Erläuterungen des Datenbank-Modells=
#<font color=#104E8>'''Entitäten:''' </font>
#*Mitglied: angemeldete Personen im Fitnessstudio
#*Vertrag: abgeschlossene Mitgliedsverträge (z.B Bronze, Silber, Gold)
#*Kurs: angebotene Fitnesskurse des Studios
#<font color=#104E8>'''Attribute:''' </font>
#*beschreiben die Eigenschaften einer Entität
#*Mitglied:lle persönlichen und organisatorischen Informationen
#*Vertrag: Vertragsdaten eines Mitglieds, wie Laufzeit oder monatilicher Beitrag
#*Kurs: Angaben wie Kursname, Trainer oder Termin
#<font color=#104E8>'''Primär- und Fremdschlüssel''' </font>
#*Primärschlüssel identifizieren den Datensatz eindeutig (z.B Mitglied_ID)
#*Mitglied_ID ist im Vertrag als Fremdschlüssel enthalten, um den Vertrag einem Mitglied zuzuordnen
#<font color=#104E8>'''Beziehungen und Kardinalitäten''' </font>
#*Eine Beziehung beschreibt wie Entitäten miteinander verknüpft sind
#*Kardinalitäten geben an, wie viele Entitäten an der Beziehung beteiligt sind
#*Zwischen Mitglied und Vertrag besteht eine 1:n Beziehung, da ein Mitglied im Laufe der Zeit mehrere Verträge besitzen kann (Gold, Silber, Bronze = Vertragsart) aber ein Vertrag nur einem Mitglied zugeordnet ist
#*Zwischen Mitglied und Kurs eine n:m Beziehung, da ein Mitglied mehrere Kurse besuchen kann und ein Kurs von mehreren Mitgliedern besucht wird
#*die n:m Beziehung wird in einer dritten Tabelle ufgelößt, wodurch die Datenbank übersichtlich, redundantfrei und erweiterbar bleibt
=Datenbank=
<code id="52dcdf16795a2">
DROP TABLE IF EXISTS Mitglied;
CREATE TABLE Mitglied (
Mitglied_ID varchar(255),
Vorname varchar(255),
Nachname varchar(255),
Geschlecht varchar (255),
Ort varchar(255),
Straße varchar(255),
Status varchar (255),
PRIMARY KEY (Mitglied_ID)
);
DROP TABLE IF EXISTS Vertrag;
CREATE TABLE Vertrag (
Vertrag_ID varchar(255),
Vertragsart varchar(255),
Laufzeit varchar(255),
Monatsbeitrag varchar (255),
Startdatum varchar(255),
Enddatum varchar(255),
Mitglied_ID varchar (255),
PRIMARY KEY (Vertrag_ID)
);
DROP TABLE IF EXISTS Kurs;
CREATE TABLE Kurs (
Kurs_ID varchar(255),
Kursname varchar(255),
Trainername varchar(255),
Raum varchar (255),
Wochentag varchar(255),
Uhrzeit varchar(255),
PRIMARY KEY (Kurs_ID)
);
DROP TABLE IF EXISTS Teilnahme;
CREATE TABLE Teilnahme (
Teilnahme_ID varchar(255),
Mitglied_ID varchar(255),
Kurs_ID varchar(255),
Status varchar(255),
PRIMARY KEY (Teilnahme_ID)
);
INSERT INTO Mitglied VALUES ('M001', 'Anna', 'Schneider', '10115', 'Berlin', 'Hauptstraße 12', '1995-04-18');
INSERT INTO Mitglied VALUES ('M002', 'Max', 'Müller', '80331', 'München', 'Bahnhofstraße 5', '1990-09-02');
INSERT INTO Mitglied VALUES ('M003', 'Laura', 'Weber', '50667', 'Köln', 'Domstraße 20', '1998-12-11');
INSERT INTO Mitglied VALUES ('M004', 'Tim', 'Becker', '20095', 'Hamburg', 'Elbweg 7', '1987-06-30');
INSERT INTO Mitglied VALUES ('M005', 'Sophie', 'Hoffmann', '70173', 'Stuttgart', 'Parkallee 3', '2001-01-25');
INSERT INTO Vertrag VALUES ('V001', 'Bronze', '12 Monate', '29.99', '2024-01-01', '2024-12-31', 'M001');
INSERT INTO Vertrag VALUES ('V002', 'Silber', '12 Monate', '39.99', '2024-01-01', '2024-12-31', 'M001');
INSERT INTO Vertrag VALUES ('V003', 'Gold', '24 Monate', '49.99', '2023-01-01', '2024-12-31', 'M002');
INSERT INTO Vertrag VALUES ('V004', 'Bronze', '6 Monate', '29.99', '2024-03-01', '2024-08-31', 'M003');
INSERT INTO Vertrag VALUES ('V005', 'Silber', '12 Monate', '39.99', '2024-09-01', '2025-08-31', 'M003');
INSERT INTO Vertrag VALUES ('V006', 'Gold', '12 Monate', '49.99', '2024-02-01', '2025-01-31', 'M004');
INSERT INTO Vertrag VALUES ('V007', 'Bronze', '12 Monate', '29.99', '2024-04-01', '2025-03-31', 'M005');
INSERT INTO Vertrag VALUES ('V008', 'Gold', '24 Monate', '49.99', '2024-04-01', '2026-03-31', 'M005');
INSERT INTO Kurs VALUES ('K001', 'Yoga', 'Anna Meier', 'Raum A', 'Montag', '18:00');
INSERT INTO Kurs VALUES ('K002', 'Spinning', 'Tom Schulz', 'Raum B', 'Dienstag', '19:00');
INSERT INTO Kurs VALUES ('K003', 'Pilates', 'Laura König', 'Raum C', 'Mittwoch', '17:00');
INSERT INTO Kurs VALUES ('K004', 'Krafttraining', 'Markus Braun', 'Raum D', 'Donnerstag', '20:00');
INSERT INTO Teilnahme VALUES ('T001', 'M001', 'K001', 'aktiv');
INSERT INTO Teilnahme VALUES ('T002', 'M001', 'K002', 'aktiv');
INSERT INTO Teilnahme VALUES ('T003', 'M001', 'K003', 'aktiv');
INSERT INTO Teilnahme VALUES ('T004', 'M002', 'K001', 'aktiv');
INSERT INTO Teilnahme VALUES ('T005', 'M002', 'K004', 'aktiv');
INSERT INTO Teilnahme VALUES ('T006', 'M003', 'K002', 'aktiv');
INSERT INTO Teilnahme VALUES ('T007', 'M003', 'K003', 'aktiv');
INSERT INTO Teilnahme VALUES ('T008', 'M003', 'K004', 'aktiv');
INSERT INTO Teilnahme VALUES ('T009', 'M004', 'K001', 'aktiv');
INSERT INTO Teilnahme VALUES ('T010', 'M004', 'K003', 'aktiv');
INSERT INTO Teilnahme VALUES ('T011', 'M005', 'K001', 'aktiv');
INSERT INTO Teilnahme VALUES ('T012', 'M005', 'K002', 'aktiv');
INSERT INTO Teilnahme VALUES ('T013', 'M005', 'K004', 'aktiv');
</code>
=Abfragen=
Ausgabe aller Mitglieder mit Vorname und Nachname
<run id="52f89f4ff177a">
SELECT Vorname, Nachname
FROM Mitglied;
</run>
Ausgabe aller Fitnesskurse und deren Trainer
<run id="52f89f4ff1818">
SELECT Kursname, Trainername
FROM Kurs;
</run>
Ausgabe aller Vertragsarten mit Monatsbeitrag
<run id="52f89f4ff18b8">
SELECT DISTINCT Vertragsart, Monatsbeitrag
FROM Vertrag;
</run>
Ausgabe der Mitglieder und ihrer Vertragsarten
<run id="52f89f4ff193f">
SELECT
Mitglied.Vorname,
Mitglied.Nachname,
GROUP_CONCAT(Vertrag.Vertragsart) AS Vertragsarten
FROM Mitglied
JOIN Vertrag
ON Mitglied.Mitglied_ID = Vertrag.Mitglied_ID
GROUP BY Mitglied.Mitglied_ID, Mitglied.Vorname, Mitglied.Nachname;
</run>
Ausgabe der Teilnehmer des Yogakurses
<run id="52f89f4ff19c5">
SELECT
Mitglied.Vorname,
Mitglied.Nachname,
Kurs.Kursname,
Teilnahme.Status
FROM Mitglied
JOIN Teilnahme ON Mitglied.Mitglied_ID = Teilnahme.Mitglied_ID
JOIN Kurs ON Teilnahme.Kurs_ID = Kurs.Kurs_ID
WHERE Kurs.Kursname = 'Yoga';
</run>
Ausgabe der Anzahl der Kurse pro Mitglied
<run id="52f89f4ff1a53">
SELECT Mitglied.Vorname, Mitglied.Nachname, COUNT(Teilnahme.Kurs_ID) AS Anzahl_Kurse
FROM Mitglied
JOIN Teilnahme ON Mitglied.M_ID = Teilnahme.Mitglied_ID
GROUP BY Mitglied.M_ID, Mitglied.Vorname, Mitglied.Nachname
HAVING COUNT(Teilnahme.Kurs_ID) > 1;
</run>
Ausgabe der Mitglieder die mehr als einen Vertrag besitzen
<run id="52f89f4ff1b43">
SELECT Mitglied.Vorname, Mitglied.Nachname, COUNT(DISTINCT Vertrag.Vertragsart) AS Anzahl_Vertragsarten
FROM Mitglied
JOIN Vertrag ON Mitglied.M_ID = Vertrag.Mitglied_ID
GROUP BY Mitglied.M_ID, Mitglied.Vorname, Mitglied.Nachname
HAVING COUNT(DISTINCT Vertrag.Vertragsart) >= 2;
</run>