Lösungen für Braindump


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 :wink:


Ok danke. Ich werd mir merken, dass ich spätestens bei der SQL-Aufgabe mit den meisten Punkten einen View einbau, solang das irgendwie geht :wink:


Wenn es nicht die Top-N Query ist :smiley:


Randnotiz: Top-N-Queries haben nicht zwingend was mit Views zu tun. In der Übung haben wir diese nur verwendet, um ein Vergleichsattribut zu bekommen.


HI alle ,

Ich hab eine Frage und zwar :
Wie kann man die Schlüsselkandidaten anhand einer Funtionale Abhängigkeit Tabelle finden ??

Und danke :slight_smile:


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 ?

Danke.


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.

Verstanden?


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

stimmt’s?


Wie wärs mit: [m]CREATE VIEW gewinn[…][/m]?


Ach jaa. Danke.


Danke Jerry :slight_smile:
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 ?? :wink:


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.

Ich hoffe, das hilft?

1 „Gefällt mir“

Vielen Dank alles klar jetzt :slight_smile:


Ich denke eine Namensänderung auf “Goodguy Greg Jerry” wäre angebracht :wink:


He, danke! :smiley:


Ich hab noch zwei Fragen :

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 ?

und Danke :slight_smile:


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.


alles klar, vielen Dank!
und bei Ontologien reicht es aus die Defintion auf english zu geben ??