PMG2224 1/DB Beleg/Adrian

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>SQL</language>
=Datenbank-Beleg Adrian Scheibe=
==Überlegung==
Die Datenbank soll mögliche Aufträge in der Raumfahrtindustrie verwalten, anzeigen und speichern können. Das Ziel dabei ist, dass das Modell mithilfe eines ERM verschiedene Aspekte eines solchen Auftrags anzeigt und alle Faktoren übersichtlich sichtbar macht. Die SQL-Datenbank soll währenddessen eine praktische Umsetzung dieses Konzeptes sein, welches auch praktisch verwendet werden könnte.
==ERM==

[[Bild:AdrianS_ERM.jpg]]

''Mögliches ERM zur Verwaltung von Aufträgen in der Raumfahrt. Mit ERDPlus erstellt''
===Erklärung===
Eine Rakete kann mehrere Nutzlasten tragen, also ist es eine 1:n-Beziehung. Währenddessen können mehrere Aufträge mehrere, sich auch überschneidende Nutzlasten verlangen, also ist es eine n:m-Beziehung. Alle Entities haben eine einzigartige ID um sie im System voneinander unterscheiden zu können.
==Relationen-Modell==
Die Entities / Attribute / Relationships aus dem ERM werden in Tabellen gefasst um sie auf die Umsetzung in einer Datenbank (mit SQL) vorzubereiten. Die Vererbung der Foreign-Keys wird schon vorgenommen. Eine vierte Tabelle wird erstellt um die Ansprüche einer n:m-Beziehung zu entsprechen.

[[Bild:AdrianS_ER.jpg]]

''Mögliches RM zur Verwaltung von Aufträgen in der Raumfahrt. Mit ERDPlus erstellt''
===Erklärung===
Das Modell bezieht sich auf den prinzipiellen Aufbau des ERM. Den IDs wurden einzigartige Namen zugetailt, um sie in einer gemeinsamen Tabelle unterscheiden zu können. Die Tabelle Mission wurde angelegt, um eine n:m-Beziehung zu gewährleisten.
==Umsetzung in SQL==
===Umsetzung der Tabellen in SQL===
<code id="65cb758673824"></code>
===Einfügen von Daten===
<code id="65cb758673875"></code>
===Ausgabe aller Werte===
<run id="65cb7586738c1">
SELECT * FROM Auftrag; --wählt alle Einträge von 'Auftrag' aus
SELECT * FROM Nutzlast;
SELECT * FROM Rakete;
SELECT * FROM Mission;
</run>
===Beispiel 1===
<run id="65e184883603c">
--wählt R_ID und dazugehörige Nutzlast aus der Tabelle Rakete aus
SELECT Rakete.R_ID, Rakete.Max_nutzlast FROM Rakete;
</run>
===Beispiel 2===
<run id="65e1848836084">
--wählt die Auftrag-IDs und Budgets von allen Aufträgen aus, die eine Laufzeit von genau 1825 Tagen haben
SELECT Auftrag.A_ID, Auftrag.Budget FROM Auftrag WHERE Auftrag.Laufzeit = 1825;
</run>
===Beispiel 3===
<run id="65e18488360c9">
--wählt einzigartige Rakten-IDs und die dazugehörige Nutzlast von Raketen aus, die eine Startmasse von genau oder mehr als 549t haben
SELECT DISTINCT Nutzlast.R_ID, Rakete.Max_nutzlast FROM Rakete, Nutzlast WHERE Rakete.R_ID = Nutzlast.R_ID AND Startmasse >= 549000;
</run>
===Beispiel 4===
<run id="65e184883610e">
--wählt Auftrag-ID und das dazugehörige Budget von Auftraggebern aus, die die Nutzlast mit der ID '1a5c47' beinhalten und einzigartig sind
SELECT Auftrag.A_ID, Auftrag.Budget FROM Auftrag, Mission WHERE Auftrag.A_ID = Mission.A_ID AND Mission.N_ID = "1a5c47";
</run>
===Beispiel 5===
<run id="65eabef192046">
--erstellt neue Spalte in Tabelle 'Auftrag'
ALTER TABLE Auftrag
ADD COLUMN Budget_Tag money;

--fügt in neue Spalte 'Budget_Tag' das verfügbare Buget pro Tag der Laufzeit ein (Budget : Laufzeit)
UPDATE Auftrag
SET Budget_Tag = ((replace((SELECT Auftrag.Budget FROM Auftrag),',','')) / (SELECT Auftrag.Laufzeit FROM Auftrag));

SELECT * FROM Auftrag WHERE A_ID = "b166e2";
</run>
===Beispiel 6===
<run id="65e1848836154">
--erstellt neue Spalte in Tabelle 'Auftrag'
ALTER TABLE Auftrag
ADD COLUMN Anzahl_Nutzlast INT;

--fügt in neue Spalte 'Anzahl_Nutzlast' in 'Auftrag' die Anzahl die jeweiligen Nutzlasten ein
UPDATE Auftrag
SET Anzahl_Nutzlast = (SELECT COUNT(*) FROM Mission WHERE Auftrag.A_ID = Mission.A_ID);

--wählt Auftrag-IDs und Anzahl_Nutzlast von Aufträgen aus, die mehr als einen Eintrag in Mission haben (entspricht mehr als 1 Nutzlast)
SELECT Auftrag.A_ID, Auftrag.Anzahl_Nutzlast FROM Auftrag WHERE (SELECT COUNT(*) FROM Mission WHERE Auftrag.A_ID = Mission.A_ID) > 1;
</run>