PMG2022/DB Beleg/Jacob
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>SQL</language>
==Ziel der Datenbank==
Mein Ziel ist es eine Datenbank über Basketballspieler in der NBA zu verfassen, welche einige Aktivitäten des Spielers und seine Mitgliedschaften in Vereinen oder bei Sponsoren übersichtlich darstellt.
== ERM-Modell ==
[[Bild:Jacob123_Basketballspieler_ERM.jpg|left|600px|thumb|ERM]]
==ER-Modell==
'''<u>Baskettballspieler:</u>'''
Name |Vorname |Geburtsdatum|Nationalität|Gespielte Saisons| Spielernummer |
Textfeld|Textfeld|Nummerfeld | Textfeld | Nummerfeld |Nummerfeld mit Primärschlüssel|
'''<u>Errungenschaften:</u>'''
Art | Jahr | Spielernummer |
Textfeld|Nummerfeld|Nummerfeld mit Fremdschlüssel|
'''<u>Verein:</u>'''
Verienname|Teamgröße |Mitgliederanzahl| Vereinnummer |
Textfeld |Nummerfeld| Nummerfeld |Nummerfeld mit Primärschlüssel|
'''<u>Sponsor:</u>'''
Sponsorname|Mitgliederzahl| Sponsornummer |
Textfeld | Nummerfeld |Nummerfeld mit Primärschlüssel|
'''<u>Sponsorvertrag:</u>'''
Spielername | Sponsorname |Werbegeld |Vertragslänge| Spielernummer | Sponsornummer |
Textfeld | Textfeld |Nummerfeld| Nummerfeld |Nummerfeld mit Fremdschlüssel|Nummerfeld mit Fremdschlüssel|
==Datenbankeinarbeitung==
<code id="622b155340787">
DROP TABLE IF EXISTS Basketballspieler ;
CREATE TABLE Basketballspieler (
Name varchar(20),
Vorname varchar(20),
Geburtsdatum varchar(10),
Nationalität varchar(20),
Gespielte Saisons varchar(2),
Spielernummer varchar(5),
Teamnummer varchar(5),
PRIMARY KEY (Spielernummer)
)
;
INSERT INTO Basketballspieler VALUES ('LeBron','James','30.12.1984','Amerika','18','00001','10001');
INSERT INTO Basketballspieler VALUES ('Antetokounmpo','Giannis','6.12.1994','Griechisch','9','00002','10002');
INSERT INTO Basketballspieler VALUES ('Jokic','Nikola','19.2.1995','Serbisch','7','00003','10003');
DROP TABLE IF EXISTS Errungenschaften ;
CREATE TABLE Errungenschaften (
Art varchar(20),
Jahr varchar(4),
Spielernummer varchar(5)
)
;
INSERT INTO Errungenschaften VALUES ('MVP','2020','00002');
INSERT INTO Errungenschaften VALUES ('MVP','2021','00003');
INSERT INTO Errungenschaften VALUES ('Finals MVP','2016','00001');
INSERT INTO Errungenschaften VALUES ('ROY','2004','00001');
DROP TABLE IF EXISTS Verein;
CREATE TABLE Verein (
Vereinname varchar(20),
Teamgröße varchar(2),
Mitgliederanzahl varchar(5),
Vereinnummer varchar(5),
PRIMARY KEY (Vereinnummer)
)
;
INSERT INTO Verein VALUES ('Los Angeles Lakers','18','75340','10001');
INSERT INTO Verein VALUES ('Milwaukee Bucks','15','58520','10002');
INSERT INTO Verein VALUES ('Denver Nuggets','17','43520','10003');
DROP TABLE IF EXISTS Sponsor;
CREATE TABLE Sponsor (
Sponsorname varchar(20),
Mitgliederanzahl varchar(5),
Sponsornummer varchar(5),
PRIMARY KEY (Sponsornummer)
);
INSERT INTO Sponsor VALUES ('Nike','99530','20001');
INSERT INTO Sponsor VALUES ('Adidas','88930','20002');
INSERT INTO Sponsor VALUES ('Under Armor','67530','20003');
DROP TABLE IF EXISTS Sponsorvertrag;
CREATE TABLE Sponsorvertrag (
Name varchar(20),
Sponsorname varchar(20),
Werbegeld varchar (9),
Vertragslänge varchar(2),
Spielernummer varchar(5),
Sponsornummer varchar(5)
);
INSERT INTO Sponsorvertrag VALUES ('Lebron','Nike','87000000','17','00001','10001');
INSERT INTO Sponsorvertrag VALUES ('Antetokounmpo','Adidas','67530000','13','00002','10002');
INSERT INTO Sponsorvertrag VALUES ('Jokic','Under Armor','46434000','9','00003','10003');
</code>
Welcher Spieler hat 9 Saisons gespielt?
<run id="62406cde8b5ca">
select Basketballspieler.Vorname, Basketballspieler.Name, Basketballspieler.nationalität
from Basketballspieler
where Basketballspieler.Gespielte = '9';
</run>
Welcher Spieler hat es erreicht einen "Finals MVP" zu erlangen?
<run id="622b15534194d">
select Basketballspieler.Vorname, Basketballspieler.Name, Basketballspieler.nationalität, Basketballspieler.Geburtsdatum
from Basketballspieler, Errungenschaften
where Errungenschaften.Art = 'Finals MVP' and Basketballspieler.Spielernummer = Errungenschaften.Spielernummer
</run>
Welcher Spieler hat einen Vertrag mit "Under Armor" und wie viel verdient er damit?
<run id="623d892ee30ad">
select Basketballspieler.Vorname, Basketballspieler.Name, Sponsorvertrag.Sponsorname, Sponsorvertrag.Werbegeld
from Sponsorvertrag, Basketballspieler
where Sponsorvertrag.Spielernummer = Basketballspieler.Spielernummer and Sponsorvertrag.Sponsorname = 'Under Armor'
</run>
Welcher Spieler spielt bei dem Verein mit den meisten Mitgliedern?
<run id="623d8c2390bfb">
select Basketballspieler.Vorname, Basketballspieler.Name, Verein.Vereinname, Verein.Mitgliederanzahl
from Basketballspieler, Verein
where Basketballspieler.Vereinnummer = Verein.Vereinnummer and Verein.Mitgliederanzahl = (SELECT Min(Verein.Mitgliederanzahl) from Verein)
</run>
==Kritische Reflexion==
ERM-Modell:
Der Name "Name" von einigen Attributen doppeln sich und wurden im ER und DB geändert zu "Vereinname" und "Sponsorname".
Ebenso mussten 2 Attribute umgenannt werden, da sonst die Syntax von SQL beeinträchtigt werden würden(Alter --> Geburtsdatum, Jahre in der Liga --> Gespielte Saisons
Insgesamt stimmt das ERM-Modell nicht mehr ganz mit dem ER-Modell und der Datenbankeinarbeitung überein. Durch erst später festgestellte Probleme konnte das ERM-Modell auch nicht mehr überarbeitet werden. Zum Beispiel die Entity Sponsor hat am Ende andere Attribute.
Bei der letzten Abfrage, um den Spieler mit den meisten Vereinsmitglieder zu ermittlen, kommt es beim Ergebniss heraus, dass das Programm statt bei der Mitliederanzahl das Maximum sucht, das Maximum bei der Vereinsnummer ermittelt. So ergibt sich ein falsches Ergebniss.