PMG1617/DB Beleg/Franziska
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>SQL</language>
Auf einem Reitturnier gibt es eine Vielzahl von Prüfungen, zu denen jeweils Listen aushängen mit den Starterpaaren (Reiter und Pferd mit Startnummer), dass es bei vielen Prüfungen schnell mal zu Chaos kommen kann, ist nun einmal vorprogrammiert. Um dann spezielle Infos zu den Reitern oder Pferden herauszufinden, müsste man dann erst ewig lange in den Anmeldebögen wühlen. Mit einer Datenbank lassen sich die gesuchten Informationen schneller auffinden.
Dafür habe ich meine Datenbank entwickelt.
== Ziel der Datenbank ==
Die Zielstellung einer solchen Datenbank ist es bei Nachfragen der Teilnehmer schnell auf Abruf die gewünschten Informationen zu geben. Wenn sich zum Beispiel ein Reiter unsicher ist, was für eine Art Prüfung er genannt hat, kann er in der Datenbank nachfragen oder wenn er die Starternummer vergessen hat, kann er ebenso nachfragen. Wenn ein Reiter mehrere Pferde in den Prüfungen reitet, kann es auch schnell mal zum Vertauschen der Startnummer kommen, sodass nochmal nachgefragt werden muss, was diese Datenbank enorm erleichtert.
== ERM-Modell der Datenbank ==
[[Bild:Franziska_Diagramm_DB1.jpeg]]
=== Kardinalitäten ===
Wichtig bei den Starterpaaren ist, dass immer die Zusammensetzung von jeweils einem Pferd und Reiter pro Paar gilt, aber ein Reiter mit mehreren Pferden Paare bilden kann und ein Pferd auch mit mehreren Reitern Paare bilden kann. Daraus ergeben sich somit die "1 zu n"-Beziehungen.
Daher an einer Prüfung mehrere Paare starten und Die jeweiligen Paare an mehreren Prüfungen starten können ergibt sich die "n zu m"-Beziehung, wodurch eine weitere Tabelle enstehen muss.
== Die Transformation in das Relationenmodell ==
Für die Transformation werden normalerweise die drei Normalformen einzeln durchlaufen, ich werde alles nötige erklären, aber die 1. Normalform einigermaßen mit einem solchen Block an Datensätzen auch nur halbwegs darzustellen dürfte wirklich sehr schwierig, wenn nicht sogar unmöglich sein, also werde ich diese Form mir ersparen, denn sie beinhaltet nur das Erfassen der Daten in einer einzigen Tabelle.
Die 2. Normalform bewirkt, dass aus dieser einen unhandlichen Tabelle mehrere Tabellen werden. Ich erstelle die Tabellen:<br>
- Reiter (R_Name, R_Vorname, Geburtsdatum)<br>
- Pferd (Pf_Name, Geburtsjahr)<br>
- Prüfung (P_Art, Klasse, Platz_NR)<br>
- Starterpaare (Reiter, Pferd, Prüfung)<br>
Daher diese Form jedoch wieder zu große, sich doppelnde Datensätze beinhaltet, tritt die 3. Normalform in Kraft, in der jeweils Primärschlüssel in Kraft treten:<br>
- Reiter (-angegebene Datensätze-, R_NR -> Primärschlüssel)<br>
- Pferd (-angegebene Datensätze-, Pf_NR -> Primärschlüssel)<br>
- Prüfung (-angegebene Datensätze-, P_NR -> Primärschlüssel)<br>
- Starterpaare ( R_NR + Pf_NR -> Sekundärschlüssel, Start_NR -> Primärschlüssel)<br>
Um die Verbindung zwischen Prüfung und Starterpaaren herzustellen gibt es eine weitere Tabelle:<br>
- Starts (P_NR, Start_NR)<br>
Bei der Tabelle Starts gibt es dann einen gekoppelten Primärschlüssel aus P_NR und Start_NR.
=== Alle Tabellen zusammengefasst ===
Hier sind noch einmal alle Tabellen mit ihren Inhalten zusammengefasst:<br>
- Reiter (R_NR ,R_Name, R_Vorname, Geburtsdatum)<br>
- Pferd (Pf_NR, Pf_Name, Geburtsjahr)<br>
- Prüfung (P_NR ,P_Art, Klasse, Platz_NR)<br>
- Starterpaare (Start_NR, R_NR, Pf_NR)<br>
- Starts (Start_NR, P_NR)<br>
== Erstellen der Datenbank ==
<code id="5aa64e7acb2ba">
DROP TABLE IF EXISTS Reiter;
CREATE TABLE Reiter (
R_NR varchar(255),
R_Name varchar(255),
R_Vorname varchar(255),
Geburtsdatum varchar(10)
);
INSERT INTO Reiter VALUES ('001', 'Abel', 'Hannah', '27.03.1999');
INSERT INTO Reiter VALUES ('002', 'Dorfsleben', 'Lena', '08.01.2003');
INSERT INTO Reiter VALUES ('003', 'Friedrich', 'Susanne', '18.08.1987');
INSERT INTO Reiter VALUES ('004', 'Gutleben', 'Martin', '11.11.1983');
INSERT INTO Reiter VALUES ('005', 'Holzer', 'Justin', '08.07.1995');
INSERT INTO Reiter VALUES ('006', 'Keller', 'Emma', '01.05.1998');
INSERT INTO Reiter VALUES ('007', 'Müller', 'Marie', '16.09.2001');
INSERT INTO Reiter VALUES ('008', 'Opitz', 'Josie', '06.12.2000');
INSERT INTO Reiter VALUES ('009', 'Schmidt', 'Hans', '03.12.1999');
INSERT INTO Reiter VALUES ('010', 'Schmidt', 'Christin', '17.02.1999');
INSERT INTO Reiter VALUES ('011', 'Tischler', 'Isabell', '23.03.2001');
INSERT INTO Reiter VALUES ('012', 'Wolf', 'Lukas', '26.06.1996');
DROP TABLE IF EXISTS Pferd;
CREATE TABLE Pferd (
Pf_NR varchar(255),
Pf_Name varchar(255),
Geburtsjahr varchar(5)
);
INSERT INTO Pferd VALUES ('001', 'Quickstep', '2011');
INSERT INTO Pferd VALUES ('002', 'Lunika', '2010');
INSERT INTO Pferd VALUES ('003', 'Cristalla', '2012');
INSERT INTO Pferd VALUES ('004', 'Herodes', '2006');
INSERT INTO Pferd VALUES ('005', 'Rubinio', '2008');
INSERT INTO Pferd VALUES ('006', 'Dehlia', '2004');
INSERT INTO Pferd VALUES ('007', 'Charisma', '1999');
INSERT INTO Pferd VALUES ('008', 'Blizzard', '2009');
INSERT INTO Pferd VALUES ('009', 'Stormy', '2007');
INSERT INTO Pferd VALUES ('010', 'Cloudy Sky', '2012');
INSERT INTO Pferd VALUES ('011', 'Moment One', '2013');
INSERT INTO Pferd VALUES ('012', 'Kartesis', '2013');
INSERT INTO Pferd VALUES ('013', 'Aila', '2012');
INSERT INTO Pferd VALUES ('014', 'Lomitas', '2007');
DROP TABLE IF EXISTS Starterpaare;
CREATE TABLE Starterpaare (
Starter_NR varchar(255),
R_NR varchar(255),
Pf_NR varchar(255)
);
INSERT INTO Starterpaare VALUES ('001', '001', '005');
INSERT INTO Starterpaare VALUES ('002', '002', '006');
INSERT INTO Starterpaare VALUES ('003', '003', '001');
INSERT INTO Starterpaare VALUES ('004', '003', '002');
INSERT INTO Starterpaare VALUES ('005', '004', '003');
INSERT INTO Starterpaare VALUES ('006', '005', '012');
INSERT INTO Starterpaare VALUES ('007', '005', '013');
INSERT INTO Starterpaare VALUES ('008', '006', '007');
INSERT INTO Starterpaare VALUES ('009', '007', '008');
INSERT INTO Starterpaare VALUES ('010', '008', '006');
INSERT INTO Starterpaare VALUES ('011', '009', '009');
INSERT INTO Starterpaare VALUES ('012', '010', '009');
INSERT INTO Starterpaare VALUES ('013', '011', '010');
INSERT INTO Starterpaare VALUES ('014', '012', '011');
INSERT INTO Starterpaare VALUES ('015', '012', '014');
DROP TABLE IF EXISTS Prüfung;
CREATE TABLE Prüfung (
P_NR varchar(255),
P_Art varchar(255),
Klasse varchar(255),
Platz_NR varchar(255)
);
INSERT INTO Prüfung VALUES ('01', 'Dressurprüfung', 'E', '1');
INSERT INTO Prüfung VALUES ('02', 'Dressurprüfung', 'A', '1');
INSERT INTO Prüfung VALUES ('03', 'Zeitspringprüfung', 'E', '2');
INSERT INTO Prüfung VALUES ('04', 'Stilspringprüfung', 'E', '2');
DROP TABLE IF EXISTS Starts;
CREATE TABLE Starts (
Starter_NR varchar(255),
P_NR varchar(255)
);
INSERT INTO Starts VALUES ('001', '01');
INSERT INTO Starts VALUES ('001', '02');
INSERT INTO Starts VALUES ('002', '02');
INSERT INTO Starts VALUES ('002', '01');
INSERT INTO Starts VALUES ('003', '01');
INSERT INTO Starts VALUES ('003', '03');
INSERT INTO Starts VALUES ('003', '04');
INSERT INTO Starts VALUES ('004', '03');
INSERT INTO Starts VALUES ('004', '04');
INSERT INTO Starts VALUES ('005', '01');
INSERT INTO Starts VALUES ('005', '04');
INSERT INTO Starts VALUES ('006', '02');
INSERT INTO Starts VALUES ('006', '03');
INSERT INTO Starts VALUES ('007', '01');
INSERT INTO Starts VALUES ('007', '02');
INSERT INTO Starts VALUES ('007', '04');
INSERT INTO Starts VALUES ('008', '02');
INSERT INTO Starts VALUES ('008', '03');
INSERT INTO Starts VALUES ('008', '04');
INSERT INTO Starts VALUES ('009', '01');
INSERT INTO Starts VALUES ('009', '02');
INSERT INTO Starts VALUES ('010', '03');
INSERT INTO Starts VALUES ('010', '04');
INSERT INTO Starts VALUES ('011', '03');
INSERT INTO Starts VALUES ('011', '04');
INSERT INTO Starts VALUES ('012', '01');
INSERT INTO Starts VALUES ('012', '02');
INSERT INTO Starts VALUES ('013', '01');
INSERT INTO Starts VALUES ('013', '02');
INSERT INTO Starts VALUES ('013', '03');
INSERT INTO Starts VALUES ('013', '04');
INSERT INTO Starts VALUES ('014', '01');
INSERT INTO Starts VALUES ('014', '03');
INSERT INTO Starts VALUES ('014', '04');
INSERT INTO Starts VALUES ('015', '01');
INSERT INTO Starts VALUES ('015', '02');
</code>
== Abfragen ==
=== Abfrage 1 ===
Die Turnierleitung möchte erfahren, ob jemand zum Tag des Turniers (am 08.07.) Geburtstag hat. (Dazu nötig sind Vorname und Nachname!)
<run id="5ab7a9e5ba343">
</run>
=== Abfrage 2 ===
Man möchte erfahren wer alles mit Nachnamen "Schmidt" teilnimmt. ( Dazu Vorname und Geburtstag)
<run>
SELECT R_Vorname, Geburtsdatum FROM Reiter WHERE R_Name LIKE "Schmidt"
</run>
=== Abfrage 3 ===
Susanne Friedrich startet mit zwei Pferden, hat aber vergessen welche Startnummer zu welchem Pferd gehört. (Dazu Startnummer und Pferdename)
<run>
Abfrage 3 tätigen
</run>
=== Abfrage 4 ===
Ein Interessent möchte wissen in welchen Prüfungen Quickstep startet. Dazu brauchter die Prüfungsart und -klasse in der das Pferd startet.
<run>
Abfrage 4 tätigen
</run>
=== Abfrage 5 ===
Die Turnierleitung hat den fertigen Ausdruck der Starterliste für die Prüfung 4 verloren, sie benötigen nun eine neue. Dazu benötigt man den Reiter(-name) und den Pferdename.
<run>
Abfrage 5 tätigen
</run>