Datenbanken 1 - WS 2019/20
Dr.-Ing. Johannes Schildgen
johannes.schildgen@h-da.de
Übungsblatt 6 vom 20.01.2020, 27./28.01.2020

Aufgabe 0: SQL (Bonusaufgabe, 10P)

Abgabe-Deadline: 20.01.2020 12:00 im Moodle

Im LOTS-Tool der Uni Leipzig (https://lots.uni-leipzig.de/sql-training/) können Sie SQL-Anfragen auf einer Bibliotheksdatenbank ausführen. Dort sind Bücher, Autoren und Verläge gespeichert. Bücher können mit Schlagworten versehen werden. Formulieren Sie die folgende Anfrage mittels SQL. In dieser Aufgabe dürfen Sie keine Subanfragen, CTEs, IN, oder EXISTS verwenden. Für jede Subanfrage etc. gibt es einen Punkt Abzug.

Welche Bücher vom Verlag "Springer" (2P) besitzen das Schlagwort "Künstliche Intelligenz"? (3P) Geben Sie die ISBN, den Titel und die Anzahl der Autoren aus (5P). In Klammern stehen die Teilpunkte, die Sie bekommen, wenn Sie Aufgabe nur teilweise lösen.

Aufgabe 1: Rechtemanagement, Transaktionen, JDBC (10P)

Abgabe-Deadline: 20.01.2019 12:00 im Moodle

Welche der folgenden Aussagen sind wahr? Jede richtige Antwort gibt 1 Punkt, falsche Antworten geben keine Punktabzüge.

    Richtig Falsch
1.Wenn ich GRANT rolle TO benutzer ausführe, hat der angegebene Benutzer alle Berechtigungen der spezifizierten Rolle.
2.Mit REVOKE ... RESTRICT verbiete ich, ein Recht weiterzugeben.
3.Wenn eine Transaktion Daten schreibt und sie diese selbst wieder liest, nennt man dies ein Dirty Read.
4.Es laufen zwei Transaktionen parallel. Eine schreibt in x und die andere liest x gleichzeitig. Hier kann ein Lost Update auftreten.
5.Das Phantomproblem kann auftreten, wenn zwischen zwei Leseoperationen eine andere Transaktion Datensätze löscht.
6.Es gibt einen Zyklus im Serialisierbarkeitsgraphen der folgenden Historie: w1(x), w2(x), r2(y), r1(y), w3(y), c1, c2, c3
7.Wird bei der Historie aus der vorherigen Frage das SX-Sperrverfahren eingesetzt, muss TA2 warten, bevor sie in x schreiben darf.
8.Die Redo-Info im Transaktionslog wird verwendet, um noch nicht auf die Festplatte geschriebene Aktionen von Gewinner-Transaktionen auszuführen.
9.In JDBC enthält ein PreparedStatement Fragezeichen als Platzhalter, die vor der Query-Ausführung mit Werten belegt werden können.
10.In JDBC liefert executeQuery einen Array zurück, der die Ergebnisse der übergebenen Anfrage beinhaltet.

Aufgabe 2: Anwendungsentwicklung mit JDBC

Für diese Aufgabe wurde auf der Hochschul-PostgreSQL-Datenbank postgres.fbi.h-da.de eine Datenbank chucknorris sowie ein Benutzer chucknorris mit dem Passwort chuck555 erstellt. Dieser Nutzer hat SELECT-Rechte auf der Tabelle public.witze(witz_id INT, witz VARCHAR(2000), aufrufe INT) sowie ein UPDATE-Recht auf der Aufrufe-Spalte ebendieser Tabelle.

  1. Richten Sie im DBeaver eine Verbindung zur chucknorris-Datenbank unter dem Benutzer chucknorris ein und betrachten Sie die Witze-Tabelle.
  2. Schreiben Sie ein Konsolenprogramm in Java und binden Sie den PostgreSQL-JDBC-Treiber ein; entweder indem Sie die Jar-Datei von https://jdbc.postgresql.org/ herunterladen oder mittels Maven.
  3. Bauen Sie in Ihrem Java-Programm eine Verbindung zur chucknorris-Datenbank auf.
  4. Geben Sie einen zufälligen Witz auf der Konsole aus (Tipp: ORDER BY random()).
  5. Implementieren Sie eine Suchfunktion:
    1. Der Benutzer gibt auf der Konsole einen Suchbegriff ein
    2. Wird ein leerer Suchbegriff eingegeben, soll wie gehabt ein zufälliger Witz ausgegeben werden.
    3. Andernfalls wird ein zufälliger Witz ausgegeben, in dem der eingegebene Suchbegriff vorkommt.
    4. Verhindern Sie SQL-Injections!
  6. Hinter dem Witz soll in Klammern die Anzahl der Aufrufe stehen.
  7. Beim Anzeigen eines Witzes soll die Anzahl seiner Aufrufe in der Datenbank um eins erhöht werden.

Aufgabe 2: B+-Bäume

Betrachten Sie folgenden B+-Baum der Klasse (k=1, k*=1):

B+-Baum
  1. Lösen Sie mit Stift und Papier:
    Fügen Sie Leo und anschließend Zoe in den Baum ein. Zeichnen Sie den kompletten Baum, so wie er nach den beiden Einfügungen aussieht.
  2. Lösen Sie mit dem B+-Baum-Simulations-Tool auf https://www.cs.usfca.edu/~galles/visualization/BPlusTree.html:
    Fügen Sie 20 Zahlen so in einen B+-Baum der Klasse (k=2, k*=2, also Max. Degree=5) ein, sodass dieser die Höhe 2 hat.