Klausur Datenbanken - SS 2009 - Fakultät für Informatik und

Werbung
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
Herunterladen