Prof. Dr. W. Kießling 30.01.2002 Lehrstuhl für Datenbanken und Informationssysteme Universität Augsburg Klausur zur Vorlesung Datenbanksysteme I Wintersemester 2001/2002 Name Vorname Matrikelnummer Aufgabe 1 2 3 4 5 6 7 8 Σ Punkte Note: Unterschrift: (Prof. Dr. Werner Kießling)
Aufgabe 1 (Erstellung eines ER-Modells) [8 P] Erstellen Sie ein ER-Modell, das als Basis für eine Rezepteverwaltung dienen kann. Ein Rezept soll dabei aus einem Namen, einer textuellen Anweisung zur Zubereitung und optionalen Angaben zur Dauer der Zubereitung, einer optionalen Beurteilung und einem optionalem Bild bestehen. Natürlich gibt es Beziehungen zu mehreren Zutaten mit Angaben zur Menge (ternäre Relationship). Zutaten sollen im Modell auch unabhängig von den Rezepten existieren. Außerdem soll es möglich sein, Bemerkungen und ein Bild zu jeder Zutat zu speichern. Jede der Zutaten soll einer Zutaten-Kategorie (z.b. Gewürze) zugeordnet sein. Die Zutaten- Kategorien sollen dabei eine Hierarchie bilden. Aufgabe 2 (Umsetzung eines ER-Modells) [4+2 P] Das folgende ER-Modell könnte das in der vorhergehenden Aufgabe erstellte Modell um Angaben zu den "Autoren" und der "Quelle" erweitern. a. Setzen Sie diesen Teil in SQL um. Beachten Sie dabei insbesondere auch die beinhalteten Constraints. b. Wenn möglich, optimieren Sie das entstandene Schema durch geeignete Zusammenfassung von Schemata. Aufgabe 3 (SQL, DRC, TRC und Relationale Algebra) [8 P] Folgende Relationen und die Anfrage seien gegeben: kredite (kreditnummer, bankname) kreditnehmer (name, kreditnummer, kredithöhe) Suche alle Kunden, die einen Kredit über mehr als 5000 bei der HERON -Bank haben! Formulieren Sie obige Anfrage in: a. SQL b. sicherem Domänenkalkül c. sicherem Tupelkalkül d. relationaler Algebra Seite 1 von 4
Aufgabe 4 (SQL Multiple Choice) [1 + 1 + 1 P] Beantworten Sie folgende Aufgaben. 1. Worauf muss man bei Gruppierungen in SQL achten? a. Nach allen nicht aggregierten Projektionsattributen muss gruppiert werden. b. Es darf nur auf aggregierte Attribute projiziert werden. c. Die HAVING Klausel darf keine Aggregationsfunktionen benutzen. d. In der WHERE-Klausel dürfen nur Gruppierungsattribute auftreten. 2. Wenn in durch AVG aggregierten Attributen NULL-Werte auftreten, dann a. wird das ganze Ergebnis zu NULL b. geht das Tupel mit 0 in die Berechnung ein c. wird das Tupel in der Berechnung ignoriert d. wird ein Fehler ausgegeben 3. Wenn zwei Relationen R und S mit einem Natural Join verbunden werden, dann a. muss Relation R mehr Tupel als Relation S beinhalten b. ermittelt man alle Tupel aus R und S, die übereinstimmen c. ermittelt man alle Tupel aus R, die einen natürlichen Join-Partner in S haben d. müssen die Relationen R und S ein gleichbezeichnetes Attribut haben Aufgabe 5 (SQL Anfragen) [2 + 4 + 2 P] Gegeben sei die folgende Relation im Modell eines Unternehmens abteilung (abt, mgr, stellv) Zu jeder Abteilung (gekennzeichnet durch ihren Namen abt) wird dabei der Name des Managers mgr und der seines Stellvertreters stellv angegeben. Gehen Sie grundsätzlich davon aus, dass Namen eindeutig sind und jeder Angestellte des Unternehmens sowohl Manager bzw. Stellvertreter von einer oder auch mehreren Abteilungen sein kann. a. Stellen Sie fest, in welchen Abteilungen der Angestellte Huber Manager ist, aber kein Stellvertreter benannt ist. b. Finden Sie heraus, wie viele leitende Positionen ihre leitenden Angestellten jeweils inne haben. Dabei sind leitende Positionen als Manager oder Stellvertreter definiert. c. Gegeben sei jetzt weiterhin die Relation angestellte(name, adresse, gehalt), welche alle Angestellten der Firma auflistet. Geben Sie alle Angestellten mit der Anzahl ihrer leitenden Positionen aus. Seite 2 von 4
Aufgabe 6 (JDBC Programmierung) [2+2+2+2+2 P] Folgendes JDBC-Programmfragment sei gegeben: import java.sql.*; public class MyClass static try Class.forName("oracle.jdbc.driver.OracleDriver"); catch ( ClassNotFoundException e ) System.out.println("Konnte den JDBC-Treiber nicht laden (" + e.getmessage() + ")."); String dburl = "jdbc:oracle:thin:@ls2pc15.informatik.uni-augsburg.de:1521:instanz2"; String dblogin = "dbpra"; String dbpwd = "dbpra"; Connection dbconn; Statement stmt; public void mymethod(string relation) Die Methode mymethod(string relation) soll den Inhalt einer zu übergebenden Relation ausgeben. Dabei sind die Spaltennamen und ihre Datentypen unbekannt. Verwenden Sie die JDBC-Klasse ResultSetMetaData, um entsprechende Informationen zu bekommen. Programmieren Sie den Rumpf der Methode mymethod(string relation). Gehen Sie dabei folgendermaßen vor: a. Erstellen Sie eine Datenbankverbindung. b. Ermitteln Sie die Anzahl der Spalten. c. Ermitteln Sie mit einer Schleife die Namen und DBMS-Typen aller Spalten und geben Sie sie auf Kommandozeile aus. d. Geben Sie die Daten der ersten Spalte auf Kommandozeile aus. e. Schließen Sie die Datenbankverbindung. Denken Sie auch daran, eventuell auftretende Exceptions abzufangen. Seite 3 von 4
Aufgabe 7 (JDBC, Multiple Choice) [1+1+1 P] Kreuzen Sie alle richtigen Aussagen an. Pro Teilaufgabe können mehr als eine Aussage richtig sein. 1. Bei der Java/JDBC-Programmierung gilt: a. Rekursion kann nicht implementiert werden. b. Es wird ein datenbankspezifischer Treiber benötigt. c. Bei JDBC-Zugriff auf die Datenbank wird kein Passwort benötigt. d. Das Java-Paket java.sql muss importiert werden. e. SQL-Daten vom Typ BLOB können nicht in JDBC 2.0 verarbeitet werden. 2. Für die Klasse Connection gilt: a. Sie verwaltet die Datenbankverbindung. b. Mit ihrer Methode close wird die Datenbankverbindung geschlossen. c. Ihre Methode close kann eine SQLException werfen. d. Sie enthält eine Methode rollback, mit der laufende Transaktionen abgebrochen werden können. e. Mit ihrer Methode commit kann der Auto-Commit-Modus deaktiviert werden. 3. Für die Klasse Statement gilt: a. Sie ist Oberklasse von PreparedStatement. b. Sie ist Unterklasse von CallableStatement. c. Sie kann nur SQL-Anweisungen verarbeiten, die keine Daten zurückliefern. d. Mit ihrer Methode executeupdate können Relationen auf der Datenbank erstellt werden. e. Die Klasse liefert stets ein ResultSet zurück. Aufgabe 8 (Query-Optimierung) [2+2+4 P] Gegeben seien die Relationen mutter(m,k) und vater(v,k), sowie der View eltern(e,k) definiert durch: CREATE VIEW eltern(e,k) AS ((SELECT * FROM vater) UNION (SELECT * FROM mutter)) Zur Berechnung von Großeltern-Beziehungen sei folgende Query gegeben: SELECT x.e FROM eltern x, eltern y WHERE x.k = y.e AND y.k = 'Josef Mohr' a. Transformieren Sie die Query (einschließlich Views) in unoptimierte relationale Algebra. b. Zeichnen Sie den dazugehörigen Operatorbaum. c. Optimieren Sie den Operatorbaum gemäß dem Hill-Climbing-Algorithmus aus der Vorlesung unter Angabe aller Zwischenschritte. Seite 4 von 4