Hochschule Karlsruhe – Technik und Wirtschaft Sommersemester 2009 Fakultät: Seite 1/12 Fakultät für Informatik und Wirtschaftsinformatik Semester: Prüfungsfach: Datenbanken I Dozent: Dr. Peter Steininger Hilfsmittel: Ein handbeschriebenes DIN-A4-Blatt Name: Fachnummer: Zeit: BC3 D4 I 3B71 I 4D51 60 Minuten Matrikelnummer: Hinweise: Tragen Sie unbedingt Ihren Namen und Ihre Matrikelnummer ein! Die angegebenen Punktzahlen sind gleichzeitig als maximale Bearbeitungszeit aufzufassen. Orientieren Sie sich beim Antworten an dem Freiraum, der jeweils nach der Aufgabenstellung freigelassenen ist. Falls Ihnen der Platz – wegen einer Streichung zum Beispiel – nicht ausreicht, verwenden Sie bitte die Rückseiten der Aufgabenblätter. Das verwendete Datenmodell und dessen Daten sind im Anhang angegeben! 1. Aufgabenblock zum Thema „DBMS im Allgemeinen“ – 10 Punkte 1.1 Wofür steht die Bezeichnung SQL? - 2 Punkt 1.3 Erklären Sie unter Bezug auf Datenbanken den Begriff „Zugriffslücke“. - 4 Punkte 1.4 Mit welcher Technik versucht eine Datenbank die „Zugriffslücke“ zu minimieren? - 2 Punkte Sommersemester 2009 Prüfungsfach: Datenbanken I Seite 2/12 Matrikelnummer: 1.5 Was bewirken die Indizes in einer Datenbank und warum bewirken sie dies? - 2 Punkte Sommersemester 2009 Prüfungsfach: 2. Datenbanken I Seite 3/12 Matrikelnummer: Aufgabenblock zum Thema „Datenbankabfragen“ – 20 Punkte 2.1 Schreiben Sie zu den angegebenen Ausgaben die entsprechende SQL-Anweisung 2.1.1 Ausgabe der Kunden, Kundengruppe und der Telefonnummer sortiert nach Name. 3 Punkte strName strKundengruppenname strTelefonnummer ------------------------------------------------------Christine Geschäftskunde 491743333333 Dieter Privatkunde 491727654321 Hans Privatkunde 491711234567 Madonna VIP-Kunde 491754444444 Ralf Geschäftskunde 491732222222 Schröder VIP-Kunde 491709988776 2.1.2 Ausgabe der Kundengruppen mit deren Anzahl an Kunden, absteigend sortiert nach Kundengruppen - 4 Punkte Kundengruppenn -------------------------------------------------VIP-Kunde Privatkunde Geschäftskunde Kundenanzahl -----------2 2 2 Sommersemester 2009 Prüfungsfach: Seite 4/12 Datenbanken I Matrikelnummer: 2.2 Datenveränderung 2.2.1 Sie stellen fest, dass Sie einen neuen Kunden einfügen müssen, der einer neuen Kundengruppe angehört und eine neue Telefonnummer hat. Schreiben Sie die SQLStatements mit den folgenden Daten: - 3 Punkte strName strKundengruppenname strTelefonnummer Michael Billigtarif 491778765430 2.2.2 Erläutern Sie kurz, auf welcher Basis Sie die Reihenfolge der Einfügeanweisungen bestimmt haben und woran dies liegt? - 3 Punkte 2.3 Die Regulierungsbehörde für Telekommunikation möchte wissen welche Rufnummern in der Datenbank ohne Kundenreferenz gespeichert sind. Wie lautet die SQL-Anweisung dafür, falls es solche Telefonnummern gäbe. - 3 Punkte Sommersemester 2009 Prüfungsfach: Datenbanken I Seite 5/12 Matrikelnummer: 2.4 Sie sollen für jeden Kundennamen die zu einzelnen Gesprächen gehörende Gesprächsdauer berechnen. Schreiben Sie das entsprechende SQL-Statement. Sie können die Funktion DATEDIFF (minute , Startdatum , Enddatum) als gegeben voraussetzen, welche Ihnen die Differenz von zwei Datumswerten in Minuten errechnet. - 4 Punkte Sommersemester 2009 Prüfungsfach: 3. Datenbanken I Seite 6/12 Matrikelnummer: Aufgabenblock zum Thema „Programmieren von DBMS mit Java“ – 20 Punkte 3.1 Gegeben sei folgendes SQLJ-Programm, welches für alle Kunden die gespeicherten Telefonnummer ausgeben soll. Grundlage für diese Aufgabe ist das erweiterte Datenmodell mit der Ergänzung der Mehrfachtelefonnummer. package MakeMeReady; import java.sql.*; import sqlj.runtime.ref.DefaultContext; import javax.swing.JOptionPane; // // Frage 3.2 // // // Frage 3.4 // #sql iterator Kunden public class Exam { public static void main(String[] args) { try { String dburl="jdbc:oracle:thin:"+"@10.10.10.10:1521:XYZ"; String dbdriver="oracle.jdbc.driver.MyDBMSDriver"; Class.forName(dbdriver).newInstance(); DefaultContext context=new DefaultContext( DriverManager.getConnection(dburl)); DefaultContext.setDefaultContext(context); System.out.println("Alle Kunden und deren Rufnummer:"); // // Frage 3.4 // Sommersemester 2009 Prüfungsfach: Datenbanken I Seite 7/12 Matrikelnummer: System.out.println("\n\nKunde '" + args[0] +"' hat telefoniert:"); // // Frage 3.5 // }// try catch (Exception e1) { e1.printStackTrace(); } // e1 } // main } // class MakeMeReady Sommersemester 2009 Prüfungsfach: Seite 8/12 Datenbanken I Matrikelnummer: 3.2 Wozu dient die Zeile bei Kommentar // Frage 3.2 ? - 3 Punkte 3.3 Was macht der SQLJ-Vorübersetzer aus einem „#sql iterator“? - 3 Punkte 3.4 Schreiben Sie den Iterator und eine SQL-Anweisung, die alle Kunden und deren Rufnummern ausgibt. - 7 Punkte 3.5 Schreiben Sie den Iterator und eine SQL-Anweisung, die für einen vorgegebenen Kunden alle Telefonumsätze wie im folgenden Beispiel ausgibt: - 7 Punkte strName strTelefonnummer -------------------------------Dieter 491727654321 Dieter 491727654321 dtStart ----------------------2009-07-04 20:54:47.700 2009-07-04 20:57:33.477 dtEnd ----------------------2009-07-04 20:54:47.700 2009-07-04 20:57:33.477 Gesprächsdauer -------------0 0 Sommersemester 2009 Prüfungsfach: Seite 9/12 Datenbanken I Matrikelnummer: 4. Aufgabenblock zum Thema „Transaktionen“ – 10 Punkte Gegeben ist folgendes Szenario zweier parallel ablaufender Transaktionen, die alleine (d.h. es gibt keine weiteren Transaktionen) auf dem gleichen Datenbestand arbeiten: Zeile/Zeit Transaktion T1 1 Transaktion T2 UPDATE emp 3 SET sal = 9999 4 WHERE empno = 666; SET TRANSACTION t2 -- Mittagspause ISOLATION LEVEL READ 6 COMMITTED; 7 BEGIN TRAN 8 SELECT empno 9 Ausgabe T2 t1 BEGIN TRAN 2 5 Ausgabe T1 t3 FROM emp 10 WHERE empno < 777; 11 COMMIT; 12 13 14 15 16 17 18 19 20 21 t4 COMMIT; 1 row(s) affected 22 empno 23 ----------- 24 555 25 666 26 27 28 29 30 Die Transaktion T2 wartet somit bis nach Zeitpunkt t4. 2 row(s) affected Sommersemester 2009 Prüfungsfach: Datenbanken I Seite 10/12 Matrikelnummer: 4.1 Warum wartet die Transaktion T2 bis zum Zeitpunkt t4? – 5 Punkte Verwenden Sie in Ihrer Begründung bitte die Begriffe Dirty Read, Sperrgranulat, Transaktion, Transaktionsebene, X-Lock, Zeilensperre. Nehmen Sie in Ihrer Begründung bitte auch Bezug auf die in der linken Spalte angegebenen Zeitpunkte bzw. Zeilennummern. 4.2 Die in Zeile 20 durch Transaktion T2 gesetzte Transaktionsebene schützt nicht vor Phantom Reads. Was sind Phantom Reads? – 5 Punkte Sommersemester 2009 Prüfungsfach: Seite 11/12 Datenbanken I Anhang Datenbankschema für Aufgabe 2 tbl_Kunden tbl_Umsatz Spaltenname Datentyp NULL-Werte zulassen Spaltenname Datentyp id bigint id bigint strName nvarchar(255) fk_Telefon bigint fk_Telefon bigint dtStart datetime fk_Kundengruppe bigint dtEnd datetime tbl_Kundengruppe NULL-Werte zulassen tbl_Telefon Spaltenname Datentyp NULL-Werte zulassen Spaltenname Datentyp id bigint id bigint strKundengruppenname nvarchar(50) strTelefonnummer varchar(12) NULL-Werte zulassen Daten der Tabellen: tbl_Kunden id -------------------2 3 4 5 6 7 strName fk_Telefon fk_Kundengruppe ------------------------------------------------------Hans 1 1 Dieter 2 1 Ralf 3 2 Christine 4 2 Madonna 5 3 Schröder 6 3 tbl_Kundengruppe id -------------------1 2 3 tbl_Telefon strKundengruppenname ---------------------Privatkunde Geschäftskunde VIP-Kunde id -------------------1 2 3 4 5 6 strTelefonnummer ---------------491711234567 491727654321 491732222222 491743333333 491754444444 491709988776 tbl_Umsatz id -------------------1 2 3 4 5 8 9 10 11 12 13 14 15 fk_Telefon -------------------2 1 3 4 5 2 1 1 1 3 2 5 1 dtStart ----------------------2009-07-04 20:54:47.700 2009-07-04 20:54:47.700 2009-07-04 20:54:47.700 2009-07-04 20:54:47.700 2009-07-04 20:54:47.700 2009-07-04 20:54:47.700 2009-07-04 20:54:47.700 2009-07-04 20:54:47.700 2009-07-04 20:54:47.700 2009-07-04 20:57:33.477 2009-07-04 20:57:33.477 2009-07-04 20:57:33.477 2009-07-04 20:57:33.477 dtEnd ----------------------2009-07-04 21:54:47.700 2009-07-04 20:55:57.700 2009-07-04 20:58:47.700 2009-07-04 20:55:10.700 2009-07-04 20:56:47.700 2009-07-04 20:57:47.700 2009-07-04 20:55:00.700 2009-07-04 20:56:18.700 2009-07-04 20:55:47.700 2009-07-04 20:59:33.477 2009-07-04 21:17:33.477 2009-07-04 21:07:33.477 2009-07-04 20:59:33.477 Sommersemester 2009 Prüfungsfach: Seite 12/12 Datenbanken I Datenbankschema (erweitert) für Aufgabe 3 tbl_Kunden2Telefon * Spaltenname tbl_Kunden * Spaltenname Datentyp id bigint strName nvarchar(255) fk_Telefon bigint fk_Kundengruppe bigint Datentyp id bigint fk_Kunden bigint fk_Telefon bigint NULL-Werte zulassen tbl_Telefon * NULL-Werte zulassen Spaltenname Datentyp id bigint strTelefonnummer varchar(12) NULL-Werte zulassen tbl_Umsatz Spaltenname tbl_Kundengruppe Spaltenname Datentyp id bigint strKundengruppenname nvarchar(50) NULL-Werte zulassen Datentyp id bigint fk_Telefon bigint dtStart datetime dtEnd datetime Daten der neuen und veränderten Tabelle: tbl_Kunden id -------------------2 3 4 5 6 7 strName fk_Telefon fk_Kundengruppe ------------------------------------------------------Hans NULL 1 Dieter NULL 1 Ralf NULL 2 Christine NULL 2 Madonna NULL 3 Schröder NULL 3 tbl_Kunden2Telefon id -------------------1 2 3 4 5 6 7 fk_Kunden -------------------2 2 3 4 5 6 7 fk_Telefon -------------------2 1 3 4 6 5 7 NULL-Werte zulassen