Hallo,
welche elegantere Lösung, falls meine überhaupt korrekt sein sollte, gibt es weiterhin?
Folgende Relationenschemata sind gegeben:
Abfall(Nr, Beschreibung, von_wem, Ort, Menge_in_kg, Form, entsorgt_am)
Schadstoff(kurz, Bezeichnung, Gefahrenklasse, kostet_pro_g)
beinhaltet(worin, was, wieviel%)
Aufgabe:
Wer war der Eigentümer des Sondermülls mit dem bisher höchsten Anteil an Salpetersäure?
Meine Lösung:
P [von_wem] (Abfall \ P [b1.Nr, a1.Beschreibung, a1.von_wem, a1.Ort, a1.Menge_in_kg, a1.Form, a1.entsorgt_am] (S [b1.wieviel% < b2.wieviel%] p[b1.Nr <- Nr] ((S [s1.Bezeichnung = 'Salpetersäure'] (P[a1] (Abfall) JOIN p[s1] (Schadstoff) JOIN p [b1, worin <- Nr, was <- kurz] (beinhaltet)))
X
p[b2.Nr <- Nr](S [s2.Bezeichnung = 'Salpetersäure'] (p[a2] (Abfall) JOIN p[s2] (Schadstoff) JOIN p[b2, worin <- Nr, was <- kurz] (beinhaltet)))))
Es werden zuerst alle Abfälle mit dem Schadstoff "Salpetersäure" über die Relation "beinhaltet" zusammengeführt, die existieren. Anschließend wird das Kreuzprodukt aus der temporären Ergebnisrelation mit sich selbst gebildet. Es werden nun die Tupel selektiert, bei denen der Wert für wieviel% an Stelle 1 kleiner ist als an Stelle 2, dadurch fällt der betroffene Abfall weg, da es einen Abfall gibt, der einen höheren Schadstoffanteil aufweist.
Anschließend findet eine Projektion auf die Menge der Attribute des 1.Abfalls statt.
Durch die Mengendifferenz wird sichergestellt, dass all jene Abfälle aus der Liste aller Abfälle entfernt werden, die mindestens gegenüber einem Abfall einen geringeren Schadstoffanteil der Salpetersäure aufweisen.
Nun erhalten wir ein temporäreres Resultat höchster Ebene, wodurch anschließend eine Projektion auf das Attribut "von_wem" mit impliziter Duplikateliminierung (beispielsweise in dem Fall, wenn zwei Abfälle den gleichen Schadstoffanteil aufweisen und von der gleichen Person entfernt wurden) durch die gegebene Mengensemantik.
p[b1.Nr <- Nr] und p[b2.Nr <- Nr] stellen sicher, dass die Nr jeweils nach zusammenfügen der Tupeln beider an dem Kreuzrprodukt beteiligten Relationen einen eindeutigen Attributnamen erhalten, mit der eine anschließende Projekt auf die Attribute des 1. Abfalls möglich ist.
Meine Frage ist, wie würde sich die gegebene Aufgabestellung, übersichtlicher und einfacher lösen? Ist der gegebene Ansatz überhaupt korrekt?
liebe Grüße
P = Projektion
p = Umbenennungsoperator
S = Selektion