Du beschränkst die Ausgabe auf Kaffeesorten pro Filiale, die einen Gewinn > 10k haben. Dafür ist der mittlere View. Nebenbei angemerkt: Irgendwo wirst du immer einen View im SQL-Teil brauchen
Hallo,
ich hab eine Frage zu SQL, zu der Übung 8, Aufgabe 4:
Die Aggregatsfunktion SUM heisst ja, dass Werte einer Spalte summiert werden, in dem obigen Beispiel steht da SUM(anzahl * gewinn) AS gewinn, man kann doch auch nur anzahl * gewinn AS gewinn schreiben, wie bei preis - einkaufspreis AS gewinn. Was bedeutet das SUM ( … * …) ?
Und was bedeutet der Kommentar: - - weil es der Primary Key ist nach GROUP BY k.kreditkartennummer ?
SUM ist deshalb erforderlich, da der Gesamtgewinn pro Kunde berechnet werden soll und hierbei berücksichtigt werden muss, dass ein Kunde verschiedene Artikel bestellt haben kann (–> Summierung über alle Artikel).
Die Gruppierung muss nach dem PK erfolgen, da ansonsten nicht gewährleistet ist, dass du nicht mehrere Kunden bei der Aggregation “in einen Topf wirfst” und damit das Ergebnis verfälschst.
Nun, Schlüsselkandidaten sind „Minimale Attributkombinationen, die alle anderen Attribute funktional bestimmen“. Du suchst also Attributkombinationen, für die „jedes X immer das gleiche Y 'rauswirft“. Normalerweise solltest du da gut hinkommen, wenn jedes Tupel unterschiedliche Ausprägungen besagter Attribute besitzt.
Nochmal wegen dem obigen SQL Beispiel, was ich vergaß zu fragen: FROM gewinn g —> es gibt doch gar keine Relation gewinn im Übungsblatt 7, wo kommt das her??
danke für die vorigen Antworten.
Und noch was: ich verstehe nicht genau, für was man Views benötigt, z.B. für das Lösen der Aufgaben dürfen Sie gerne Views erstellen, welche Sie auch in anderen Teilaufgaben wiederverwenden können.
WHERE k.kreditkartennummer = b.kunde //vergleicht, ob die Werte von kredikartennummer und der Wert vom Primärschlüssel des Fremdschlüssels kunde der Relation bestellung b identisch sind
AND b.id = bp.bestellung // vergleicht, ob der Wert von ID von Bestellung identisch mit dem Wert vom Primärschlüssel des Fremdschlüssels bestellung in bp ist
AND bp.artikelnummer = g.artikelnummer // genauso wie oben
Danke Jerry
Aber ich hab es nicht genau verstanden !
Kannst du vllt die Aufgabe 5 aus dem Übungsblatt 6 noch einmal erklären und Wie kommt man darauf ??
Da gibt es doch nicht viel zu erklären. Sagen wir, A → B soll auf Richtigkeit geprüft werden (A kann hierbei natürlich auch eine Kombination aus Spalten sein). Dafür schaut man einfach, dass für jeden Wert von A nur genau ein Wert von B existiert. D.h. redundanten Werten in A, müssen unterschiedliche Werte in B zugeordnet sein. Existieren keine redundanten Werte in A, ist B sowieso funktional abhängig von A (Schlüsselkandidat), wie z.B. in Aufgabe 5 AB → E, AB → D, AB → C.
Genau. Stell’ dir vor, du hast keine wiederholten Tupel. Das bedeutet, alle Attribute zusammen sind ein Superschlüssel.
a b c
a b d
a d d
b d c
b d d
Jetzt bemerkst du, dass ein Attribut einfach durchgezählte Nummern sind. Das bedeutet: Du hast hier keine wiederholten Attributwerte. Über diese Nummer kannst du jedes Tupel eindeutig ansprechen.
0 b c
1 b d
2 d d
3 d c
4 d d
Und in einem anderen Fall hast du z.B. zwei Attribute, die, für sich genommen, wiederholte Werte haben, aber deren Kombination eindeutig ist.
a a x
a b x
b a x
b b y
c a y
c b y
Hier also die erste und zweite Spalte. Gehen wir mal etwas genauer durch. Im ersten Beispiel: Wir wissen immer, dass alle Attribute zusammen ein Superschlüssel sind, und, dass keine Tupelduplikate existieren. Wir können jetzt zwei Methoden benutzen: Entweder, wir versuchen sukzessive, alle Superschlüssel, die wir je Iteration finden, zu verkleinern, oder wir gucken uns Attributkombinationen an und suchen nach Duplikaten. Ich würde die zweite Methode wärmstens empfehlen.
Wieso funktioniert das? Ganz einfach: Stell’ dir wieder vor, die Tupel wären nummeriert. Käme jetzt 2 mal die Nummer 2143 vor, wäre die Nummerierung nutzlos. Das bedeutet: Jede Nummerierung braucht Nummern, die höchstens einmal vorkommen. Ersetze “Nummerierung” durch “Schlüsselkandidat” und du hast das Vorgehen:
a b c
a b d
a d d
b d c
b d d
(Anm.: ich nummeriere die Spalten mit Zahlen)
Mögliche Attributkombinationen: 1,2,3,12,13,23,123
1 hat mehrmals den Wert “a”, ist also kein Schlüsselkandidat.
2: “b” mehrmals
3: “c” mehrmals
=> Wir haben alle Einzelattribute geprüft. Daraus folgern wir: unsere Schlüsselkandidaten sind mindestens 2 Attribute lang.
12: “a b” mehrmals
13: “a d” mehrmals
23: “d d” mehrmals
=> Wir haben alles außer 123 geprüft. 123 muss Schlüsselkandidat sein, da sonst Tupelduplikate vorhanden wären. Das ist natürlich semantisch ein fieser Fall: wir brauchen alle Informationen über etwas, um es zu identifizieren.
In der nächsten Beispielrelation wird’s einfacher:
0 b c
1 b d
2 d d
3 d c
4 d d
hier sehen wir ja sofort: 1 ist eindeutig, d.h. wir brauchen keine Vereinigungen mit 1 zu betrachten - 12 zum Beispiel, wäre nicht minimal, da man 2 wieder wegnehmen könnte. Es bleiben 2, 3 und 23 übrig, aber hier habe ich, in weiser Ninja-Voraussicht, die selben Werte verwendet, wie oben - die Argumentation ist gleich.
Vorsicht! Nur, weil ein Surrogat da ist, bedeutet das keineswegs, dass es keine weiteren Schlüsselkandidaten gibt! Desweiteren bedeutet “minimale Länge” nur, dass man von dieser Kombination nichts wegnehmen kann, nicht aber, dass es keine anderen, längeren Schlüsselkandidaten gibt!
Jetzt in der letzten Relation:
a a x
a b x
b a x
b b y
c a y
c b y
1,2,3: Sind wieder nicht einzeln eindeutig.
12: Schau einer an - man erkennt so eine Art “Hochzählmuster”, fast, als wäre 2 ein Bit und 1 ein Trit. Solche Muster sollte man schnell erkennen, das sind meistens Schlüsselkandidaten. Tatsächlich kommt hier nichts mehrfach vor, wir haben einen Schlüsselkandidaten.
13,23: Nope, “a x” stört.
123: Kann kein Schlüsselkandidat sein, weil 12 schon einer ist.
Was ist mit ‘‘Vermeiden Sie unnötiges Ausprägen von Relationen, sofern möglich’’ gemeint ?
heißt das : wir dürfen nicht 8A verwenden wenn wir 8B verwenden können oder was ??
und zweitens was macht man bei zusammengesetzten Attribute ??? Wie schaut die Relation aus ?
So verstehe ich das auch. Gilt vor allem aber auch für das Mappen von 1:1 oder 1:N Beziehungen (Mappen durch Fremdschlüssel und nicht durch eigene Relation).
Z.B. (Name) ist aus (Vorname) und (Nachname) zusammengesetzt? Das wäre dann R(Vorname, Nachname, …). Die Information (Name) musst du nicht gesondert speichern, da sie sich aus den anderen Attributen zusammensetzt.