Datenbanken:Prüfung 2007.07.31 Lehner

Aus Tudwiki
Version vom 8. August 2013, 11:12 Uhr von 79.241.192.186 (Diskussion)

(Unterschied) Nächstältere Version→ | Aktuelle Version (Unterschied) | ←Nächstjüngere Version (Unterschied)
Wechseln zu: Navigation, Suche

Aufgabe 1[Bearbeiten]

a) Wandeln Sie das gegebene ER-Diagramm in Relationen um:

    (B_ID)    (A_ID)
      |         |
     |B|       |A|
      |(1,*)    |(0,*)
      |         |       (C_ID)                 (D_ID)      (Wert)
      |         |         |                      |           |
      |_______<R1>_______|C|________<R2>________|D|________<R3>
                     (1,6)  (1,1)          (1,1) | (0,*)     |
                                                 |___________|
                                                   (0,*)
  Legende: |X| - Entity
           <X> - Relationship
           (X) - Attribut 

b) Prüfen Sie die Multiplizität von A (0,*) mittels SQL Abfrage:

Prüfen Sie Amin (=0) indem Sie Alle A ausgeben, die nicht in R1 vorkommen

Prüfen Sie Amax (=*) indem Sie Alle A ausgeben, die mehrmals in R1 vorkommen

Aufgabe 2[Bearbeiten]

Die Relationen R(A,B,C) und S(A,B) enthalten die Tupel:

R={(1,1,9),(1,1,5),(7,7,5),(7,6,5)}
S={(1,3),(1,5)}

Geben Sie die Ergebnisse von folgenden Abfragen an:

$ \pi_{A,B}(R)=\{(\ ,\ ),(\ ,\ ),(\ ,\ ),(\ ,\ )\}\, $

$ R\bowtie_{R.A=S.A}S=\{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \} $

$ \rho_S(R)\bowtie_{S.A>T.B}\rho_T(R)=\{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \} $

Aufgabe 3[Bearbeiten]

Gegeben Seien folgende Tabellen, die die Beziehungen zwischen Abteilungen und Mitarbeitern beschreibt.

ABTEILUNG: (ANR A_Name Budget) und MITARBEITER: (MNR ANR)
1 A 5000 1 1
2 B 3000 2 2
3 C 9000 3 3
4 D 15000 4 2
5 1

Zwei Programmierer sollten die Aufgabenstellung lösen: Geben Sie die Namen der Abteilungen aus, die ein Budget von mindestens 5000 pro Mitarbeiter haben.

Dabei kamen folgende Lösungen zu stande:

A:

 SELECT A_Name 
 FROM ABTEILUNG
 WHERE ABTEILUNG.Budget>=(SELECT COUNT(*)*5000 FROM MITARBEITER WHERE MITARBEITER.ANR=ABTEILUNG.ANR)

B:

 SELECT A_Name 
 FROM ABTEILUNG INNER JOIN MITARBEITER ON ABTEILUNG.ANR=MITARBEITER.ANR
 GROUP BY A_Name,Budget 
 HAVING count(MITARBEITER.MNR)*5000<=Budget
 

Welches Ergebnis liefert A, welches B?
Was ist der Grund für die Unterschiede?
Wie kann man B modifizieren (nur geringe Änderungen) dass es das selbe wie A ausgibt?

Aufgabe 4[Bearbeiten]

Es sei folgende Relation gegeben:

AssiDiplBoss(PersNr, Name, Fachgebiet, BossNr, BossName, MatrNr, SName, Semester, Wohnort)

wobei

  • PersNr, Name und Fachgebiet die Attribute des Assistenten sind
  • BossNr, BossName die des Chefs des Assistenten und
  • MatrNr, SName, Semester und Wohnort die eines Studenten, der von dem Assistenten betreut wird

es gibt folgende funktionelle Abhängigkeiten:

$ FD=\{\, $ $ PersNr \to Name \cup Fachgebiet \cup BossNr \cup BossName, $
$ BossNr \to BossName, $
$ MatrNr \to SName \cup Semester \cup Wohnort \cup PersNr \cup BossNr\} $

Welche Attribute sind Schlüsselkandidaten? Begründung

Welche Attribute (oder Mengen von Attributen) kommen als Primärschlüsser der Relation in Frage? Begründung

Bilden Sie die kanonische Überdeckung!

Aufgabe 5[Bearbeiten]

 <vorlesungsverzeichnis>
   <vorlesung uhrzeit="13:00">
     <titel> ... </titel>
     <vorlesender>
       <nachname> ... </nachname>
       <vorname> ... </vorname>
     </vorlesender>
     ...
   </vorlesung>
 </vorlesungsverzeichnis>
 <personal>
    <person>
       <vorname>...</vorname>
       <nachname>...</nachname>
       <status>...</status>
    </person>
 </personal>

a) XPath: Nachname desjenigen, der die Datenbankvorlesung hält

b) Gibt es einen Unterschied zwischen den beiden XPath-Ausdrücken? //vorlesung[position()=2][@uhrzeit="11:00"] //vorlesung[@uhrzeit="11:00"][position()=2]

c) Geben Sie eine XQuery-Programm an, welches das Attribut anzahlVL mittels dem Nachnamen und vorlesung.xml berechnet. Dabei ist der Nachname eindeutig. Das Ergebnis soll folgende Form besitzen:

 <personal>
   <person anzahlVL="3">
     <nachname>Lehner</nachname>
     <vorname>Wolfgang</vorname>
     <status>Professor</status>
   </person>
 </personal>

Aufgabe 6[Bearbeiten]

Die Werte A und B sind vor Beginn der Transaktionen beide 0.

T1 T2
read(A) read(B)
read(B) read(A)
if A==0 B++ if B==0 A++
write(B) write(A)

a) Die Transaktionen sollen seriell ausgeführt werden welche möglichen Ergebnisse sind möglich? (A= ,B= )
Ist die Integritätsbedingung A*B=0 erfüllt?

b) Geben Sie einen Ablauf an bei dem die Integritätsbedingung nicht erfüllt ist

c) Ist es möglich T1 und T2 in einer Weise parallel auszuführen, so dass die Integritätsbedingung erfüllt ist? Geben Sie diese an oder begründen Sie warum es nicht möglich ist!

Aufgabe 7[Bearbeiten]

Fügen Sie die folgenden Werte in einen B*-Baum mit k=2 ein. (streng nach Algorithmus - kein Verschieben von Werten zwischen Blättern) und geben sie jede Veränderung in der Struktur an! (5,7,11,13,9,3,4,15,2,26,1,6,14,8,10) -> (genaue Reihenfolge fällt mir natürlich nicht mehr ein aber so in der Art)

Was passiert, wenn man aus diesem B*-Baum die Knoten 11 und 12 enfernt?

                          [4|8|12| ]
                   _______| | |_  \___________
                  |         |   |             |
          [1|3|4| ]  [5|6|8| ] [9|10|11|12]   [13|14| | ]

Was passiert, wenn man zusätzlich noch den Knoten 8 entfernt? Gibt es mehrere Möglichkeiten?