Musterlösung 10 - auf Matthias

Werbung
Lösungsvorschlag 10. Zettel DBS SoSe 09
Diese Lösung erhebt keinen Anspruch auf Vollständig- oder Richtigkeit.
Aufgabe 2 (Concurrency Control) 1 8 Punkte
a) Betrachten Sie folgende Historie:
r1(a), r1(b), r2(a), r2(b), w2(a), c2, w1(b), c1
Konfliktpaare: r1(a) w2(a) , r2(b) w1(b)
Konfliktgraph: T1 ↔ T2
Nicht serialisierbar...
(2) Geben Sie die Ausgabe für das strikte 2PL an. Geben Sie dort, wo es im
Protokoll vorgesehen ist, die entsprechenden Locks und Unlocks an. Die
Locks werden schrittweise vergeben, d.h. bei read und write Zugriff erst
ein Read-Lock, dann ein Write-Lock.
- Kein Consistent-Read, keine ReadOnly-Transaktionen
TA1
TA2
rlock(a)
r1(a)
rlock(b)
r1(b)
rlock(a)
r2(a)
rlock(b)
r2(b)
wlock(a) blocked
wlock(b) blocked
DEAD LOCK
(3) Geben Sie die Ausgabe für das Snapshot Isolation Protokoll für obige
Historie an. Geben Sie die Ausgabe für die Variante „first-committer-wins“
an.
TA1
TA2
r1(a0)
r1(b0)
r2(a0)
r2(b0)
w2(a2)
c2
w1(b1)
c1
b) Betrachten Sie folgende Historie:
r1(a), r2(a), w2(a), c2, w1(a), c1
(1) Geben Sie die Ausgabe für das strikte 2PL für obige Historie an. Geben
Sie dort, wo es im Protokoll vorgesehen ist, die entsprechenden Locks und
Unlocks an. Die Locks werden schrittweise vergeben, d.h. bei read und
write Zugriff erst ein Read-Lock, dann ein Write-Lock.
- Kein Consistent-Read, keine ReadOnly-Transaktionen
TA1
TA2
rlock(a)
r1(a)
rlock(a)
r2(a)
w-lock(a) blocked
wlock(a) blocked
DEAD LOCK
(2) Geben Sie die Ausgabe für das Snapshot Isolation Protokoll für obige
Historie an. Geben Sie die Ausgabe für die Variante „first-committer-wins“
an.
TA1
TA2
r1(a0)
r2(a0)
w2(a2)
c2
w1(a1) abort*
• TA1 wird abgebrochen, weil TA2 schon commited hat.
Aufgabe 3 (Relationale Algebra, SQL) 18 Punkte
Gegeben seien die folgenden Relationen (Primary Keys sind unterstrichen):
• Lieferanten (lnr, lname, status, sitz)
• Teile (tnr, tname, farbe, preis)
• Projekte (pnr, pname, ort)
• Lief_Teile_Proj (lnr, tnr, pnr, zeit, menge)
Projektion = proj a,b,c
Selektion = sel p
Join = IXI p
a) Alle Projekte, die von Lieferant "Wegner & Co" mit grünen Teilen beliefert
werden
proj pnr, pname, ort (((Lief_Teile_Proj IxI tnr=tnr
sel farbe=“grün“ (Teile)) IxI lnr=lnr
sel lname=“Wegner & Co“ (Lieferanten)) IxI pnr=pnr
Projekte)
SELECT p.pname, p.ort
FROM Lieferanten l, Teile t, Projekte p, Lief_Teile_Proj ltp
WHERE l.lnr=ltp.lnr
AND t.tnr=ltp.tnr
AND p.pnr=ltp.pnr
AND t.farbe=“grün“
AND l.lname=“Wegner & Co“;
b) Namen der Lieferanten, die kein Projekt in Berlin beliefern.
proj lname (Lieferanten \ ((Lieferanten IxI lnr=lnr
Lief_Teile_Proj) IxI pnr=pnr
sel ort=“Berlin“ (Projekte)))
SELECT l2.lname
FROM Lieferanten l2
WHERE l2.lnr NOT IN (SELECT l.lnr
FROM Lieferanten l, Projekte p, Lief_Teile_Proj ltp
WHERE l.lnr=ltp.lnr
AND p.pnr=ltp.pnr
AND p.ort=“Berlin“);
c) Anzahl und Gesamtwert aller gelieferten Teile von Projekt "Motor 34"
SELECT COUNT(*) as Anzahl, SUM(t.preis) as Gesamtwert
FROM Teile t, Lief_Teile_Proj ltp, Projekte p
WHERE t.tnr=ltp.tnr
AND p.pnr=ltp.pnr
AND p.pname=“Motor 34“;
d) Die Namen aller Projekte mit der Anzahl der bisher geliefertern Teile, wenn
der Gesamtwert der gelieferten Teile > 10000 ist.
SELECT p.pname, SUM(ltp.menge) as Anzahl
FROM Teile t, Lief_Teile_Proj ltp, Projekte p
WHERE t.tnr=ltp.tnr
AND p.pnr=ltp.pnr
GROUP BY p.pname
HAVING SUM(t.preis*ltp.menge)>10000;
Aufgabe 4 (Funktionale Abhängigkeiten, Normalformtheorie) 14 Punkte
Gegeben sei folgende Relation R(A, B, C):
A
B C
test
A
3
test
B
4
test
C
3
a) Geben Sie alle nicht-trivialen funktionalen Abhängigkeiten an, die sich
aus der Relation ergeben.
B → A, B → C, C → A
AB → C, BC → A
b) Gegeben sei eine Relation mit fünf Attributen. Für jedes Attribut der Relation
gibt es keine zwei doppelten Werte, d.h. alle Werte sind für jedes Attribut
unterschiedlich.
Zur Erinnerung:
Definition: Nichtschlüsselattribut
Jedes Attribut, das Bestandteil keines Kandidatenschlüssels ist,
wird als Nichtschlüsselattribut bezeichnet.
(1) Ist die Relation in 2. und 3. Normalform? Begründen Sie kurz ihre Antwort.
- Ja, sie ist in 2. und 3. Normalform, weil sich die Einschränkungen der 2. und 3.
Normalform nur auf Nichtschlüsselattribute beziehen. In der oben genannten Relation gibt
es keine Nichtschlüsselattribute.
(2) Wie sehen die Kandidatenschlüssel der Relation aus?
- Alle 5 Attribute sind Kandidatenschlüssel.
c) Zeigen Sie: Eine Relation in 3. Normalform mit genau 2 Schlüsselkandidaten,
von denen einer aus einem Attribut besteht, ist in BCNF. (Hinweis: Führen Sie
die Annahme, die Relation sei nicht in BCNF zum Widerspruch.)
Gegeben: R ist Relation, a, B sind Schlüsselkandidaten von R, a besteht aus einem Attribut.
B evtl. aus mehr {b1, … bn}. Sei C die Menge der Nichtschlüsselattribute von R.
Annahme: R ist in 3NF
zu zeigen: R ist auch in BCNF
Beweis (per Widerspruch):
damit R nicht in BCNF ist, muss es eine nicht-triviale funktionale Abhängigkeit X → a in R
geben, für die gilt:
(i) X ist kein Superschlüssel von R.
Nehme f.A. f: X → Y in R an, die nicht trivial ist und X kein Superschlüssel von R.
Da R in 3NF, folgt daraus, dass Y prim ist, also in einem Kandidatenschlüssel enthalten ist.
Fall (1): Y = a
Da es nur 2 Schlüsselkandidaten gibt und f nicht-trivial ist, muss X = B sein. Damit
ist X Superschlüssel → Widerspruch zur Annahme.
Fall (2): Y ist Element von B:
Da es nur 2 Superschlüssel gibt und f nicht-trivial ist, muss Y = a sein.
(Ausformuliert: Gäbe es ein Element c, für das gilt c → Y, dann wäre B \ Y vereinigt mit c
auch ein Schlüsselkandidat der Relation. Das allerdings wurde in der Aufgabenstellung
ausgeschlossen.) → Widerspruch zur Annahme.
→ R ist in BCNF
Aufgabe 5 (Data-Warehousing) 20 Punkte
a) SQL spare ich mir mal, stattdessen nur das relationale Schema:
person(id, geschlecht, geburtstjahr, studiengang)
vorlesung(titel, bereich, grund-haupt)
zeitpunkt(id, datum, semester, quartal, jahr)
pruefungsleistung(zp_id, p_id, vl_titel, note)
grund-haupt kann nur die Werte „Grundstudium“ oder „Hauptstudium“ enthalten.
b) Vergleich der Durschnittsnote von Studentinnen im Bereich technische
Informatik mit der Durchschnittsnote aller Studenten jeweilig für die erfassten
Jahre.
Umformuliert:: Für jedes Jahr ist die Durchschnittsnote aller Mädchen im Bereich
Technische Informatik gesucht im Vergleich zur Durchschnittsnote aller Studenten in allen
Bereichen.
SELECT zp.jahr, p.geschlecht, v.bereich, AVG(pl.note) AS Schnitt
FROM person p, pruefungsleistung pl, zeitpunkt zp, Vorlesung v
WHERE p.id = pl.p_id
AND zp.id = pl.zp_id
AND v.titel = pl.vl_titel
GROUP BY ROLLUP(zp.jahr, p.geschlecht, v.bereich)
HAVING ((p.geschlecht=“weiblich“) AND (v.bereich=“technische Informatik“))
OR ((p.geschlecht IS NULL) AND (v.bereich IS NULL));
Das Having-Prädikat filtert die interessanten Zeilen heraus. Das Ergebnis sähe so aus (nur
die grünen Zeilen):
jahr
geschlecht
bereich
Schnitt
2008
männlich
Technische Inf
1,7
2008
weiblich
Technische Inf
2,3
2008
null
Technische Inf
2,0
2008
männlich
Angew. Inf
2,3
2008
weiblich
Angew. Inf
1,7
2008
null
Angew. Inf
2,0
...
2008
weiblich
null
1,7
2008
männlich
null
1,9
2008
null
null
1,8
2009
männlich
Technische Inf
1,7
2009
weiblich
Technische Inf
2,0
2009
null
Technische Inf
2,0
c) Vergleich der Durchschnittsnote der einzelnen Vorlesung mit den
Durchschnittsnoten der Studenten bestimmter Studiengänge jeweilig für die
erfassten Semester.
SELECT zp.semester, vl.titel, p.studiengang, AVG(pl.note) AS Schnitt
FROM person p, pruefungsleistung pl, zeitpunkt zp, Vorlesung v
WHERE p.id = pl.p_id
AND zp.id = pl.zp_id
AND v.titel = pl.vl_titel
GROUP BY ROLLUP(zp.semester, vl.titel, p.studiengang);
Ergebnis liefert auch folgende Zeile, das nehmen wir jetzt mal so hin :)
semester
titel
studiengang
Schnitt
11
null
null
1,7
d) Vergleich der Durchschnittsnoten im Haupt- und Grundstudium jeweilig für die
Geschlechter.
SELECT p.geschlecht, vl.grund-haupt, AVG(pl.note) AS Schnitt
FROM person p, pruefungsleistung pl, Vorlesung v
WHERE p.id = pl.p_id
AND v.titel = pl.vl_titel
GROUP BY ROLLUP(vl.grund-haupt, p.geschlecht);
Herunterladen