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 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>