PMG/Kurs 1214/DB Beleg/Sebastian
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>SQL</language>
'''Pass bitte auf, dass die DB nicht zu umfangreich wird (Zeitaspekt)'''
=Ziel der Datenbank=
Diese Datenbank dient zur Strukturierung der Vereine mit ihren Abteilungen und Spielern. Die Datenbank könnte in Online-Portalen Anwendung finden, wie es auch schon beispielsweise transfermarkt.de gibt, oder sie könnte auch zur zentralen Datenverwaltung von mehreren Vereinen dienen.
=ERM=
*hier das ERM zur DB:[[Bild:14-geier-sebastian_DB-Beleg_ERM.jpg|300px]]
*und zur besseren Übersicht noch bunt:[[Bild:14-geier-sebastian_DB-Beleg_ERM_bunt.jpg|300px]]
=RM (zu erstellende Tabellen)=
*Verein ('''V_ID''', Vereinsname, Ort, Straße, Gründungsdatum, Präsident_Vorname,Präsident_Nachname, ''L_ID'')
*Mitglied ('''M_ID''', Vorname, Nachname, PLZ, Ort, Straße, Geb.-datum)
*Liga ('''L_ID''', Liganame, Ligastufe, Land)
*Spieler ('''Spieler_ID''', Vorname, Nachname, Geb.-datum, ''V_ID'')
*Abteilung ('''A_ID''', Name, Vorsitzender_Vorname, Vorsitzender_Nachname, ''Sportart_ID'')
*Sportart ('''Sportart_ID''', Name)
*Verein – Abteilung (''V_ID'', ''A_ID'')
*Verein – Mitglied (''V_ID'', ''M_ID'')
=Erläuterungen zu den Modellen=
*Normalformen
**ENF - Jede Spalte enthält nur eine Information, beispielsweise die Trennung von Vorname und Nachname bei Präsident, Vorsitzender und Mitglied. Auch Ort und Straße sind getrennte Attribute.
**ZNF - Jedes Attribut ist eindeutig einem Primärschlüssel zugeordnet, bei meiner Datenbank hat jede Entität genau einen Primärschlüssel (eine ID).
**DNF - Jedes Attribut hängt direkt vom Primärschlüssel ab, nicht von einem Nicht-Schlüssel-Feld. So sind alle Attribute von der jeweiligen ID abhängig.
*Kardinalitäten
**1:1 - bei mir nicht vorhanden
**1:n - Beispielsweise hat ein Verein mehrere Spieler, ein Spieler spielt aber nur bei einem Verein. Oder eine Liga hat mehrere Vereine, ein Verein spielt aber nur in einer Liga.
**n:m - Es hat ein Verein mehrere Abteilungen, eine Abteilungsart kann aber auch bei mehreren Vereinen vorkommen. Auch hat ein Verein mehrere Mitglieder, eine Person kann aber auch Mitglied in mehreren Vereinen sein.
*RM
**Bei einer 1:n-Beziehung wie Verein-Spieler wurde der Primärschlüssel der ersten Entität (V_ID) als Fremdschlüssel in die zweite Entität (Spieler) eingefügt.
**Bei den n:m-Beziehungen wie Mitglied-Verein wurde jeweils eine eigene Tabelle mit den Primärschlüsseln der beiden Entitäten als Fremdschlüssel erstellt.
=Datenbank=
<code id="52dcdf16795a2">
DROP TABLE IF EXISTS Verein;
CREATE TABLE Verein (
V_ID varchar(255),
Vereinsname varchar(255),
Ort varchar(255),
Straße varchar(255),
Gruendungsdatum varchar (255),
Praesident_Vorname varchar (255),
Praesident_Nachname varchar (255),
L_ID varchar (255),
PRIMARY KEY (V_ID)
);
DROP TABLE IF EXISTS Mitglied;
CREATE TABLE Mitglied (
M_ID varchar(255),
Vorname varchar(255),
Nachname varchar(255),
PLZ varchar (255),
Ort varchar(255),
Straße varchar(255),
Geburtsdatum varchar (255),
PRIMARY KEY (M_ID)
);
DROP TABLE IF EXISTS Liga;
CREATE TABLE Liga (
L_ID varchar(255),
Liganame varchar (255),
Ligastufe varchar (255),
Land varchar (255),
PRIMARY KEY (L_ID)
);
DROP TABLE IF EXISTS Spieler;
CREATE TABLE Spieler (
Spieler_ID varchar(255),
Vorname varchar(255),
Nachname varchar(255),
Geburtsdatum varchar (255),
V_ID varchar (255),
PRIMARY KEY (Spieler_ID)
);
DROP TABLE IF EXISTS Abteilung;
CREATE TABLE Abteilung (
A_ID varchar(255),
Name varchar(255),
Vorsitzender_Vorname varchar (255),
Vorsitzender_Nachname varchar (255),
Sportart_ID varchar (255),
PRIMARY KEY (A_ID)
);
DROP TABLE IF EXISTS Sportart;
CREATE TABLE Sportart (
Sportart_ID varchar(255),
Name varchar(255),
PRIMARY KEY (Sportart_ID)
);
DROP TABLE IF EXISTS VereinAbteilung;
CREATE TABLE VereinAbteilung (
V_ID varchar(255),
A_ID varchar(255),
);
DROP TABLE IF EXISTS VereinMitglied;
CREATE TABLE VereinMitglied (
V_ID varchar(255),
M_ID varchar(255),
);
INSERT INTO Verein VALUES ('150201', 'SG Dynamo Dresden e.V.', 'Dresden', 'Lennéstraße 12', '12.04.1953', 'Andreas', 'Ritter', '1502');
INSERT INTO Verein VALUES ('150202', 'FC Erzgebirge Aue e.V.', 'Aue', 'Lößnitzer Straße 95', '24.09.1949', 'Lothar', 'Lässig', '1502');
INSERT INTO Mitglied VALUES ('00000001', 'Max', 'Mustermann', '08280', 'Aue', 'Sonnenleithe 5', '29.04.1960');
INSERT INTO Mitglied VALUES ('00000002', 'Martina', 'Mustermann', '08280', 'Aue', 'Sonnenleithe 5', '03.10.1963');
INSERT INTO Liga VALUES ('1502', '2. Bundesliga', '02', 'Deutschland');
INSERT INTO Spieler VALUES ('50000001', 'Anthony', 'Losilla', '10.03.1986', '150201');
INSERT INTO Spieler VALUES ('50000002', 'Jakub', 'Sylvestr', '02.02.1989', '150202');
INSERT INTO Abteilung VALUES ('0001', 'Fußball', 'Falko', 'Götz', '0001');
INSERT INTO Abteilung VALUES ('0002', 'Fußball', 'Olaf', 'Janssen', '0001');
INSERT INTO Sportart VALUES ('0001', 'Fußball');
INSERT INTO VereinAbteilung VALUES ('150201', '0002');
INSERT INTO VereinAbteilung VALUES ('150202', '0001');
INSERT INTO VereinMitglied VALUES ('150202', '00000001');
INSERT INTO VereinMitglied VALUES ('150202', '00000002');
</code>
<run id="52dcdf1679623">
select * from Spieler;
select Vereinsname, Ort, Straße from Verein;
select Spieler.Vorname, Spieler.Nachname, Verein.Vereinsname from Spieler, Verein
where Spieler.V_ID=Verein.V_ID
order by Verein.Vereinsname asc;
select Spieler.Vorname, Spieler.Nachname, Spieler.Geburtsdatum from Spieler, Verein
where Spieler.V_ID=Verein.V_ID and Verein.Vereinsname='SG Dynamo Dresden e.V.';
select Verein.Vereinsname, Sportart.Name from Sportart, Abteilung, Verein, VereinAbteilung
where Verein.Vereinsname='SG Dynamo Dresden e.V.' and
Verein.V_ID=VereinAbteilung.V_ID and
VereinAbteilung.A_ID=Abteilung.A_ID and
Abteilung.Sportart_ID=Sportart.Sportart_ID;
select Mitglied.Vorname, Mitglied.Nachname from Mitglied, Verein, VereinMitglied
where Verein.Vereinsname='FC Erzgebirge Aue e.V.' and
Mitglied.M_ID=VereinMitglied.M_ID and
Verein.V_ID=VereinMitglied.V_ID;
</run>