Vorlesung: Mo, 10:15-11:45, Sand 6/7, großer Hörsaal
Vorlesung: Di, 14:15-15:45, Sand 6/7, großer Hörsaal
Übung: Fr, 10:15-11:45 (neu), Sand 6/7, großer Hörsaal
Klausur: Mo, 8. Februar 2016, 10:00-12:00, Hörsaal N4 (HSZ, Morgenstelle)
Nachklausur: Mo, 4. April 2016, 10:00-12:00, Seminarraum 7E02 (HSZ, Morgenstelle)
Feb 25, 2016 — Die Nachklausur findet am 04.April 2016 von 10:00 - 12:00 Uhr in Seminarraum 7E02 (HSZ, Morgenstelle) statt — Dennis Butterstein
Feb 17, 2016 — Die Klausureinsicht zur Veranstaltung DB1 findet am Mo 22.2.16 von 10:00-12:00 Uhr in Raum B312 statt.
Die Gesamtnote, sowie die erzielten Bonuspunkte aus der Übung können ab sofort im ILIAS eingesehen werden.
Diejenigen, die nicht an der Übung teilgenommen haben und daher keinen Zugang zur ILIAS-Gruppe haben, können ihre Klausurnote bei der Klausureinsicht am Montag oder im Anschluss daran im Campus erfahren. — Benjamin Dietrich
Feb 1, 2016 — Am Dienstag, den 2. Februar 2016, findet die Vorlesung DB1 nicht mehr statt. Die Übung am Freitag, den 5. Februar, findet wie geplant statt.
Damit ist der Vorlesungsbetrieb beendet. Besten Dank für euer Interesse und die aktive Mitarbeit. — Torsten Grust
Jan 29, 2016 — Die 90-minütige Klausur zur Vorlesung DB1 wird am Mo, 8.2.2016 um 10:00-12:00 Uhr in Hörsaal N4 (HSZ, Morgenstelle) stattfinden.
Ein doppelseitig handbeschriebenes A4-Papier ist als Hilfsmittel erlaubt. — Benjamin Dietrich
Oct 12, 2015 — Der Termin der Übungsgruppe ist neu: Fr 10:15 - 11:45 Uhr, am Sand 6/7, großer Hörsaal.
Zur Organisation: Zur Übung DB I gibt es einen Kurs auf ILIAS. Dort wird jeweils Freitags ein Übungsblatt veröffentlicht. Abgabetermin ist jeweils Freitag 10:00 Uhr der darauffolgenden Woche.
Bitte beachten Sie auch die weiteren Hinweise im Forum! — Benjamin Dietrich
Im Forum zu DB I klären wir alle organisatorischen und inhaltlichen Fragen, die sich im Laufe des Semesters auftun werden. Bitte dort regelmäßig vorbei schauen und keine Scheu zu fragen.
Die Vorlesung Datenbanksysteme I ist die klassische Einführung in das spannende Gebiet der Datenbanksysteme. Zentrales Thema sind die Relationalen Datenbanksysteme, in denen Daten in tabellarischer Form modelliert, gespeichert und angefragt werden. Dieser strikt tabellarische Blick auf Daten ist elegant, intuitiv aber dennoch formal und durch Datenbanksysteme effizient implementierbar, wirft aber auch interessante Fragen auf, denen wir uns in dieser Vorlesung widmen werden:
[ Datenbankbegriff ] Genau welche Services kann ein Datenbanksystem eigentlich bieten?
[ Datenmodellierung, ER-Modelle ] Wie bringt man Daten sinnvoll in tabellarische Form, auch wenn Daten zunächst in Form von Objekten, Bäumen, etc. vorliegen?
[ Relationales Modell, Normalformen ] Welche Charakteristika von Tabellen können wir ausnutzen, um Daten effizient und redundanzfrei speichern und wieder extrahieren zu können?
[ Relationale Algebra, SQL ] Welche Sprachen eignen sich für den Zugriff auf Massen von Tabellendaten?
Sowohl Vorlesung als auch Übung werden von Beispielen und Aufgaben begleitet, die wir mittels des relationalen Datenbanksystems PostgreSQL realisieren werden. PostgreSQL (in der Version 9.x) ist für viele Plattformen (u.a. MS Windows, Linux, Mac OS X) frei verfügbar.
Mit IBM DB2 Express-C V10.1.2 und MySQL stehen weitere relationale Datenbanksysteme frei zur Verfügung.
Die 90-minütige Klausur zu dieser Vorlesung wird am Montag, den 8. Februar 2016, von 10:00–12:00 Uhr stattfinden.
Wer an der Übung teilgenommen und mindestens 2/3 der Punkte erreicht hat, kann einen Punktebonus für die abschliessende Klausur erhalten. So können von den 90 durch Klausuraufgaben erreichbaren Punkten der Klausur, bis zu 30 Punkte schon im Voraus, durch gute Leistungen in der Übung, erlangt werden.
Ramakrishnan, Gehrke: Database Management Systems
(3rd International Edition)
McGraw-Hill, 2003
ISBN 0-07-246563-8
Part I dieses Buch deckt die Inhalte zu relationalen Datenbanksystemen gut ab. Part II widmet sich den Inhalten der Vorlesungen Datenbanksysteme II.
Kemper, Eickler: Datenbanksysteme
(10. Auflage)
De Gruyter Studium, 2015
ISBN 3-11-044375-9
Deutsches Standardlehrbuch, das auch Inhalte der Vorlesung
Datenbanksysteme II bespricht. Eine
hervorragende Quelle für weiterführende Referenzen.
Das relationale Datenbanksystem PostgreSQL ist das Hauptwerkzeug in dieser Vorlesung und auch in den Übungen. Effizient, unkompliziert, standardkonform, erweiterbar und generally awesome. Hinweise zum Download und zur Installation von PostgreSQL. (Für User von Apples OS X bietet Postgres.app eine Installation innerhalb von Sekunden.) [ PostgreSQL Version 9.4 ]
Gelegentlich werden wir in Vorlesung, Übung und Übungsblättern die Programmiersprache Python einsetzen, um einfache Skripte zur Verarbeitung von Tabellendaten zu entwerfen oder die Funktionsweise von Datenbanksystemen zu illustrieren. Frei verfügbar für alle gängigen Sytsteme und oft bereits vorinstalliert. [ Python Version 2.7 ]
Zu Beginn der Vorlesung werden wir JSON als Datenmodell und seine Sprache JSONiq thematisieren. Eine Implementation von JSONiq, sowohl als Sandbox im Web als auch zum Download findet sich auf zorba.io.
Nr | File | Download |
---|---|---|
1 | GenBank-Eintrag für *Bakers' Yeast* | |
2 | LEGO Set 5610 Datenmodell Text | |
3 | Gewicht des LEGO Set 5610 (Shell-Skript) Basierend auf Usage (UNIX-Shell): | |
4 | Extraktion von DNA-Subsequenzen aus einem GenBank-Eintrag (Shell-Skript) Basierend auf Usage (UNIX-Shell): | |
5 | LEGO Set 5610 Datenmodell JSON | |
6 | USGS Earthquake Data Datenmodell JSON | |
7 | Gewicht des LEGO Set 5610 (JSONiq-Query) Usage (UNIX-Shell): | |
8 | Stärke des schwersten Erdbebens auf der Nordhalbkugel (JSONiq-Query) Usage (UNIX-Shell): | |
9 | Stärke und Ort des schwersten Erdbebens auf der Nordhalbkugel (JSONiq-Query) File enthält drei Varianten der Query (zwei Varianten sind derzeit via Usage (UNIX-Shell): | |
10 | USGS Earthquake Data Datenmodell Tabular (CSV) | |
11 | Python-Modul "DB1" Einfache Query-Library (PyQL und relationale Algebra) für Python 2.7. Einbindung in Python-Code via | |
12 | Stärke und Ort des schwersten Erdbebens auf der Nordhalbkugel (PyQL-Query) Usage (UNIX-Shell): | |
13 | Tabelle "contains" (LEGO Sets) Datenmodell Tabular (CSV) | |
14 | Tabelle "bricks" (LEGO Bausteine) Datenmodell Tabular (CSV) | |
15 | Tabelle "minifigs" (LEGO Minifiguren) Datenmodell Tabular (CSV) | |
16 | Gewicht des LEGO Set 5610 (PyQL-Query) Usage (UNIX-Shell): | |
17 | Gewicht des LEGO Set 5610 (Optimierung #1) (PyQL-Query) Optimierung basiert auf Regeln (constraints) der LEGO Mini-World: eindeutige Identifier in Tabellen Usage (UNIX-Shell): | |
18 | Gewicht des LEGO Set 5610 (Optimierung #2) (PyQL-Query) Optimierung basiert auf Konstruktion einer temporären Datenstruktur (Dictionary/partielle Funktion Usage (UNIX-Shell): | |
19 | Gewicht des LEGO Set 5610 (Optimierung #2, Parallelität) (PyQL-Query) Optimierung basiert auf Konstruktion einer temporären Datenstruktur (Dictionary/partielle Funktion Usage (UNIX-Shell): | |
20 | Gewicht des LEGO Set 5610 (Data Independence #1) (PyQL-Query) Einführung einer temporären Liste Usage (UNIX-Shell): | |
21 | Gewicht des LEGO Set 5610 (Data Independence #2) (PyQL-Query) Basiert auf einer neuen persistenten Tabelle
Usage (UNIX-Shell): | |
22 | SQL DML Statements (SQL-Skript) Demonstration der SQL DML Kommandos Usage (UNIX-Shell): | |
23 | SQL Foreign Data Wrapper (SQL-Skript) Demonstration des PostgreSQL Foreign Data Wrappers (CSV-File wird in den Zustand einer Relation gespiegelt, read-only: Änderungen im CSV-File werden vom RDBMS übernommen, Achtung: Im SQL-Skript muss der (absolute) Pfad zum CSV-File angepasst werden. Usage (UNIX-Shell): | |
24 | Kopie (Schema und Zustand) einer Tabelle erstellen (SQL-Skript) Kopiert erst Schema und dann Zustand einer existierenden Tabelle, benötigt lediglich je ein DDL- und DML-Statement. Usage (UNIX-Shell): | |
25 | SQL DDL Statements zur Deklaration von Constraints (SQL-Skript) Reichert Tabelle Usage (UNIX-Shell): | |
26 | Kandidaten- und Primärschlüssel (SQL-Skript) Deklariert und lädt die Tabellen der LEGO-Miniwelt und fügt Kandidaten- sowie Primärschlüssel hinzu. NB: Einige SQL-Statements führen zu (erwarteten) Fehlern, siehe Kommentare. Achtung: Im SQL-Skript müssen die (absoluten) Pfade zu den CSV-Files angepasst werden. Usage (UNIX-Shell): | |
27 | Die SQL FROM-Klausel (SQL-Skript) Demonstriert, dass die Nennung von Subqueries in der Usage (UNIX-Shell): | |
28 | Row-Types und Row-Values in SQL (SQL-Skript) Demonstriert das Konzept der row types und row values in SQL. Usage (UNIX-Shell): | |
29 | (Überflüssiges) DISTINCT in SQL (SQL-Skript) Demonstriert, das für einige Queries die Nennung von Usage (UNIX-Shell): | |
30 | SQL: Equi-Joins, θ-Joins (SQL-Skript) Demonstriert die Formulierung von Equi- und allgemeiner θ-Joins (Theta-Joins), auch zwischen mehreren Tabellen (hier: 3-Way Join). Usage (UNIX-Shell): | |
31 | SQL: Kompositionalität (Subqueries) (SQL-Skript) Demonstriert den Einsatz von Subqueries Usage (UNIX-Shell): | |
32 | SQL: Kompositionalität (WITH) (SQL-Skript) Demonstriert den Einsatz von Usage (UNIX-Shell): | |
33 | SQL: Korrelierte Unteranfragen (SQL-Skript) Demonstriert die Nutzung korrelierter Unteranfragen (die freie Variablen beinhalten, die in der umgebenden Anfrage gebunden werden). Usage (UNIX-Shell): | |
34 | PyQL: Korrelierte Unteranfragen (Python-Skript) Demonstriert Korrelation und Kompositionalität in PyQL:
Usage (UNIX-Shell): | |
35 | SQL: Fremdschlüssel (SQL-Skript) Demonstriert die Deklaration und den Einsatz von Fremdschlüsseln (foreign keys), um eine konsistente Verweisstruktur zwischen Source- und Target-Tabellen zu gewährleisten. Achtung: Im SQL-Skript müssen die (absoluten) Pfade zu den CSV-Files angepasst werden. Usage (UNIX-Shell): | |
36 | SQL: Referentielle Integrität (SQL-Skript) Demonstriert die (manuelle) Überprüfung der referentiellen Integrität einer Datenbank mittels der SQL-Prädikate Achtung: Im SQL-Skript muss ein (absoluter) Pfade zu einem CSV-File angepasst werden. Usage (UNIX-Shell): | |
37 | SQL: Intra-Table Foreign Keys (Operationen auf Bäumen) (SQL-Skript) Repräsentation von Bäumen mittels Fremdschlüsseln innerhalb einer Tabelle ( Usage (UNIX-Shell): | |
38 | SQL: Simulation von NF²-Queries auf 1NF-Daten (SQL-Skript) Systematische Übersetzung von Anfragen für NF²-Daten in äquivalente Anfragen über Tabellen in erster Normalform (1NF). Usage (UNIX-Shell): | |
39 | SQL: Gruppierung und Aggregation (SQL-Skript) Demonstration verschiedener SQL Aggregat-Funktionen (siehe auch die PostgreSQL 9.4-Dokumentation zu Aggregat-Funktionen). Usage (UNIX-Shell): | |
40 | SQL: Gruppierung und Aggregation (im Turtle-Beispiel) (SQL-Skript) Demonstration von Gruppierung und Aggregation im Usage (UNIX-Shell): | |
41 | SQL: Gruppierung und Aggregation (Kalender) (SQL-Skript) Gruppierung und Aggregation auf der Kalender-Datenbank Usage (UNIX-Shell): | |
42 | SQL: LEGO Data Warehouse (Report Queries) (SQL-Skript) Aufbau eines Mini-Data Warehouse für die LEGO-Datenbank. Einfache Report-Queries. Usage (UNIX-Shell): | |
43 | SQL: LEGO Data Warehouse (weitere Aggregationen) (SQL-Skript) Weitere Gruppierungen und Aggregationen auf dem LEGO Data Warehouse (Set mit der meisten Teilen, schwerstes Set). Usage (UNIX-Shell): | |
44 | SQL: Test auf Kandidatenschlüssel (SQL-Skript) Test: Ist die angegebene Attributmenge ein Kandidatenschlüssel für Tabelle Usage (UNIX-Shell): | |
45 | SQL: Interaktion von Gruppierung/Aggregation und NULL (SQL-Skript) Verhalten von Gruppierung und Aggregation auf leeren Tabellen und bei der Verarbeitung von NULL-Werteb. Usage (UNIX-Shell): | |
46 | SQL: LEGO Building Instructions (funktionale Abhängigkeiten) (SQL-Skript) Generiert Tabelle Achtung: Im Skript müssen Pfade zu den Illustrationen der Bauanleitung angepasst werden. Die Illustrationen selbst befinden sich ich im ZIP-Archiv Usage (UNIX-Shell): | |
47 | Illustrationen zu den LEGO Building Instructions (ZIP-Archiv mit PNG-Bildern) Enthält die Illustrationen zur LEGO-Bauanleitung in Tabelle Usage (UNIX-Shell): | |
48 | Haskell: Generierung von Kandidatenschlüsseln (Haskell-Source) Haskell-Implementation der Algorithmen key(K,U,F) und cover(α,F). Mehrere Beispiel-Szenarien sind vorbereitet (siehe Funktion Usage (UNIX-Shell): | |
49 | SQL: Simulation von FD-Constraints (mittels Trigger) (SQL-Skript) Nutzt einen SQL-Trigger, um die FD Usage (UNIX-Shell): | |
50 | SQL: Erzeugung künstlicher Schlüsselwerte (SQL-Skript) Nutzt den SQL-Datentyp Usage (UNIX-Shell): | |
51 | SQL: Airport-Countries (generiert aus ER-Diagramm) (SQL-Skript) Relationale Implementation eines ER-Diagramms, das eine many-to-one-Relationship zwischen Entities Airport und Country beschreibt. Usage (UNIX-Shell): | |
52 | SQL: Employees-Engineers-Secretaries (generiert aus EER-Diagramm mit Vererbung) (SQL-Skript) Relationale Implementation eines ER-Diagramms, das Entity-Typ Employee sowie dessen Spezialisierungen Secretary und Engineer beschreibt. Nutzt die SQL-Klausel Usage (UNIX-Shell): | |
53 | RA: Selektion (Python-Skript, benötigt Python-Modul Demonstriert den Selektions-Operators σ[p](R) der Relationalen Algebra (RA). Das Selektionsprädikat p wird hier in Form eines λ-Ausdrucks als anonyme Funktion angegeben: Usage (UNIX-Shell): | |
54 | RA: Projektion (Python-Skript, benötigt Python-Modul Demonstriert den Projektions-Operators π[ℓ](R) der Relationalen Algebra (RA). Die Projektions-Funktion ℓ kann in zwei Formen angegeben werden:
Usage (UNIX-Shell): | |
55 | RA: Two-Hops-Query (Python-Skript, benötigt Python-Modul Demonstriert das Zusammenspiel der RA-Operatoren π, σ und ⨉ zur Implementation einer Anfrage über Graphen (findet alle Pfade der Länge 2). Usage (UNIX-Shell): | |
56 | RA: Natural Join (Python-Skript, benötigt Python-Modul Demonstriert die Funktionalität des Natural Join-Operators ⨝ (verbindet zwei Relationen, Join-Prädikat ergibt sich implizit aus der Gleichheit der gleich benannter Spalten). Usage (UNIX-Shell): | |
57 | RA: Jun Yangs Implementation der RA (Java Archive) ⚠︎ Benötigt PostgreSQL. Implementation eines Interpreters und einer REPL für die RA. Basiert auf der Abbildung von RA-Ausdrücken auf äquivalente SQL-Anfragen. Siehe auch Jun Yang: A Relational Algebra Interpreter. Usage (UNIX-Shell): | |
58 | RA: Two-Hops Query (.alg) ( Demonstriert das Zusammenspiel der RA-Operatoren π, σ und ⨉ zur Implementation einer Anfrage über Graphen (findet alle Pfade der Länge 2). Usage (UNIX-Shell): | |
59 | RA: LEGO-Steine aus der "Animal"-Kategorie (Python-Skript, benötigt Python-Modul Findet die LEGO-Steine, die aus einer Kategorie mit Bezug zu "Animal" stammen. Greift auf die Tabellen Usage (UNIX-Shell): | |
60 | RA: LEGO-Sets, die schwerer als "Taj Mahal" sind (Python-Skript, benötigt Python-Modul Findet die LEGO-Sets, die schwerer als das LEGO-Set "Taj Mahal" sind. RA-Query ist bereits in mehrern Schritten optimiert. Greift auf die Tabelle Usage (UNIX-Shell): | |
61 | Tabelle "sets" (LEGO Sets) Datenmodell Tabular (CSV) | |
62 | Tabelle "categories" (Kategorien für LEGO Bricks) Datenmodell Tabular (CSV) | |
63 | Tabelle "matches" (welcher LEGO Brick kann gleichwertig wie ersetzt werden?) Datenmodell Tabular (CSV) | |
64 | Tabelle "colors" (LEGO Farbpalette) Datenmodell Tabular (CSV) | |
65 | Tabelle "bricks-small" (gekürzte Variante der Tabelle "bricks") Datenmodell Tabular (CSV) | |
66 | Tabelle "sets-small" (gekürzte Variante der Tabelle "sets") Datenmodell Tabular (CSV) | |
67 | Tabelle "contains-small" (gekürzte Variante der Tabelle "contains") Datenmodell Tabular (CSV) | |
68 | RA: Kategorisiere LEGO-Sets nach Volumen (Python-Skript, benötigt Python-Modul Kategorisiert LEGO-Sets nach ihrem Volumen (small, medium, large). Greift auf Tabelle Usage (UNIX-Shell): | |
69 | SQL: Kategorisiere LEGO-Sets nach Volumen (SQL-Skript) Kategorisiert LEGO-Sets nach ihrem Volumen (small, medium, large). Zwei Varianten nutzen Fallunterscheidung ( Usage (UNIX-Shell): | |
70 | RA: LEGO-Sets, die keine Bausteine mit Aufkleber enthalten (Python-Skript, benötigt Python-Modul Findet die LEGO-Sets, in denen kein Baustein einen Aufkleber erhält. Nicht-monotone Anfrage, demonstriert den Einsatz der relationalen Differenz. Greift auf gekürzte Varianten der Tabellen Usage (UNIX-Shell): | |
71 | RA: LEGO-Sets, die ausschliesslich gelbe Bausteine enthalten (Python-Skript, benötigt Python-Modul Findet die LEGO-Sets, in nur gelbe Bausteine enthalten sind. Nicht-monotone Anfrage, demonstriert den Einsatz der relationalen Differenz. Greift auf gekürzte Varianten der Tabellen Usage (UNIX-Shell): | |
72 | RA: Ermittle das schwerste LEGO-Set (Python-Skript, benötigt Python-Modul Findet das schwerste LEGO-Set. Nicht-monotone Anfrage, demonstriert den Einsatz des Antijoin-Operators (▷). Greift auf gekürzte Variante der Tabelle Usage (UNIX-Shell): | |
73 | RA: Welche Sets enthalten alle notwendigen Steine? (Python-Skript, benötigt Python-Modul Findet die LEGO-Sets, die alle Steine beinhalten, die benötigt werden, um das LEGO-Set 1609 zu bauen. Nicht-monotone Anfrage, demonstriert den Einsatz des Divisions-Operators (÷). Greift auf gekürzte Variante der Tabellen Usage (UNIX-Shell): | |
74 | RA: Liste LEGO-Steine und ihren evtl. Ersatz auf (Python-Skript, benötigt Python-Modul Listet die LEGO-Steine des Sets 336-1 auf und zeigt an, welche Steine als Ersatz eingesetzt werden können. Demonstriert den Einsatz des Left-Outerjoin-Operators (⟕). Greift auf die Tabellen Usage (UNIX-Shell): | |
75 | SQL: Liste LEGO-Steine und ihren evtl. Ersatz auf (SQL-Skript) Listet die LEGO-Steine des Sets 336-1 auf und zeigt an, welche Steine als Ersatz eingesetzt werden können. Demonstriert den Einsatz des Left-Outerjoin-Operators in SQL ( Usage (UNIX-Shell): | |
76 | SQL: Ordne alle LEGO-Farben nach Popularität (SQL-Skript) Ordnet alle Farben des LEGO-Sortiments nach Popularität (= Anzahl der Steine, die in einer Farbe verfügbar sind). Demonstriert die Interaktion des Left-Outerjoin-Operators ( Usage (UNIX-Shell): | |
77 | RA: Iterative/rekursive Anfragen gegen Bäume (Python-Skript, benötigt Python-Modul Beantwortet Teilbaum- und Pfadanfragen auf einer relationalen Baumrepräsentation. Demonstriert den Einsatz der (äquivalenten) Usage (UNIX-Shell): | |
78 | SQL: Iterative/rekursive Anfragen gegen Bäume (SQL-Skript) Beantwortet Teilbaumanfrage auf einer relationalen Baumrepräsentation. Demonstriert den Einsatz rekursiver Common Table Expressions in SQL ( Usage (UNIX-Shell): | |
79 | SQL: Iterative/rekursive Anfragen auf gerichteten azyklischen Graphen (SQL-Skript) Beantwortet Pfadanfrage auf einer relationalen Graphrepräsentation (hier: DAG). Demonstriert den Einsatz rekursiver Common Table Expressions in SQL ( Usage (UNIX-Shell): | |
80 | SQL: Iterative/rekursive Anfragen auf gerichteten zyklischen Graphen (SQL-Skript) Beantwortet Pfadanfrage auf einer relationalen Graphrepräsentation (hier: zyklischer gerichteter Graph). Demonstriert den Einsatz rekursiver Common Table Expressions in SQL ( Usage (UNIX-Shell): | |
81 | SQL: Simulation eines endlichen deterministischen Automaten (DFA) (SQL-Skript) Simuliert einen deterministischen endlichen Automaten (DFA) für den regulären Ausdruck Usage (UNIX-Shell): | |
82 | SQL: Simulation eines endlichen nicht-deterministischen Automaten (NFA) (SQL-Skript) Simuliert einen nicht-deterministischen endlichen Automaten (NFA) für einen regulären Ausdruck, der die Syntax von Fließkommazahlen beschreibt (etwa Usage (UNIX-Shell): |