Fragen zum Stoff


alles so :smiley:

bin aber auch erst bei 6. (inclusive übungen natürlich)


hmm… ja ich denka uch jeden tag 1-2 kapitel sind locker drin… vor dem relationenscheiß hat ich schiss es ned zu raffen, aber war viel leichter als gedacht :smiley:

SQL wird nochma ein brocken vor dem ich mich etwas fürchte.


Kennt eigentlich jemannd eine gute Seite um ein bisschen SQL Statements zu üben?
Gleiche Frage gilt für XPATH falls da jemand was hat? :slight_smile:


Hier etwas zum üben: http://amazing-sql.com/

Habe es jetzt zu knapp 30 % durch und es ist eigentlich ganz gut. Hat zwar ein paar Macken, aber für grundlegende SQL-Statements reicht es aus.

Danke @konsti4u für den Link


Danke Maddoc für den Link :slight_smile:


Hey,

irgendwie versteh ich das mit den Abhängigkeiten nicht ganz. Ich kann das irgendwie nicht so ganz rausfinden was von was abhängig ist-

Zum beispiel:

A | B | C | D | E


a | b | x | v | Q
e | b | y | v | Z
a | d | x | v | T
e | d | y | v | P
a | f | x | p | T
e | f | y | p | Z

Musterlösung:
… es gelten:
B → D AB → C
A → C E → C
BC → A
E → A BC → D
AB → D

Aber wieso ist zum beispiel A von C abhängig. Das hätt ich nie gedacht. Das B von D abhängig ist dachte ich schon, aber bei A und C weiß ich gar nicht wie man dadrauf kommt.

Wär echt lieb, wenn mir jemand helfen könnte. Verzweifel sonst noch dadran :blush:


[quote=kaut]
A | B | C | D | E


a | b | x | v | Q
e | b | y | v | Z
a | d | x | v | T
e | d | y | v | P
a | f | x | p | T
e | f | y | p | Z

Aber wieso ist zum beispiel A von C abhängig. Das hätt ich nie gedacht. Das B von D abhängig ist dachte ich schon, aber bei A und C weiß ich gar nicht wie man dadrauf kommt.
[/quote]Dass A von C abhaengig ist, heisst, dass man von C auf A schliessen kann. Wenn du weisst, dass C x ist, dann weisst du automatisch, dass A a ist, weil es keine Zeile gibt, in denen bei C x und bei A was anderes als a steht.
Aehnlich kannst du von B auf D schliessen. b → v, d → v, f → p. Also ist D funktional abhaengig von B.


Funktionale Abhängigkeit:
Y ist funktional abhängig von X, wenn es keine zwei Tupel geben kann, in denen für gleiche X-Werte verschiedene Y-Werte auftreten.

Das ist die Definition der funktionalen Abhängigkeit. Um nun in der Tabelle funktionale Abhängigkeiten zu finden, musst du einfach nur prüfen, wo für gleiche X-Werte eben immer die gleichen Y-Werte rauskommen.
Bei A->C gilt dann beispielsweise:
a - x
e - y
a - x
e - y
a - x
e - y

C ist also funktional abhängig von A(rechts vom Pfeil ist funktional abhängig von links), weil für a immer x und für e immer y rauskommt. Und bei B und D machst du genau dasselbe.
Wenn du dich an die obige Defintion hälst, dann brauchst du nicht “denken”, dass B und D möglicherweise abhängig sein könnten. Es ist analog das gleiche. Wenn du das verstanden hast, dann siehst du die Abhängigkeit von A und C genauso leicht, wie die von B und D.


Lässt sich auch sehr gut mit Funktionen in Mathe vergleichen. Da gibt es für jedes x auch maximal ein y, andersrum kann es allerdings mehrere y mit dem gleichen x-Wert geben (also x → y).

Wenn diese Bedingung nicht gilt, dann ist die Abbildung keine Funktion mehr, also gibt es auch keine funktionale Abhängigkeit.

Edit: da tippt man doch mal 2 Minuten und schon ist alles voller Posts :smiley:


boah super danke!!!

Ich hab immer gedacht, dass links abhängig von rechts ist und dann ergibt das alles keinen Sinn :confused:

Danke jetzt hab ichs gecheckt!! Super danke.


ebenfalls danke von mir, super erklärt :slight_smile:


Ich hab jetzt nachdem ich Übungen und Vorlesungen durch habe, immer noch ein paar Fragen und wollte keinen extra Thread dafür machen.

SQL:

  1. Müssen wir in der select-Klausel k.gewinn as gewinn umbenennen? Weil in den meisten SQL Systemen braucht man das nicht, in sqlite aber schon.
  2. Ist Performance relevant für die Richtigkeit unserer Lösung? Gerade bei mehr als 2 tables finde ich es wesentlich praktischer zum Lösen einfach die Kreuzprodukte zu benutzen und dann in der where-Klausel zu spezifizieren. Allerdings geht die Performance auch gerade bei mehr als 2 tables dabei vor die Hunde.

XML:

  1. zur Visibility, wenn ich das richtig verstehe wäre als Beispiel <Betrag Währung=“Eur”>[…] bestimmt über Attributtypdefinition während <Währung>Euro<Währung>[…] über Elementtyp definiert wäre oder? (vermutlich doofe Frage, will aber sicher gehen)
  2. Müssen wir XPath richtig können, oder kommen höchstens Theoriefragen zu xpointer/xpath? (Ich glaube das hat jemand in der letzten Vorlesung gefragt, aber hab irgendwie keine Ahnung mehr)

Ontologien:

  1. kommen nicht dran oder? (ich bin mir 99% sicher, dass er ‘natürlich nicht’ gesagt hat, vorallem weil es keine Vorlesung dazu gab)

Ich kann nur manche Fragen beantworten:
-Ja, Ontologien kommt definitiv nicht dran
-XML: Bei der Währungssache hast du Recht

Ich hoffe auch, dass XPath maximal mit Multiple Choice dran kommt… immerhin hatten wir es nicht einmal in der Vorlesung sondern nur auf den Folien!
Außerdem hoffe ich, dass Multidimensionale Modellierung nicht dran kommt, ich konnte dem Dozenten einfach nicht zuhören @.@ (und passender Weise fehlt bei den Videoaufzeichnungen auch genau dieses Kapitel >.>)


  1. Was genau meinst du? In sqlite hatte ich bisher keine Probleme, wenn ich es nicht getan habe.(Aber ich bin mir unsicher, ob das was ich gemacht habe, immer den Standards entsprach ;)).

  2. Unser Tutor hat soweit ich mich erinnere in seinen Übungen immer gemeint, dass Performanz nicht ausschlaggeben ist und dass es uns überlassen bleibt, welche Art von Join wir nutzen - wenn nichts anderes verlangt ist. Allerdings sollte ein gutes System da auch einiges optimieren können.


Du sollst nur Sachen machen, die im Standard erlaubt sind. Wenn sqlite das nicht kann, dann stehts wahrscheinlich im Standard so drin.

[quote=coMar]
2) Ist Performance relevant für die Richtigkeit unserer Lösung? Gerade bei mehr als 2 tables finde ich es wesentlich praktischer zum Lösen einfach die Kreuzprodukte zu benutzen und dann in der where-Klausel zu spezifizieren. Allerdings geht die Performance auch gerade bei mehr als 2 tables dabei vor die Hunde.
[/quote]Ich glaube kaum, dass Performance wichtig ist.
Ausserdem glaube ich, dass

from a, b
where a.att = b.att

und

from a
join b
using(att)

gleich behandelt werden. Da wird intern bestimmt optimiert (waer jedenfalls sinnvoll).


Danke für die schnellen Antworten

Zur Multidimmod:
Verlass dich nicht darauf dass nur Theorie dran kommt bzw das ganze Kapitel gar nicht dran kommt. In der letzten Klausur hat er nicht nur eine Modellierungs- sondern auch noch eine mapping/sql Aufgabe dazu gehabt in einer Dimension von ~20 Punkten.

/edit
Ich kann mich wirklich kaum daran erinnern (verdrängt!):
20 Punkte sind mehr oder weniger aus der Luft gegriffen.
Modellierungsteilaufgabe war glaube ich nach mE/R Übungsblatt 10 (A2 - Pannendienst)
SQL/Mapping war ähnlich wie die letzte Aufgabe auf dem Übungsblatt 10 (A3 - Umsatz - Star Shema/SQL)

Musst mal auf deine Ausgabe im sqlite achten: bei „select k.gewinn, […]“ steht dann auch „k.gewinn“ als Spaltenname


hi,

also ich hab noch ne frage zu einer Aufgabe aus dem 6. Übungsblatt zu SQL

Aufgabenstellung:

Bestimmen Sie alle Produkte, die der Kunde mit der Kreditkartennummer
4929092626735051 bestellt hat. Listen Sie im Ergebnis das Datum der Bestellung, die
Artikelbeschreibung, die Menge, den Einzelpreis, sowie einen Gesamtpreis als Produkt
aus Anzahl und Einzelpreis. Sortieren Sie anschließend aufsteigend nach Bestelldatum
und absteigend nach Gesamtpreis.

Tabellenkopf:

bestelldatum | produktbeschreibung | menge | einzelpreis | gesamtpreis

Lösung:

SELECT bestellung.bestelldatum
, produkt.produktbeschreibung
, bestellung_produkt.anzahl AS menge
, produkt.preis AS einzelpreis
, produkt.preis * bestellung_produkt.anzahl AS
gesamtpreis
FROM bestellung_produkt
JOIN produkt
USING (artikelnummer)
JOIN bestellung
ON bestellung_produkt.bestellung = bestellung.id
WHERE bestellung.kunde = 4929092626735051
ORDER BY bestelldatum ASC, gesamtpreis DESC;

Hab dazu ein paar Fragen:

wann benutzt man denn diese punktschreibweise? Immer nu bei JOIN? also, dass man quasi schreibt: produkt.preis statt preis.
wieso steht da nur FROM bestellung_produkt, obwohl bei der bestellung_produkt keine Kreditkartennummer dabei steht?
wird bei JOIN USING benutzt weil in beiden relationen die Artieklnummer drin vorkommt?
und wie muss ich das denn dann mit dem ON verstehen?

Ihr würdet mir mit anworten echt sehr helfen. SQL is echt nicht so meins. :confused:


[quote=me95zuho]
wann benutzt man denn diese punktschreibweise? Immer nu bei JOIN? also, dass man quasi schreibt: produkt.preis statt preis.
[/quote]Immer dann, wenn du gleichnamige Attribute in mehreren Tabellen hast. Also z.B. wenn du Student.name von Professor.name unterscheiden willst/musst.

[quote]
wieso steht da nur FROM bestellung_produkt, obwohl bei der bestellung_produkt keine Kreditkartennummer dabei steht?
[/quote]Weil du von bestellung_produkt nachher noch die anzahl brauchst (steht in deinem select drin). Wie kommst du denn auf Kreditkartennummer?

[quote]
wird bei JOIN USING benutzt weil in beiden relationen die Artieklnummer drin vorkommt?
[/quote]Ja.

[quote]
und wie muss ich das denn dann mit dem ON verstehen?
[/quote]Das weiss ich selbst nicht so genau, glaube aber, dass
from A join B on
das gleiche bedeutet wie
from A, B where
Weiss da jemand genaueres?


Korrekt, genauso ist es. Ich mache in meinen Anwendungen auch lieber die JOIN ON Variante, ist Geschmackssache


[quote=MalteM]

[quote=me95zuho]
wann benutzt man denn diese punktschreibweise? Immer nu bei JOIN? also, dass man quasi schreibt: produkt.preis statt preis.
[/quote]Immer dann, wenn du gleichnamige Attribute in mehreren Tabellen hast. Also z.B. wenn du Student.name von Professor.name unterscheiden willst/musst.

Gut. Ich glaub jetzt blick ich etwas besser durch.

Aber wieso die kreditkartennummer nicht gebraucht wird verstehe ich nicht eil in der aufgabenstellung steht ja:
Bestimmen Sie alle Produkte, die der Kunde mit der Kreditkartennummer
4929092626735051 bestellt hat.