Beruflich Dokumente
Kultur Dokumente
Name:
Klausur Datenbanken 1
Andreas Heß, Hochschule Furtwangen, 12. Juli 2012
Hinweise
Geben Sie auf jeder Seite der Klausur Ihren Namen und Ihre Matrikelnummer an.
Bitte verwenden Sie keine zusätzlichen Blätter und nehmen Sie die Seiten dieser Klausur nicht
auseinander. Der Platz auf den Aufgabenblättern sollte im allgemeinen für die Antworten
ausreichen. Zusätzlich befindet sich nach jedem Themenblock eine Leerseite mit Raum für Notizen.
Verwenden Sie bei Bedarf auch die Rückseiten.
Hilfsmittel
Auf der letzten Seite finden Sie die Ihnen bereits aus der Vorlesung bekannte SQL-Übersicht.
Weitere Hilfsmittel sind nicht zugelassen.
1/24
Mat.Nr.:! Name:
Datenbank-Architektur
Aufgabe 1 (3 Punkte)
Sie haben in der Vorlesung die ANSI-SPARC-Architektur kennengelernt. Bitte beschriften Sie
dieses Diagramm.
logische Ebene
physische Ebene
logische Ebene
Aufgabe 2 (3 Punkte)
a.) Was bedeutet „logische Datenunabhängigkeit“?
b.) Welches Mittel, das Sie in der Vorlesung kennengelernt haben, kann dazu benutzt werden,
logische Datenunabhängigkeit zu erreichen?
Aufgabe 3 (4 Punkte)
a.) Wofür stehen die Abkürzungen DDL und DML?
b.) Kreuzen Sie für die folgenden SQL-Anweisungen jeweils an, ob sie zur DDL oder zur DML
gehören. Betrachten Sie die Query Language als Teil der DML. Es wird jeweils ein halber Punkt
pro korrekt angekreuzter Aussage vergeben und ein halber Punkt pro falsch angekreuzter Aussage
abgezogen. Nicht angekreuzte Aussagen zählen nicht.
CREATE TABLE! ❍ DDL ❍ DML
ALTER TABLE! ❍ DDL ❍ DML
UPDATE! ❍ DDL ❍ DML
SELECT! ❍ DDL ❍ DML
2/24
Mat.Nr.:! Name:
Fahrer
faehrt
Datum
n
Fahrt
n n
faehrt
von
PLZ faehrt
nach
1 1
Ortsname
Ort
Gegeben ist ein E/R-Modell einer Datenbank eines einfachen Fahrtenbuchs. Eine Fahrt wird immer
von genau einem in der Datenbank bekannten Fahrer durchgeführt. In der Datenbank sind nur
deutsche Orte enthalten, d.h. jeder Ort hat eine fünfstellige PLZ. Eine Fahrt hat immer einen Start-
und einen Zielort und die Fahrten finden nur innerhalb Deutschlands zwischen in der Datenbank
bekannten Orten statt.
Aufgabe 1 (3 Punkte)
Setzen Sie das E/R-Modell von der 1:N-Schreibweise in die (min, max)-Notation um. Achten Sie
auf den Unterschied zwischen (0,1) und (1,1).
Bringen Sie die Änderungen direkt am hier gezeigten Diagramm an.
3/24
Mat.Nr.:! Name:
Fahrer
faehrt
Datum
n
Fahrt
n n
faehrt
von
PLZ faehrt
nach
1 1
Ortsname
Ort
4/24
Mat.Nr.:! Name:
Fahrer
faehrt
Datum
n
Fahrt
n n
faehrt
von
PLZ faehrt
nach
1 1
Ortsname
Ort
5/24
Mat.Nr.:! Name:
Aufgabe 3 (5 Punkte)
An der Datenbank sollen Änderungen vorgenommen werden.
a.) Fügen Sie bei der Fahrt eine zusätzliche Spalte „Fahrtstrecke“ hinzu. Die Spalte soll die
gefahrene Strecke in ganzen Kilometern aufnehmen.
b.) Was müssen Sie beachten, wenn die Tabelle schon Daten enthält und die neue Spalte NOT
NULL sein soll?
c.) Eine Fahrt darf aus Sicherheitsgründen nicht länger als 400 Kilometer sein. Fügen Sie ein
Constraint hinzu, das prüft, dass die Fahrtstrecke mindestens 1 und höchstens 400 Kilometer ist.
Aufgabe 4 (2 Punkte)
Im laufenden Betrieb werden häufig Fahrer mit ihrem Namen und Vornamen gesucht sowie
Fahrerlisten, die nach Namen und Vornamen sortiert sind, abgefragt. Es stellt sich heraus, dass diese
Abfragen sehr langsam sind, wenn viele Fahrer in der Datenbank gespeichert sind. Welche
Maßnahme eignet sich, um diese Abfragen zu beschleunigen?
Geben Sie das entsprechende SQL-Statement an!
6/24
Mat.Nr.:! Name:
7/24
Mat.Nr.:! Name:
trifft
trifft zu nicht Aussage
zu
Die Tabelle darf nur atomare Attribute haben, die keine Mengen beinhalten.
In keiner Zeile der Tabelle darf der Wert des Primärschlüssels NULL sein.
8/24
Mat.Nr.:! Name:
Musik
One Republic US Dreaming Out Loud 2007 1. Say (All I Need) 3:51
2. Mercy 4:01
3. Stop And Stare 3:44
4. Apologize 3:29
Snow Patrol UK Fallen Empires 2011 1. I‘ll Never Let You Go 4:43
2. Called Out In The Dark 4:02
3. The Weight Of Love 4:16
9/24
Mat.Nr.:! Name:
10/24
Mat.Nr.:! Name:
11/24
Mat.Nr.:! Name:
Spieler
1 Sfr. Heidesheim 1 3 1
2 Sfr. Mainz 1 4 0
6 Turm Emsdetten 3 1 1
7 SV Simonswald 4 9 0
4 4 1
Partien
5 2 1
PNr Weiss Schwarz Ergebnis
5 9 0
1 3 4 1
6 6 0
2 4 5 0,5
6 2 1
3 5 1 0
7 1 0,5
4 9 4 0
7 2 0,5
5 2 9 1
8 9 0
6 6 2 0
8 8 1
7 1 2 0,5
8 9 8 0
12/24
Mat.Nr.:! Name:
Aufgabe 1 (2 Punkte)
Schreiben Sie eine Abfrage, die alle Spalten der Tabelle Vereine nach Namen alphabetisch sortiert
anzeigt.
Aufgabe 2 (3 Punkte)
Schreiben Sie eine Abfrage, die alle Spalten der Tabelle Spieler alphabetisch nach Nach- und
Vornamen sortiert anzeigt, es sollen aber nur die Großmeister ausgegeben werden.
Aufgabe 3 (3 Punkte)
Schreiben Sie eine Abfrage, die in den Spalten „Name“, „Vorname“, „Verein“ und „DWZ“ alle
Spieler mit ihrem Namen, Vornamen, dem Namen ihres Vereins und ihrer DWZ anzeigt. Die Liste
soll nach DWZ absteigend sortiert sein, also die besten Spieler zuerst.
13/24
Mat.Nr.:! Name:
14/24
Mat.Nr.:! Name:
Aufgabe 7 (3 Punkte)
Der Ausrichter des Turniers kassiert von allen Spielern jeweils 15 Euro Startgeld. Nur Großmeister
und jugendliche Spieler, die nach 1993 geboren sind, zahlen nichts. Schreiben Sie eine Abfrage, die
nur genau eine Zeile mit einer Spalte „Einnahmen“, in der die gesamten Einnahmen in Euro
ausgegeben werden, als Ergebnis hat.
15/24
Mat.Nr.:! Name:
Aufgabe 8 (5 Punkte)
Schreiben Sie eine Abfrage, die die Spielergebnisse aus der Tabelle Partien etwas schöner anzeigt.
Es soll in den Spalten „PNr“, „Weiss_Name“, „Weiss_Punkte“, „Schwarz_Name“ und
„Schwarz_Punkte“ die Partienummer, der Nachname des Spielers mit den weißen Figuren, die
Punktzahl des Spielers mit den weißen Figuren (dies ist die Spalte Ergebnis aus der ursprünglichen
Tabelle), der Nachname des Spielers mit den schwarzen Figuren und die Punktzahl des Spielers mit
den schwarzen Figuren angezeigt werden. Beispiel:
Partien
1 Carow 1 Heß 0
3 Huober 0 Anand 1
… … … … …
Hinweis: Die Tabelle Spieler muss in der Abfrage zwei Mal vorkommen!
16/24
Mat.Nr.:! Name:
Aufgabe 9 (5 Punkte)
Schreiben Sie das Statement auf, mit dem die Sicht „Ergebnisse“ erstellt wurde. Lösen Sie die
Aufgabe mit Hilfe von UNION.
Aufgabe 10 (4 Punkte)
Erstellen Sie die Rangliste. Schreiben Sie eine Abfrage, die in den Spalten „SpielerNr“, „Name“,
„Vorname“ und „Gesamtpunkte“ alle Spieler, die Partien gespielt haben, mit ihrer bisher insgesamt
erreichten Punktzahl auflistet. Verwenden Sie die Sicht „Ergebnisse“. Die Ausgabe soll nach
Punktzahl absteigend sortiert sein.
17/24
Mat.Nr.:! Name:
c.) Welche Tabellen der Datenbank könnten in diesem Fall von einer Löschung betroffen sein?
Wäre die Sicht „Ergebnisse“ auch betroffen?
d.) Können Sie direkt einzelne Zeilen aus der Sicht „Ergebnisse“ löschen?
18/24
Mat.Nr.:! Name:
19/24
Mat.Nr.:! Name:
Transaktion A Transakation B
①! START TRANSACTION
Spieler
④! UPDATE Spieler
! SET DWZ = 2817
! WHERE SpielerNr = 2;
⑤ COMMIT; ⑥ SELECT SpielerNr, Name, DWZ
! FROM Spieler
! WHERE DWZ > 2800;
Ausgabe = ?
⑦ COMMIT;
b.) In der Transaktion B ist eine Transaktionsanomalie aufgetreten. Wie heißt diese
Transaktionsanomalie?
20/24
Mat.Nr.:! Name:
21/24
Mat.Nr.:! Name:
Aufgabe 2 (4 Punkte)
Sie verwenden die Datenbank aus Thema 3. Es laufen zwei Transaktionen, A und B. Es ist
vorgesehen, dass folgende SQL-Anweisungen in der angegebenen Reihenfolge und mit den
angegebenen Ausgaben durchgeführt werden sollen.
Transaktion A Transakation B
①! START TRANSACTION
Spieler
1 Anand 2791
③! START TRANSACTION
b.) Welches Problem könnte auftreten, wenn die oben gezeigten Anweisungen ausgeführt werden,
aber nicht SERIALIZABLE, sondern ein niedrigerer Isolationslevel eingestellt ist?
22/24
Mat.Nr.:! Name:
Aufgabe 3 (2 Punkte)
Erklären Sie in ein bis zwei Sätzen, was „atomar“ im Zusammenhang mit Transaktionen bedeutet.
23/24
Mat.Nr.:! Name:
SQL-Kurzübersicht
Andreas Heß, Hochschule Furtwangen
Tabellen anlegen
CREATE TABLE tabelle (
spalte Datentyp [NOT NULL] [UNIQUE] [PRIMARY KEY]
[REFERENCES tabelle2] [CHECK (Bedingung)]
[DEFAULT wert]
[AUTO_INCREMENT]
[GENERATED ALWAYS|BY DEFAULT AS IDENTITY],
[PRIMARY KEY(spalte1, spalte2)]
[FOREIGN KEY(spalte1, spalte2) REFERENCES tabelle2]
[CONSTRAINT c_name [CHECK (Bedingung)|UNIQUE(spalte)] );
Sichten anlegen
CREATE VIEW sicht1 AS SELECT …
Index anlegen
CREATE INDEX index1 ON tabelle(spalte1, spalte2);
24/24