PMG2224 1/DB Beleg/Fabian
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>SQL</language>
== '''Begründung und Erklärung meines Themas''' ==
Mit diesem Datenbankmodell soll die Formel 1 Saison 2023 mit ihren Zahlen wiedergegeben werden. Mithilfe dieses Datenbankprojekt lassen sich die Zusammenhänge der Fahrer, Teams, Rennstrecken und deren Austragungsorte anzeigen. Da man als außenstehende Person schnell den Durchblick bei solch einem komplexen Sport verliert, ist dieses Datenbankmodell eine perfekte Übersicht um sich zu orientieren
''Entity-Relationship-Modell''
[[Bild:Fabimüller_Screenshot_20240209_082831_Samsung_Notes-1.jpg]]
''Relationship-Modell''
[[Bild:Fabimüller_Screenshot_20240209_083613_Samsung_Notes.jpg]]
== Die Erklärung der gewählten Kardinalitäten: ==
Fängt man auf der linken Seite des ERM an zu untersuchen, so findet man zuerst eine '''1''' zu '''1''' Beziehung zwischen der Entität "Rennen" mit der Eigenschaft der "Strecke". Die Beziehung ist '''1''' zu '''1''', da ein ausgetragenes Rennen nur auf einer einzelnen Rennstrecke stattfinden kann. Die Entitäten "Rennen" und "Fahrer" stehen in einer '''n''' zu '''m''' Beziehung. Dies ist ntürlich klar, da es mehrere Rennen gibt, welche jeweils auch von mehreren Fahrern gefahren werden. Die '''n''' zu '''1''' Beziehung zwischen den Entitäten " Fahrer" und "Team" sagt aus, dass mehrere Fahrer (laut Regelwerk 2 Fahrer, sowie ein Ersatzfahrer für Notfälle), Teil eines Teams sein können.
<code id="65eabb520e40a">
CREATE TABLE Rennen(
Kalendernummer INT(2),
Eventname VARCHAR(50),
Austragungsland VARCHAR(20),
Stadt _in_der_Nähe VARCHAR(30),
Zuschaueranzahl INT(7),
PRIMARY KEY (Eventname)
);
CREATE TABLE Strecke(
Streckenname VARCHAR(40),
Art VARCHAR(20),
Rundenrekord_in_Sekunden INT(15),
Streckenlänge_in_km INT(10),
Anzahl_Austragungen INT(3),
PRIMARY KEY (Streckenname)
);
CREATE TABLE Fahrer(
Vorname VARCHAR(20),
Name VARCHAR(20),
Nationalität VARCHAR(15),
WM_Titel INT(1),
Anzahl_Siege INT(3),
Erfahrung_in_Jahren INT(10),
PRIMARY KEY (Name)
);
CREATE TABLE Team(
Teamname VARCHAR(30),
Konstrukteurtitel INT(2),
Teamchef VARCHAR(30),
Name_Fahrer VARCHAR(30),
Einstiegsjahr INT(4),
PRIMARY KEY (Teamname)
);
INSERT INTO Rennen VALUES(1,'Großer Preis von Bahrain','Bahrain','Hamad-Town',150000);
INSERT INTO Rennen VALUES(2,'Großer Preis von Saudi Arabien','Saudi Arabien','Jeddah',200000);
INSERT INTO Rennen VALUES(3,'Großer Preis von Australien','Australien','Melbourne',440000);
INSERT INTO Rennen VALUES(4,'Großer Preis von Aserbaidschan','Aserbaidschan','Baku',40000);
INSERT INTO Rennen VALUES(5,'Großer Preis von Miami','USA','Miami',270000);
INSERT INTO Strecke VALUES('Bahrain International Circuit','permanente Rennstrecke',91,5.412,20);
INSERT INTO Strecke VALUES('Jeddah Corniche Circuit','permanenter Stadtkurs',91,6.174,4);
INSERT INTO Strecke VALUES('Albert Park Circuit','semi-permanente Rennstrecke',80,5.303,27);
INSERT INTO Strecke VALUES('Baku City Circuit','temporärer Stadtkurs',103,6.003,7);
INSERT INTO Strecke VALUES('Miami International Autodrome','temporärer Stadtkurs',91,5.412,2);
INSERT INTO Fahrer VALUES('Max','Verstappen','Niederlande',3,54,10);
INSERT INTO Fahrer VALUES('Sergio','Perez','Mexiko',0,6,14);
INSERT INTO Fahrer VALUES('Lewis','Hamilton','Großbritannien',7,103,17);
INSERT INTO Fahrer VALUES('Fernando','Alonso','Spanien',2,32,22);
INSERT INTO Fahrer VALUES('Charles','Leclerc','Monaco',0,5,7);
INSERT INTO Team VALUES('Red Bull Racing',6,'Christian Horner','Verstappen und Perez',2005);
INSERT INTO Team VALUES('Mercedes AMG F1 Team',8,'Toto Wolff','Hamilton und Russel',1954);
INSERT INTO Team VALUES('Scuderria Ferrari',16,'Frederic Vasseur','Leclerc und Sainz',1950);
INSERT INTO Team VALUES('Mclaren',8,'Andrea Stella','Piastri und Norris',1966);
INSERT INTO Team VALUES('Aston Martin',0,'Mike Krack','Stroll und Alonso',2021);
</code>
<run id="65eabb520e456">
SELECT Teamname FROM Team WHERE Konstrukteurtitel = 16;
SELECT Teamname FROM Team WHERE Einstiegsjahr > 1970;
SELECT Streckenname FROM Strecke WHERE Streckenlänge_in_km > 6.000;
SELECT Name,Nationalität FROM Fahrer WHERE Anzahl_Siege > 100;
SELECT Kalendernummer,Eventname,Austragungsland FROM Rennen WHERE Zuschaueranzahl > 1000;
SELECT Streckenname,Rundenrekord_in_Sekunden,Streckenlänge_in_km FROM Strecke Where Anzahl_Austragungen < 30;
</run>
Da es in der Formel 1 Saison 2023 ganze 22 Rennen gab, habe ich nur die ersten 5 Grand Prix, samt Streckeninformationen aufgelistet. Ebenso habe ich nur die besten 5 der gesamten 20 Fahrer in das Datenbanksystem eingefügt. Aus dem selben Grund habe ich auch nur die 5 Besten der 10 Teams aufgenommen. Ich bitte um Verständnis :)
Des Weiteren habe ich mich im Nachhinein umentschieden die Entität "Fahrer" mit nur einem Primärschlüssel zu versehen, anders als im ERM zu sehen.
Problemfälle
- unglaublich viel Arbeit beim eingeben der vollständigen Werte
- es könnten mehrere Fahrer mit dem selben Namen auftreten