PMG/Kurs 11/D Beleg/Felix
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>SQL</language>
== Datenbank in der Feuerwehr ==
Ich habe mir vorgenommen, eine Datenbank zum Thema Feuerwehr zu erstellen, und zwar zu den Untersuchungen, ausgegebenen Sachen, Dienstgraden usw. In dieser Datenbank soll also nachvollziehbar sein, wer wann eine Untersuchung hat und was für eine, wer was und wieviel Sachen bekommen hat, wer zu welchem Dienstgrad befördert wurde usw. Ich habe dieses Thema gewählt, da ich mit diesem eng in Verbindung stehe und es eine Vielzahl von Daten zur Modellierung einer Datenbank bietet.
===Modellierung in einem ERM:===
[[Bild:Felix112_DB_Beleg.jpeg]]
Zwischen Freiwillige Feuerwehr und Feuerwehrmann besteht die Kardinalität 1:n, weil jeder Person nur in einer Freiwilligen Feuerwehr gleichzeitig sein kann, aber eine Feuerwehr auch mehrere Angehörige haben kann. Zwischen Feuerwehrmann und Kleidung besteht die Kardinalität 1:n, weil jeder Feuerwehrmann mehrere Kleidungsstücke besitzt, aber nicht zwei Feuerwehrleute das selbe Kleidungsstück. Zwischen Feuerwehrmann und Untersuchung besteht die Kardinalität n:m, weil jeder Feuerwehrmann zu mehreren verschiedenen Untersuchungen muss, aber auch viele Feuerwehrleute zur Untersuchung gleicher Art.
===Transformation in das Relationenmodell:===
Feuerwehrmann (<u>FM_ID</u>, Name, Vorname, Straße, Ort, Dienstgrad, ''FW_ID'')<br>
Freiwillige Feuerwehr (FW) (<u>FW_ID</u>, Name, Straße, Ort)<br>
Kleidung (<u>K_ID</u>, Helmnr, Jackennr, Hosennr, Schuhnr, ''FM_ID'')<br>
Untersuchung (<u>U_ID</u>, Art, Einrichtung, Straße, Ort)<br>
FWUntersuchung (<u>FWU_ID</u>, Datum, ''FM_ID'', ''U_ID'')<br>
Es entsteht bei der Transformation in das Relationenmodell noch eine fünfte Tabelle namens FWUntersuchung, weil diese bedingt durch die Kardinalität n:m benötigt wird. In ihr wird also die Verknüpfung zwischen den Feuerwehrangehörigen und den Untersuchungen hergestellt.
===Transformation in die Datenbank:===
<popup label="Datenbank">
<code id="50ff92acd7e00">
Drop Table if exists Feuerwehr;
Create Table Feuerwehr (
FW_ID varchar (5),
Name varchar (30),
Straße varchar (30),
Ort varchar (20),
PRIMARY KEY (FW_ID));
INSERT INTO Feuerwehr Values ('BZ', 'FW Bautzen-Mitte', 'Gesundbrunnenring 23', 'Bautzen');
INSERT INTO Feuerwehr Values ('NDK', 'FW Niederkaina', 'Niederkainaer Straße 68', 'Niederkaina');
INSERT INTO Feuerwehr Values ('STB', 'FW Stiebitz', 'Neukircheer Straße 8', 'Stiebitz');
INSERT INTO Feuerwehr Values ('KLW', 'FW Kleinwelka', 'Am Wasserturm 1', 'Kleinwelka');
Drop Table if exists Feuerwehrmann;
Create Table Feuerwehrmann (
FM_ID varchar (4),
Name varchar (20),
Vorname varchar (20),
Straße varchar(30),
Ort varchar (20),
Dienstgrad varchar (25),
FW_ID varchar (4),
PRIMARY KEY (FM_ID));
INSERT INTO Feuerwehrmann Values ('3652', 'Humbach', 'Erich', 'Neukircher Straße 36', 'Stiebitz', 'Hauptlöschmeister', 'STB');
INSERT INTO Feuerwehrmann Values ('3932', 'Müller', 'Leon', 'Gesundbrunnenring 12', 'Bautzen', 'Feuerwehrmannanwärter', 'BZ');
INSERT INTO Feuerwehrmann Values ('3242', 'Becker', 'Heinz', 'Am Schloß 5', 'Niederkaina', 'Hauptfeuerwehrmann', 'NDK');
INSERT INTO Feuerwehrmann Values ('3284', 'Schombach', 'Gerd', 'Jan Skala Straße 76', 'Bautzen', 'Löschmeister', 'BZ');
INSERT INTO Feuerwehrmann Values ('3152', 'Schlauch', 'Horst', 'Hoyerswerdaer Straße 54', 'Kleinwelka', 'Brandmeister', 'KLW');
Drop Table if exists Kleidung;
Create Table Kleidung (
K_ID varchar (4),
Helmnr varchar (4),
Jackennr varchar (4),
Hosennr varchar (4),
Schuhnr varchar (4),
FM_ID varchar (4),
PRIMARY KEY (K_ID));
INSERT INTO Kleidung Values ('1256', '6378', '5624', '7894', '2564', '3652');
INSERT INTO Kleidung Values ('1856', '6365', '5745', '7521', '2324', '3932');
INSERT INTO Kleidung Values ('1469', '6321', '5126', '7456', '2237', '3242');
INSERT INTO Kleidung Values ('1984', '6336', '5658', '7789', '2367', '3284');
INSERT INTO Kleidung Values ('1436', '6738', '5264', '7444', '2654', '3152');
Drop Table if exists Untersuchung;
Create Table Untersuchung (
U_ID varchar (6),
Art varchar (25),
Einrichtung varchar (30),
Straße varchar (20),
Ort varchar (20),
PRIMARY KEY (U_ID));
INSERT INTO Untersuchung Values ('G25', 'Allgemeine Tauglichkeit', 'Praxis Dr Müller', 'Lessingstraße 4', 'Bautzen');
INSERT INTO Untersuchung Values ('G263', 'Schwerer Atemschutz', 'Arbeitsmedizinischer Dienst', 'Bahnhofstraße 6', 'Bautzen');
INSERT INTO Untersuchung Values ('G26', 'Atemschutztauglichkeit', 'Arbeitsmedizinischer Dienst', 'Bahnhofstraße 6', 'Bautzen');
INSERT INTO Untersuchung Values ('G41', 'Höhentauglichkeit', 'Praxis Dr Hildebrandt', 'Mozartstraße 4', 'Bautzen');
Drop Table if exists FWUntersuchung;
Create Table FWUntersuchung (
FWU_ID varchar (4),
Datum varchar (8),
FM_ID varchar (4),
U_ID varchar (6),
PRIMARY KEY (FWU_ID));
INSERT INTO FWUntersuchung Values ('9235', '12.03.13', '3652', 'G25');
INSERT INTO FWUntersuchung Values ('9356', '16.05.13', '3932', 'G263');
INSERT INTO FWUntersuchung Values ('9341', '25.04.13', '3242', 'G41');
INSERT INTO FWUntersuchung Values ('9486', '06.08.13', '3284', 'G26');
INSERT INTO FWUntersuchung Values ('9421', '05.06.13', '3152', 'G25');
</code>
</popup>
===Erstellen der Abfragen:===
Wer sind die Mitglieder der gesamten Feuerwehr Bautzen und welcher Ortswehr gehören sie an?
<run id="50ff929112b94">
Select Feuerwehrmann.Name, Vorname, Feuerwehr.Name
From Feuerwehrmann, Feuerwehr
Where Feuerwehrmann.FW_ID = Feuerwehr.FW_ID
</run>
Wo befinden sich die Gerätehäuser der einzelnen Ortswehren? (alphabetisch nach Namen)
<run id="512cdda3c680a">
Select Name, Straße, Ort
From Feuerwehr
Order By Name asc
</run>
Welche Tauglichkeitsuntersuchungen sind geplant?
<run id="512cdda3c6889">
Select Art, Datum
From Untersuchung, FWUntersuchung
Where Untersuchung.U_ID = FWUntersuchung.U_ID
</run>
Wer hat wann in diesem Jahr die allgemeine Tauglichkeitsuntersuchung (G25) durchzuführen, aus welcher Ortswehr kommt er?
<run id="512cdda3c68fc" id="50ff929112b94>
Select Feuerwehrmann.Name, Vorname, Datum, Feuerwehr.Name, Art
From Feuerwehrmann, Feuerwehr, FWUntersuchung, Untersuchung
Where FWUNTERSUCHUNG.FM_ID = Feuerwehrmann.FM_ID and FWUntersuchung.U_ID = Untersuchung.U_ID and Feuerwehrmann.FW_ID = Feuerwehr.FW_ID and U_ID = 'G25'
</run>
An einer Einsatzstelle ist ein Helm liegen geblieben, er trägt die Nummer 6321. Wem gehört dieser Helm und aus welcher Ortswehr kommt der Besitzer?
<run id="512cdda3c696d">
Select Feuerwehrmann.Name, Vorname, Feuerwehr.Name, Helmnr
From Feuerwehrmann, Feuerwehr, Kleidung
Where Feuerwehrmann.FW_ID = Feuerwehr.FW_ID and Feuerwehrmann.FM_ID = Kleidung.FM_ID and Helmnr = '6321'
</run>
Bei wem steht die Beförderung zum Feuerwehrmann an (aktueller Dienstgrad ist Feuerwehrmannanwärter)?
<run id="512cdda3c69fe">
Select Name, Vorname, Dienstgrad
From Feuerwehrmann
Where Dienstgrad = 'Feuerwehrmannanwärter'
</run>
Bei Horst Schlauch steht die nächste Tauglichkeitsuntersuchung an. Er möchte gern erfahren, was dies für eine Untersuchung ist, wann er dort erscheinen muss und wo er diese absolviert.
<run id="512cdda3c6a7c">
Select Name, Vorname, U_ID, Art, Datum, Einrichtung, Untersuchung.Straße, Untersuchung.Ort
From Feuerwehrmann, Untersuchung, FWUntersuchung
Where Untersuchung.U_ID = FWUntersuchung.U_ID and Feuerwehrmann.FM_ID = FWUntersuchung.FM_ID and Name = 'Schlauch' and Vorname = 'Horst'
</run>
Ein Kurier hat eine neue Jacke ins Gerätehaus FW Bautzen-Mitte gebracht. Diese Jacke ersetzt die Jacke mit der Inventarnummer 5624, da diese beim letzten Einsatz unbrauchbar geworden ist. Wer ist der glückliche Empfänger der neuen Jacke und ist das Paket schon im richtigen Gerätehaus, wenn nicht, dann benötigt der Kurier die genaue Adresse des Zielortes?!
<run id="512ce10322f02">
Select Feuerwehrmann.Name, Vorname, Jackennr, Feuerwehr.Name, Feuerwehr.Straße, Feuerwehr.Ort
From Feuerwehrmann, Feuerwehr, Kleidung
Where Feuerwehrmann.FM_ID = Kleidung.FM_ID and Feuerwehrmann.FW_ID = Feuerwehr.FW_ID and Jackennr = '5624'
</run>
In der Feuerwehr ist im Büro eine Rechnung für Feuerwehrschutzstiefel aufgetaucht. Auf der Rechnung ist die Inventarnummer 2237 vermerkt. Existieren diese Schuhe noch, oder handelt es sich hierbei um eine alte Rechnung? Wenn diese Schuhe noch existieren wird der Name der Trägers und der Feuerwehrstandort benötigt, um diese in die richtige Rechnungsmappe einzuordnen.
<run id="512ce10322f92">
Select Feuerwehrmann.Name, Vorname, Feuerwehr.Name, Feuerwehr.Straße, Feuerwehr.Ort, Schuhnr
From Feuerwehrmann, Feuerwehr, Kleidung
Where Feuerwehrmann.FW_ID = Feuerwehr.FW_ID and Feuerwehrmann.FM_ID = Kleidung.FM_ID and Schuhnr = '2237'
</run>
Zum Schluss sollen die neuen Ehrenamtskarten an die Feuerwehrleute der Ortsfeuerwehr Bautzen-Mitte (BZ) verschickt werden. Dazu wird der Name und die genaue Anschrift benötigt.
<run id="512ce242e6572">
Select Name, Vorname, Straße, Ort
From Feuerwehrmann
Where FW_ID = 'BZ'
</run>