Universität Augsburg, Institut für Informatik Wintersemester 2008/2009 Prof. Dr. W. Kießling 03. Februar 2009 Dr. A. Huhn, M. Endres, T. Preisinger Datenbanksysteme I Semesterklausur Hinweise: Die Bearbeitungszeit beträgt 90 Minuten. Verwenden Sie für ihre Lösungen ausschließlich die gehefteten Blätter des Lösungsteils. Die Heftklammern dürfen nicht entfernt werden. Melden Sie sich bei der Aufsicht, falls die Blätter nicht ausreichen sollten! Es sind nur Hilfsmittel in Papierform zugelassen. Benutzen Sie einen dokumentenechten Stift! Verwenden Sie keinen Bleistift! Benutzen Sie außerdem keinen roten und keinen grünen Stift! Überprüfen Sie, ob ihre Platznummer mit der auf der Klausur vermerkten Platznummer übereinstimmt. Melden Sie sich sofort bei der Aufsicht, falls das nicht der Fall sein sollte. Unterschreiben Sie auf dem Deckblatt des Lösungsteils an der vorgesehenen Stelle mit ihrem vollen Vor- und Nachnamen. Schreiben Sie auf jedes Blatt des Lösungsteils ihren Namen und ihre Matrikelnummer. Die Klausur besteht aus 5 Aufgaben mit insgesamt 40 Punkten: 1. Datenbank Allerlei [9 Punkte] 2. ER-Modellierung [6 Punkte] 3. SQL [10 Punkte] 4. Queryoptimierung [8 Punkte] 5. Parallelverarbeitung von Transaktionen [7 Punkte]
Aufgabe 1: Datenbank-Allerlei, 9 Punkte (1+1+1+2+2+2) Beantworten Sie die folgenden Fragen: a) Erläutern Sie den Unterschied zwischen dem 2-Phasen-Commit und dem 2-Phasen-Sperrprotokoll. b) Wie kann man sich gegen Fehler während des Recovery-Vorgangs schützen? c) Gegeben sind die Relationen R, S und T. R A S A 3 7 T A B 3 1 NULL 2 Geben Sie das Ergebnis folgender Query an: SELECT S.A FROM R, S FULL OUTER JOIN T ON S.A = T.A WHERE R.A = S.A d) Erläutern Sie den Zusammenhang und Unterschied zwischen Wartegraphen und Serialisierungsgraphen. e) Erklären Sie kurz mit natürlicher Sprache, wie unter Verwendung von JDBC standardmäßig Transaktionen gehandhabt werden, und wie man explizit Transaktionen durchführen kann. Skizzieren Sie Java-Code, der bei Transaktionen Phantome erlaubt. f) Fügen Sie in einen anfänglich leeren B*-Baum mit k = 1 die aus Schlüssel und Information bestehenden Paare (5, A), (7, B), (9, C), (21, D), (13, E) in dieser Reihenfolge ein. Geben Sie den am Ende entstehenden B*-Baum an.
Aufgabe 2: ER-Modellierung, 6 Punkte (3+2+1) Gegeben ist folgendes ER-Modell (ohne Angabe von Attributen) für eine spezielle Anwendung. Arbeiter arbeitet_in arbeitet_an Projekt hat_sitz_in Ort Abbildung 1: ER-Modell a) Beschreiben Sie das ER-Modell in Abbildung 1 in natürlicher Sprache. b) Untersuchen Sie das ER-Modell in Abbildung 1 auf redundante Relationsships. Begründen Sie Ihre Antwort. c) Erweitern Sie obiges ER-Modell ohne Angabe von Attributen um die Entitätstypen Angestellter und Beschäftigter. Dabei soll gelten, dass Angestellter wie Arbeiter ein Beschäftigter ist. Ein Angestellter darf nicht zugleich auch Arbeiter sein.
Aufgabe 3: SQL, 10 Punkte (1+2+2+2+3) Gegeben ist das folgende Schema einer Film-Datenbank. Auf die Angabe der Domänen wurde aus Gründen der Übersichtlichkeit verzichtet. Filme FilmStar Produzenten (FilmTitel, Jahr, Länge, StudioName, ProduzentNr) (StarName, Adresse) (ProduzentNr, Name, Adresse) Dabei gilt: Unterstrichene Attribute sind Primärschlüssel. Kursiv geschriebene Attribute sind Fremdschlüssel. Formulieren Sie die folgenden Anfragen in SQL: a) Finden Sie den Namen des Produzenten des Films Star Wars. b) Finden Sie alle Film-Stars, die die gleiche Adresse, aber unterschiedliche Namen haben. c) Finde FilmTitel und Länge der Filme, die in den Disney-Studios produziert wurden. Dabei sollen nur Filme berücksichtigt werden, die nach dem Jahr 1970 produziert wurden oder weniger als 90 Minuten dauern. Die FilmTitel sollen alphabetisch sortiert sein, und kürzere Filme sollen zuerst erscheinen. Im Ergebnis sollen die FilmTitel als Name und die Länge als Filmdauer erscheinen. d) Finden Sie die FilmTitel, die für zwei oder mehrere Filme verwendet wurden. e) Finden Sie die Gesamtfilmlänge für die Produzenten, die mindestens einen Film vor 1930 produziert haben.
Aufgabe 4: Queryoptimierung, 8 Punkte (4+2+2) Folgender Ausschnitt aus dem Schema der Film-Datenbank ist gegeben. Auf die Angabe der Domänen wurde aus Gründen der Übersichtlichkeit verzichtet. Filme StarsIn Produzenten (FilmTitel, Jahr, Länge, StudioName, ProduzentNr) (FilmTitel, Jahr, StarName) (ProduzentNr, Name, Adresse) a) Betrachten Sie folgende Query: SELECT DISTINCT * FROM Produzenten P, Filme F, StarsIn S WHERE P.ProduzentNr = F.ProduzentNr AND F.FilmTitel = S.FilmTitel AND F.Jahr = S.Jahr AND S.StarName = Bruce Willis ; i) Geben Sie die kanonische, nicht optimierte Darstellung dieser Anfrage in relationaler Algebra an. ii) Optimieren Sie diesen relationalen Algebraausdruck mit Hilfe des Hill-Climbing Algorithmus aus der Vorlesung. Geben Sie den Operatorbaum nach den Schritten 2 und 5 an. Schritt 3 (Push Projection) brauchen Sie nicht anzuwenden. b) Betrachten Sie folgende Query: SELECT * FROM StarsIn WHERE StarName = Bruce Willis AND Jahr > 1990; Es gelte: Anzahl Tupel: T StarsIn = 500 Anzahl Blöcke: B StarsIn = 50 Cluster-Index auf StarsIn(StarName) mit I StarName = 20 Nicht-Cluster-Index auf StarsIn(Jahr) Ermitteln Sie die kostengünstigste Ausführung obiger SQL-Query. c) Betrachten Sie folgende Query: SELECT S.StarName FROM StarsIn S, Filme F WHERE S.FilmTitel = F.FilmTitel Es gelte: Anzahl Tupel T StarsIn = 500 und Anzahl Blöcke B StarsIn = 50 Anzahl Tupel T Filme = 500 und Anzahl Blöcke B Filme = 10 Anzahl verfügbarer DB-Cache-Blöcke: M = 101 Parameter für Join-Trefferrate: J = 100 Bestimmen Sie die Gesamtkosten für i) Nested-Loop-Join ii) Index-Join. Dabei existieren ein Cluster-Index auf F.FilmTitel mit I F.FilmTitel = 200 und ein weiterer Cluster-Index auf S.FilmTitel mit I S.FilmTitel = 100.
Aufgabe 5: Parallelverarbeitung von Transaktionen, 7 Punkte (5+2) a) Gegeben seien die Datenbankobjekte A und B, die Transaktionen T1, T2, T3, T4 und ein Schedule S. Dabei sind RLOCKs Lesesperren und XLOCKs exklusive Sperren. S = ( RLOCK(A, T3), UNLOCK(A, T3), XLOCK(A, T1), RLOCK(B, T3), UNLOCK(A, T1), XLOCK(A, T2), UNLOCK(B, T3), RLOCK(B, T1), UNLOCK(A, T2), RLOCK(A, T4), UNLOCK(B, T1), XLOCK(B, T2), UNLOCK(A, T4), UNLOCK(B, T2) ) i) Ist S serialisierbar? Begründen Sie Ihre Antwort. ii) Führt oben dargestellter Schedule S zu einem Deadlock? Begründen Sie Ihre Antwort. b) Geben Sie zu folgendem Serialisierungsgraphen mit den Transaktionen T1, T2, T3 und T4 alle äquivalenten seriellen Reihenfolgen an. T 1 T 2 T 4 T 3