Datenbanken:Prüfung 2006.07.31 Lehner
Die Vorlesung im SS2006 und somit auch die Klausur wurde nicht von Prof Lehner gehalten, sondern von Dr. Keller. Die Aufgaben kommen laut Angaben des Lehrstuhls im nächsten Sommersemester als Übungen und können dann hier ergänzt werden.
Inhaltsverzeichnis
Aufgabe 1[Bearbeiten]
Gegebenes ER-Diagramm in Relationenschema überführen. (E=Entity, R=Relation)
PRONR |E: Lieferant|----° LNR ° | p ------------------- | | | | | m | | n | |E: Projekt|--------------<R: Lieferung>-------|E: Teil |-------<R: Komponente> | m | \ m | | n | \ | | | \ ° | | ° Menge | | TNR ------- <R: benutzte Teile> ----------------
Vorschlag:
Lieferant (LNR)
Projekt (PRONR)
Teil (TNR)
Lieferung (LN -> Lieferant(LNR), TN -> Teil(TNR), PN -> Projekt(PRONR))
Benutzte_Teile (PN -> Projekt(PRONR), TN -> Teil(TNR))
Komponente (Teil1 -> Teil(TNR), Teil2 -> Teil(TNR), Menge)
Aufgabe 2[Bearbeiten]
Relationenalgebra. Diverse Relationen zu Fussball gegeben, angegeben werden sollten Ausdrücke für:
Alle Spieler des Spiels Dynamo gegen SC.
Alle Spieler, die noch kein Tor geschossen haben.
Alle Spieler, die mehr als der Trainer verdienen.
Aufgabe 3[Bearbeiten]
SQL (Semester speichert in welchem Semester sich der Student gerade befindet)
studierende(matNr,name,semester)
dozenten(PersNr,name)
vorlesungen(vorlNr,persNr,name)
hören(matrNr,vorlNr)
lesen(PersNr,vorlNr)
a) Alle Studierenden, die 5 oder mehr Semester studieren.
"Vorschlag":
SELECT name FROM studierende WHERE semester > 4;
b) Alle studierenden die nicht die Vorlesung "Datenbanken" hören.
SELECT DISTINCT name FROM studierende WHERE matrNr NOT IN ( SELECT DISTINCT matrNr FROM hören INNER JOIN vorlesungen ON hören.vorlNr=vorlesungen.vorlNr WHERE name="Datenbanken" );
c) Alle Profs, die im Telefonbuch vor ihren Studenten stehen würden (alphabetisch)
Vorschlag:
SELECT a.name FROM dozenten d, studierende s, hoeren h, vorlesungen v WHERE d.persNr = v.persNr and v.vorlNr = h.vorlNr and h.matrNr = s.matrNr and s.name > d.name;
Das halte ich für Quatsch, meine Version:
SELECT DISTINCT name FROM dozenten d WHERE name<=all ( SELECT s.name FROM studierende s, hoeren h, vorlesungen v WHERE d.persNr = v.persNr and v.vorlNr = h.vorlNr and h.matrNr = s.matrNr )
Aufgabe 4[Bearbeiten]
Kanonische Überdeckung F = {A -> E, A u C -> B, E -> G u H, F -> I u J} // Unvollständig. bitte nachbessern
a) schrittweise Links- und Rechtsreduktion
Es war nichts zu reduzieren.
b) 3. Normalform. Konnte man direkt aus den Regeln ablesen.
Aufgabe 5[Bearbeiten]
XQuery
a) Sind folgende XPath-Ausdrücke unterschiedlich, begründen Sie:
//vorlesung[@uhrzeit="11.00"][position()=2] //vorlesung[position()=2][@uhrzeit="11.00"]
Vorschlag: Der erste Ausdruck wählt die zweite Vorlesung aus, die um 11:00 Uhr beginnt, der zweite Ausdruck wählt die zweite Vorlesung aus, falls sie um 11:00 Uhr beginnt.
b) Datei vorlesungen.xml und personal.xml gegeben, ausgeben: Personalverzeichnis in der folgenden Form:
<vorlesungsverzeichnis> <vorlesung> <titel>...</titel> <vorlesender> <nachname>...</nachname> <vorname>...</vorname> </vorlesender> </vorlesung> </vorlesungsverzeichnis>
<personal> <person> <vorname>...</vorname> <nachname>...</nachname> <status>...</status> </person> </personal>
Vorname/Nachname stehen in personal.xml, status steht in vorlesungen.xml.
Man erstelle einen XQuery-Ausdruck der die personal.xml um anzahlVL erweitert.
Vorschlag:
<personal> { let $vor:= doc("vorlesungen.xml")//vorlesung for $x in doc("personal.xml")//person return <person anzahl="{fn:count($vor/vorlesender[nachname=$x/nachname]}" {$x/nachname} {$x/vorname} {$x/status} </person> } </personal>
Aufgabe 6[Bearbeiten]
Transaktionen
a) T1 und T2, gegebenen Ablaufplan analyisieren -> Zyklus, nicht serialisierbar.
b) Ablaufplan abhändern, so daß Dirty Read entsteht.
Aufgabe 7[Bearbeiten]
B*-Baum
a) Bitte füllen sie einen B*-Baum mit folgenden Werten in dieser Reihenfolgen.
s = {3, 7, 1, 26, 4, 14, 12, 6, 2, 15, 13, 8, 10, 5, 11, 9}
Optimierung des Baumes ist nicht gefordert.
b) B*-Baum gegeben mit den Schlüsseln (1,2,4,5,8,11,12,13,15), was passiert wenn man zwei Schlüssel (11,12) daraus entfernt.
c) Was passiert wenn man einen dritten Schlüssel (die 8) entfernt? Gibt es mehrere Möglichkeiten?