View Full Version : [FRAGE] - 19.Nov 2003 Beispiel 3 "Relationale Algebra"
Hi Leute!
Kann mir vielleicht jemand weiterhelfen, ich hab keine Ahnung, wie man diese Beispiele lösen kann! Beim ersten, bin ich halbwegs draufgekommen, aber bei den anderen keine Ahnung!
Wäre über jede Hilfe dankbar!
MFG mrangel
Hi Leute!
Kann mir vielleicht jemand weiterhelfen, ich hab keine Ahnung, wie man diese Beispiele lösen kann! Beim ersten, bin ich halbwegs draufgekommen, aber bei den anderen keine Ahnung!
Wäre über jede Hilfe dankbar!
MFG mrangel
also:
2. zuerst machat du ne Projektion auf das attribut h auf Y
zu bekommst: 62, 57,12,36
dann benennst du h in f um, also ist deine erste menge f1={62,57,12,36}
dann projezierst du nochmals f,h auf Y, du bekommst:
f h (wird zu g)
57 62
42 57
91 12
42 36
36 62
42 86
dann änderst du h -> g, dh du hast dann in der Menge oben statt h eine g als attribut, anschließend projezierst du g:
g --> wird zu f(2)
62
57
12
36
86
dann benennst du g in f um
das vereinst du dann mit der ersten menge oben (f1) mit f(2)
und bekommst:
f
62
57
12
36
86
dann noch die selektion f=<36
Ergebnis:
f
62
57
36
86
oopster war schneller :)
Also du hast zwei Relationen X und Y mit den dazugehörigen Tupeln.
Ich gehe bei den Bsp von innen nach außen, wobei es gut ist, sich auch schon Gedanken darüber zu machen, was die überhaupt wollen, meistens kann man Projektionen, Selektionen etc. vereinfachen.
(1) Projektion der Spalten F und J der Relation X, das wird mittels natural join mit Y verbunden. =>
F J H
------
91 91 12
36 57 62
42 48 36
42 48 86
42 48 57
Dann wird die Spalte F in G umgewandelt und alle Werte G=42 selektiert =>
42 48 36
42 48 86
42 48 57
Tja und so geht das mit den anderen Beispielen auch. Ist nicht so problematisch.
(3) Wenn man's genau nimmt, würde
SELECT F,G
FROM (SELECT F,G,H FROM X NATURAL JOIN Y WHERE F>=H)
dort stehen, aber die haben das gleich vereinfacht auf
SELECT F,G FROM X NATURAL JOIN Y WHERE F>=H
3.Bsp:
Übersetzten in SQL
also ich habe mir angewöhnt gleich mal das so hinzuschreiben
SELECT
FROM
WHERE
dann schaust du auf joins, naturaljoins usw. in usserem Fall:
X nat. join Y, d.h.
FROM X,Y
WHERE X.F=Y.F
AND X.H=Y.H
dann schaust du die Projektion an --> du brauchst F,G,H, also:
SELECT X.F,X.G,X.H
FROM X,Y
WHERE X.F=Y.F
AND X.H=Y.H
dann hast du eine selektion mit F >=G
SELECT X.F,X.G,X.H
FROM X,Y
WHERE X.F=Y.F
AND X.H=Y.H
AND X.F >= X.G
dann wieder eine Projektion
SELECT X.F,X.G
FROM X,Y
WHERE X.F=Y.F
AND X.H=Y.H
AND X.F >= X.G
so, ist glaube ich nicht ganz richtig in der reihenfolge aber relationale Algebra ausdruck macht da redundante arbeit meines erachtens (zweimal Projektion auf F,G,...? vielleicht hat da jemand eine bessere und anschaulichere erklärung)
WICHTIG: doppelte einträge werden in SQL nicht automatisch eliminiert, d.h.
SELECT DISTINCT X.F,X.G
FROM X,Y
WHERE X.F=Y.F
AND X.H=Y.H
AND X.F >= X.G
oder
SELECT DISTINCT F,G
FROM X NATURAL JOIN Y ON F,G
WHERE F >= G
der fup hat das 3 beispiel kürzer und besser erklärt, so stimmts!
btw: http://hades.gothic.at/iforum/showthread.php?p=137058 da gibts ne diskussion über DISTINCT
lg
ich versteh das noch immer nicht...wieso kommt bei der projektion beim 2. bsp. 62, 57, 12 und 36 raus? ich dachte projektion ist einfach um anzugeben das das dann als ergebnis dortstehen soll...demnach müssten ja dann die zahlen 62 und 86 auch dazugehören weil die ja auch im attribut H aufscheinen? oder hab ich da was komplett falsch verstanden??
ich versteh das noch immer nicht...wieso kommt bei der projektion beim 2. bsp. 62, 57, 12 und 36 raus? ich dachte projektion ist einfach um anzugeben das das dann als ergebnis dortstehen soll...demnach müssten ja dann die zahlen 62 und 86 auch dazugehören weil die ja auch im attribut H aufscheinen? oder hab ich da was komplett falsch verstanden??
in der relationalen Algebra werden Duplikate automatisch eleminiert
in SQL nicht, daher gibt's den Befehl "DISTINCT"
lg
ich versteh das noch immer nicht...wieso kommt bei der projektion beim 2. bsp. 62, 57, 12 und 36 raus? ich dachte projektion ist einfach um anzugeben das das dann als ergebnis dortstehen soll...demnach müssten ja dann die zahlen 62 und 86 auch dazugehören weil die ja auch im attribut H aufscheinen? oder hab ich da was komplett falsch verstanden??
ich versteh leider deine Frage nicht!
Nov.03-Aufgabe3-GruppeA-Bsp2 löse ich folgendermaßen:
ich fange mit jener Tabelle Y an, die links innen im Ausdruck steht, an:
die Tabelle Y wird auf die Spalten F und H projiziert; dh ich nehme die Tabelle Y her und streiche alle anderen Spalten weg, sodass nur F und H übrigbleiben; hier ist es jedoch so, dass es keine Spalten zum wegstreichen gibt, dh die Tabelle Y bleibt vorerst wie sie ist, um jedoch zu verdeutlichen, dass es sich um eine bereits "verarbeitete" Tabelle handelt, nenne ich die Tabelle nach diesem Schritt Y1;
nun wird die Spaltenüberschrift der Tabelle Y1 von H in G geändert und in Y2 gespeichert(sonst bleibt die Tabelle wiederum unverändert);
dann folgt eine Projektion der Tabelle Y2 mit dem Tabellenschema (F, G) auf die Spalte G, dh die Spalte F wird gestrichen, Tabelle nach diesem Schritt heißt Y3;
es folgt eine Umbenennung der Tabelle Y3: die Spaltenüberschrift G wird in F geändert und als Tabelle Y4 gespeichert;
nun geht es hier nicht mehr weiter und ich bearbeite Y im rechten inneren Teil des Ausdrucks:
es ist zu beachten, dass diese Tabelle Y hier die ursprüngliche ist;
projiziere Y auf die Spalte H, dh ich streiche die Spalte F weg, speichere die Tabelle in Yr1 ab;
nun folgt eine Spaltenüberschriftsänderung der Tabelle Yr1: Spaltenüberschrift H wird in F geändert, speichere neue Tabelle in Yr2
nun folgt die Vereinigung der Tabellen Y4 und Yr2 (jede Zeile die entweder in Y4 oder in Yr2 vorkommt wird in diese neue Tabelle Yneu geschrieben, falls diese Zeile in Yneu schon vorhanden ist, kann sie weggelassen werden);
auf die Tabelle Yneu wird nun eine Selektion angewendet: alle Zeilen mit F>=36 sind erwünscht, dh alle mit F<36 werden weggestrichen;
ist sehr langatmig, aber hoffentlich unmissverständlich
grandios erklärt!
dachte schon, ich kapier diesen Mist nie!
Danke dir von herzen! :)
1) hab mal ne frage in welcher reihenfolge die relationale algebra abgearbeitet wird:
zb. pi A,D (X) natJOIN y
wird hier zuerst projiziert und dann gejoint oder umgekehrt??? bin mir da nicht sicher, und die ergebnisse sind unterschiedlich
2) wenn ich SQL -> rel.Algebra umwandeln soll
zb. select A, B, F from Y natural join X where B < C
ist die reihenfolge dann egal?
also
sigma B<C (pi A,B,F (Y natJOIN X))
gleichbedeutend mit
pi A,B,F (sigma B<C (Y natJOIN X)) ????????????????
thx in advance :rolleyes:
vBulletin® v3.7.1, Copyright ©2000-2009, Jelsoft Enterprises Ltd.