Klausur Musterlösung Datenbanken und Informationssysteme I

Werbung
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
Herunterladen