Datenbanken:Prüfung 2006.07.31 Lehner: Unterschied zwischen den Versionen

Aus Tudwiki
Wechseln zu: Navigation, Suche
 
(kein Unterschied)

Aktuelle Version vom 2. September 2010, 21:37 Uhr

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.

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?