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 Mitglied VALUES ('00000003', 'Franz', 'Habicht', '12345', 'Radeberg', 'Straße 1', '09.06.1955');
INSERT INTO Mitglied VALUES ('00000004', 'David', 'Brend', '54321', 'Dresden', 'Unter der Brücke 5', '23.01.1993');

INSERT INTO Liga VALUES ('1502', '2. Bundesliga', '02', 'Deutschland');
INSERT INTO Liga VALUES ('1501', '1. Bundesliga', '01', '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 Spieler VALUES ('50000003', 'Zlatko', 'Dedic', '05.10.1984', '150201');
INSERT INTO Spieler VALUES ('50000004', 'Romain', 'Bregerie', '09.08.1986', '150201');
INSERT INTO Spieler VALUES ('50000005', 'Martin', 'Männel', '16.03.1988', '150202');
INSERT INTO Spieler VALUES ('50000006', 'René', 'Klingbeil', '02.04.1981', '150202');
INSERT INTO Spieler VALUES ('50000007', 'Idir', 'Ouali', '21.05.1988', '150201');
INSERT INTO Spieler VALUES ('50000008', 'Frank', 'Löning', '28.08.1981', '150202');
INSERT INTO Spieler VALUES ('50000009', 'Solomon', 'Okoronkwo', '02.03.1987', '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');
INSERT INTO VereinMitglied VALUES ('150201', '00000003');
INSERT INTO VereinMitglied VALUES ('150201', '00000004');


</code>

=Abfragen=
Ausgabe der Daten aller Spieler
<run id="52f89f4ff177a">
select * from Spieler;
</run>

Ausgabe ausgewählter Daten aller Vereine
<run id="52f89f4ff1818">
select Vereinsname, Ort, Straße from Verein;
</run>

Ausgabe der Spielernamen und ihre jeweiligen Vereine
<run id="52f89f4ff18b8">
select Spieler.Vorname, Spieler.Nachname, Verein.Vereinsname from Spieler, Verein
where Spieler.V_ID=Verein.V_ID
order by Verein.Vereinsname asc;
</run>

Ausgabe ausgewählter Daten von Spielern der SG Dynamo Dresden
<run id="52f89f4ff193f">
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.';
</run>

Ausgabe der gelisteten Sportarten von Dynamo Dresden
<run id="52f89f4ff19c5">
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;
</run>

Ausgabe der Namen aller Mitglieder vom FC Erzgebirge Aue
<run id="52f89f4ff1a53">
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>