PMG2426 4/DB Beleg/Nelly
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>SQL</language>
=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.
=ERM=
[[Bild:Nels_Screenshot_2026-01-26_105952.jpg]]
Erläuterung zur Datenbank: Die Datenbank besteht aus den 3 Entitäten, Mitglied, Vertrag und Kurs. Die Entität Mitglied speichert alle persönlichen und organisatorischen Informationen der Fitnessstudio-Mitglieder. Die Entität Vertrag enthält die Vertragsdaten eines Mitglieds, wie Laufzeit oder monatilicher Beitrag. 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.
Die Entität Kurs beschreibt die im Fitnessstudio angebotenen Kurse mit Angaben wie Kursname, Trainer oder Termin. Da ein Mitglied mehrere Kurse besuchen kann und ein Kurs von mehreren Mitgliedern besucht wird, besteht zwischen Mitglied und Kurs eine n:m Beziehung. Diese wird durch die Zusatztabelle Teilnahme aufgelößt, welche zusätzlich Informationen wie Teilnahmestatus speichert. Durch die Ergänzung von Teilnahme wird die n:m Beziehung aufgelößt, wodurch die Datenbank übersichtlich, redundantfrei und erweiterbar bleibt.
=RM (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 wichtiger Begriffe=
=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 (
Mitglied_ID varchar(255),
Kurs_ID varchar(255),
);
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>
SELECT Kursname, Trainername
FROM Kurs;
SELECT Vertragsart, Monatsbeitrag
FROM Vertrag;
SELECT Mitglied.Vorname, Mitglied.Nachname, Vertrag.Vertragsart
FROM Mitglied
JOIN Vertrag ON Mitglied.M_ID = Vertrag.Mitglied_ID;
SELECT Mitglied.Vorname, Mitglied.Nachname
FROM Mitglied
JOIN Teilnahme ON Mitglied.M_ID = Teilnahme.Mitglied_ID
JOIN Kurs ON Teilnahme.Kurs_ID = Kurs.Kurs_ID
WHERE Kurs.Kursname = 'Yoga';
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;
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;