DBIS I, WS 2002/2003, 11.1.2003 Klausur Musterlösung Datenbanken und Informationssysteme I Wintersemester 2002/2003 1.Klausur Samstag 11.1.2003 11:00 bis 12:30 Uhr Raum AM (90 Minuten - keine Hilfsmittel) Bitte schreiben Sie leserlich! Es ist Platz gelassen für die Antwort. Sie können die Rückseiten mit benutzen, falls Ihnen der Platz nicht ausreicht. Name………………. :_____________________________ Matrikelnummer…… :_____________________________ Studiengang………... :_____________________________ Punktzahl Aufgabe Aufgabe Aufgabe Aufgabe Aufgabe Aufgabe Aufgabe 1 2 3 4 5 6 7 erreicht Von 12 6 7 7 16 12 12 insgesamt Anzahl Punkte…....... :_____________________________ Note………………... :_____________________________ Seite 1 von 11 DBIS I, WS 2002/2003, 11.1.2003 1. Prolog Gegeben sind die Tabellen % liefert ( Wer liefert ( vobis ... , Teil , Preis , Lieferzeit ) , pc500 , 2000 , 4 ) % auftrag ( Kunde , Teil ) auftrag ( meier , pc500 ) ... % teil ( teil ( ... % lieferant ( lieferant ( ... Teil , Bezeichnung ) pc500 , lowendpc ) Wer vobis , Ort , ulm ) ) Schreiben Sie folgende Anfragen in Prolog auf: Wer bestellt ein Teil, das von allen geliefert wird? m1(Kunde) :- auftrag( Kunde, Teil), \+ einer_liefert_teil_nicht(Teil). einer_liefert_teil_nicht( Teil ) :lieferant( Wer, _ ), \+ liefert( Wer, Teil, _, _). Welcher Lieferant liefert am schnellsten einen pc500 ? M2( Wer ) :- liefert( Wer, pc500, _ , Tage ) , \+ jemand_liefert_pc500_schneller_als( Tage ) . jemand_liefert_pc500_schneller_als( Tage ) :- liefert( _ , pc500, _, Tage2 ) , Tage2 < Tage . Seite 2 von 11 DBIS I, WS 2002/2003, 11.1.2003 2. Anfrageoptimierung (2+3+1 Punkte) Transformieren Sie folgende SQL-Anfrage in einen (unoptimierten) logischen Anfragebaum: (3 Punkte) SELECT B.Besitzer FROM Buchbesitz B, Buchliste L WHERE B.ISBN = L.ISBN AND L.Autor=“Schreiber“ PB.Besitzer SB.ISBN=L.ISBN and L.Autor=„Schreiber“ X Buchbesitz B Buchliste L Optimieren Sie den unoptimierten logischen Anfragebaum: (3 Punkte) PB.Besitzer |X|B.ISBN=L.ISBN Buchbesitz B SL.Autor=„Schreiber“ Buchliste L Seite 3 von 11 DBIS I, WS 2002/2003, 11.1.2003 Transformieren Sie den optimierten logischen Anfragebaum in einen (möglichst effizienten) Iteratorbaum, in dem Sie die Operatoren im logischen Anfragebaum durch Iteratoren ersetzen. Als Iteratoren stehen zur Verfügung: - Standard-Select - Nested-Loop-Join - Merge-Join - Projektion Die Relationen Buchbesitz und Buchliste seien nach dem Attribut ISBN sortiert und so groß, dass die Relationen nicht mehr in den Hauptspeicher passen (auch nicht nach Ausführung der Selektionen). (1 Punkt) ProjektionB.Besitzer Merge-JoinB.ISBN=L.ISBN Buchbesitz B behält die Reihenfolge der Tupel der Eingangsrelation bei Standard-SelectL.Autor=„Schreiber“ Buchliste L Seite 4 von 11 DBIS I, WS 2002/2003, 11.1.2003 3. Deduktive Datenbanken (2+5 Punkte) Gegeben sei die Relation besitz(Person, Buch), die ausdrückt, dass eine Person ein bestimmtes Buch besitzt. Weiterhin sei die Relation verleiht_an(PersonA, PersonB) gegeben, die ausdrückt, dass eine bestimmte Person PersonA an eine andere Person PersonB (eigene und fremde) Bücher verleihen würde. Formulieren Sie ein Prädikat kann_lesen(Person, Buch). Dieses Prädikat bestimmt, welche Person welches Buch lesen kann, in dem die Person (a) ein eigenes Buch liest, oder (b) ein geliehenes Buch liest (das Buch kann direkt oder über mehrere Personen verliehen sein). (2 Punkte) Lösung : kann_lesen(Person, Buch):-besitz(Person, Buch). kann_lesen(Person, Buch):-kann_lesen(PersonA, Buch), verleiht_an(PersonA, Person). Geben Sie zu diesem Prädikat den naiven Berechnungsalgorithmus an (5 Punkte): kann_lesen(Person, Buch) = {}; i = 0; do i = i+1; kann_leseni-1(Person, Buch) = kann_lesen(Person, Buch); kann_lesen(Person, Buch) = kann_leseni-1(Person, Buch) U besitz(Person, Buch) U P2,4(verleiht_an(PersonA, Person) |X|1=1 kann_leseni-1(PersonA, Buch))); i-1 while(kann_lesen (Person, Buch) != kann_lesen(Person, Buch)); Seite 5 von 11 DBIS I, WS 2002/2003, 11.1.2003 4. JDBC/SQLJ (2+2+5 Punkte) SQLJ: Was wird bei der optionalen Online-Prüfung während der Kompilierung überprüft? (2 Punkte) - Analyse der eingebetteten SQL-Operationen durch Datenbankaufrufe (nicht für DDL-Operationen (z.B. Create)) - Kompatibilitätsprüfung der Java-Ausdrücke zu den Typen der Spalten der Datenbankobjekte SQLJ: Gegeben seien 2 Relationen Buchliste und Besitz. Die Relation Buchliste enthalte 3 Attribute Autor, Buchtitel und ISBN, alle drei Attribute seien vom Typ CHAR(255). Die Relation Buchbesitz enthalte die Attribute ISBN und Besitzer, jeweils vom Typ CHAR(255). Schreiben Sie ein SQLJ-Programm, welches das Resultat der folgenden Anfrage ausgibt: Wer besitzt alle Bücher des Autors „Schreiber“? Verwenden Sie dazu die Positionsiteratoren von SQLJ. (5 Punkte) #sql iterator ByPos(String); ByPos iter; String Besitzer; #sql iter = { SELECT B.Besitzer FROM Buchbesitz B WHERE not exists (SELECT * FROM Buchliste L WHERE L.Autor=’Schreiber’ and L.ISBN NOT IN (SELECT BB.ISBN FROM Buchbesitz BB WHERE BB.Besitzer=B.Besitzer)) }; while(true) { #sql { FETCH :iter INTO :Besitzer }; if(iter.endFetch()) break; System.out.println(“Besitzer:“ + Besitzer ); } iter.close(); Seite 6 von 11 DBIS I, WS 2002/2003, 11.1.2003 5. Transaktionen (3+1+3+3+6 Punkte) Geben Sie zu dem folgenden Schedule den zugehörigen Abhängigkeitsgraphen an. Tragen Sie neben den Abhängigkeiten auch die Objekte ein, auf die sich die Abhängigkeiten beziehen. T1 T2 read(b) write(b) T3 T4 write(b) read(b) read(a) read(c) write(a) write(c) read(a) write(c) read(a) write(c) Lösung: Der Abhängigkeitsgraph des Schedules a) sieht wie folgt aus: a, c T2 T4 a, c T1 b, c b b T3 Ist der Schedule konfliktserialisierbar? Bitte begründen Sie Ihre Meinung (1 Satz) – bewertet wird nur die Begründung: Der_Skedule_ist_konfliktserialisierbar_da_der_zugehörige_Abhängigkeitsgraph_keine_Zyklen Enthält.______________________________________________________________________ Falls ein beliebiger Schedule konfliktserialisierbar ist, bedeutet dies, dass er auch serialisierbar ist? Bitte begründen Sie Ihre Meinung (1-2 Sätze) – bewertet wird nur die Begründung: Seite 7 von 11 DBIS I, WS 2002/2003, 11.1.2003 Ja,_denn_es_kann_aus_dem_zugehörigen_Abhängigkeitsgraphen_immer_ein___________ Schedule_Erzeugt_werden,_dass_keine_Abhängigkeiten:_jüngere_Operation___________ Abhängig_von_älterer_Operation_aufweist.______________________________________ Können Transaktionen, die nach dem 2-Phasen-Sperr- Protokoll serialisiert werden, durch einen Deadlock verklemmen? Bitte begründen Sie Ihre Meinung (1-2 Sätze) – bewertet wird nur die Begründung: Ja, denn die Regeln von 2 Phasen Sperren verhindert nicht, dass z.B. zwei Transaktionen __ jeweils ein Objekt halten, dass die jeweils andere Transaktion anfordert.________________ Bei der parallelen Validierung wird die zu validierenden Transaktion Tneu gegen ältere Transaktionen getestet Talt i. Geben Sie die drei Klassen an, in die diese Talt i aufgeteilt werden (d.h., schreiben Sie auf, welche Transaktionen in Klasse 1 bzw. Klasse 2 bzw. Klasse 3 einsortiert werden). Geben sie weiterhin die Formelen für die durchzuführenden Validierungs-Tests dieser Klassen an. a) Klasse1: Alle Transaktionen Talt i die ihre Schreibphase beendet haben bevor Tneu in die_ Lesephase kommt.________________________________________________ Test1: kein Test notwendig_______________________________________________ b) Klasse2: Alle Transaktionen Talt i die ihre Schreibphase beendet haben nachdem_______ Tneu in die Lesephase kommt.________________________________________ Test2: WriteSet(Told) ⋀ ReadSet(Tnew) = ∅_____________________________ c) Klasse3: Alle Transaktionen Talt i die ihre Schreibphase_noch nicht abgeschlossen hatten als Tneu in die Validierungsphase ging._________________________________ Test3: WriteSet(Told) ⋀ (ReadSet(Tnew) ⋁ WriteSet(Tnew)) = ∅_____________ Seite 8 von 11 DBIS I, WS 2002/2003, 11.1.2003 6. Recovery (3+3+6 Punkte) Tragen Sie in die folgende Tabelle die vier Strategien für das jeweils mögliche Einbringverfahren für die Recovery „Update in Place“ ein (steal&force, steal&⌝force, ⌝steal& force, ⌝steal&⌝force). Benötigt keine Redo-Operation Benötigt keine Undo-Operation ⌝steal& force Benötigt die Undo- Operation steal&force Benötigt die Redo- Operation ⌝steal&⌝force steal&⌝force Welche Operationen werden an einem Sicherungspunkt in welcher Reihenfolge durchgeführt? 1. Alle Log-Records werden auf Platte gesichert.____________________________ 2. Alle veränderten Pufferspeicherblocks werden auf Platte gesichert.____________ 3. Ein Record <Sicherungspunkt> wird ins Logbuch geschrieben. Dieser enthält die_ Transaktionsnummern aller zur Zeit des Sicherungspunktes aktiven Transaktionen. Vervollständigen Sie den folgenden Text und geben Sie damit an, wann bei der Einbringstrategie ⌝steal& force die Operation Undo(Ti) bzw. Redo angewendet werden müssen und welchen Fehlerfall sie damit verhindern. Im Fehlerfall stellt das Datenbanksystem anhand des Logbuchs fest, welche Transaktionen Ti ein __ Commit_ ins Logbuch geschrieben haben, und führt für diese Transaktionen ein Redo(Ti) aus. Dies kann notwendig sein, weil ... ...die Änderung der Datenbankrelation evtl. nur im Hauptspeicher vorgenommen ___ wurde und noch nicht auf die Platte zurückgeschrieben wurde.__________________ Weiterhin stellt das Datenbanksystem fest, welche Transaktionen Ti ein ____ Start _______ in das Logbuch geschrieben haben, aber noch kein ___Commit___ in das Logbuch geschrieben haben. Für diese Transaktionen Ti wird ein Undo(Ti) ausgeführt. Dies kann notwendig sein, weil ... Dies kann notwendig sein, weil die Änderungen der Datenbank evtl. schon auf Platte übernommen wurden.__________________________________________________ 7. Integrität (6+6 Punkte) Seite 9 von 11 DBIS I, WS 2002/2003, 11.1.2003 Gegeben ist das Datenbankschema aus Aufgabe 1. Formulieren Sie als Integritätsbedingungen im Tupelkalkül und in SQL: a) Jeder Lieferant liefert auch Disketten b) Es gibt keinen Lieferanten der nur ein Teil liefert a) ∀ l ∈ lieferant (∃ d ∈ liefert ( d.Teil = ’disk’ ∧ d.Wer = l.Wer) not exist ( select * from lieferant l where l where not ( esist select * from liefert d where ( d.Teil = ’disk’ and d.Wer = l.Wer) )) __________________________________________________________________________ b) ∀ d ∈ liefert (∃ l ∈ liefert ( d.Wer = l.Wer ∧ d.Teil =! l.Teil) not exist ( select * from liefert where not ( exist select * from liefert where ( d.Wer = l.Wer and d.Teil <> l.Teil )) __________________________________________________________________________ Seite 10 von 11 DBIS I, WS 2002/2003, 11.1.2003 Seite 11 von 11