Database Research Group

WSI – Database Systems Research Group

Datenbanksysteme I


News
  • Dec 18, 2017 — Die Vorlesung DB1 fällt am Montag, den 18. Dezember 2017, wegen schlechten Wetter- und Verkehrsverhältnissen aus.

    Weiter geht's morgen (Dienstag, 19. Dezember 2017). — Torsten Grust

  • Oct 24, 2017 — Die Vorlesung DB1 fällt am Montag, den 30. Oktober 2017, aus. Aufgrund des Reformationstages am Dienstag, den 31. Oktober 2017, ist der nächste Termin für die Vorlesung DB1 daher Montag, der 6. November 2017.

    Erinnerung: Die erste Übung findet am Donnerstag, den 26. Oktober 2017, statt. — Torsten Grust


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.

Vorlesung

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 Version 9.x oder 10) ist für viele Plattformen (u.a. MS Windows, Linux, macOS) frei verfügbar.

Mit IBM Db2 Express-C und MySQL stehen weitere relationale Datenbanksysteme frei zur Verfügung.

Klausur und Benotung

Die 90-minütige Klausur zu dieser Vorlesung wird am Montag, den 5. Februar 2018, von 10:00–12:00 Uhr stattfinden. Details dazu geben wir im Laufe des Semesters bekannt.

An der Klausur dürfen alle Studierenden teilnehmen, die im Übungsbetrieb dieser Vorlesung mindestens 2/3 der Punkte erreicht haben. Für darüber hinaus erzielte Punkte gewähren wir einen Punktebonus in der Klausur.

Nur für Studierende der Bioinformatik: In dieser Vorlesung können ausnahmsweise auch nur 6 (anstatt regulär 9) ECTS erworben werden. Diese Studierenden steigen dann nach Weihnachten aus dem Vorlesungsbetrieb aus und schreiben am 5. Februar 2018 eine entsprechend angepasste Klausur.

Literatur

  • 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.

PostgreSQL, Python und JSONiq

  • 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 macOS bietet Postgres.app eine Installation innerhalb von Sekunden.) [ PostgreSQL Version 9.6 oder 10 ]

  • 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 zum freien Download findet sich auf zorba.io.


Slides
NrChapterDownload
1Welcomepdf
2Data Models and Languages

v2 (letztes Update: 6. November 2017)

pdf
3Typed Data, Declarativity, Data Independence, Persistence

v2 (letztes Update: 6. November 2017)

pdf
4The Relational Data Modelpdf
5Constraintspdf
6A Diversion into SQLpdf
7Referential Integritypdf
8Database Designpdf
9Grouping and Aggregationpdf
10Functional Dependenciespdf
11The Entity-Relationship Model

v5 (letztes Update: 9. Januar 2018)

pdf
12The Relational Algebrapdf
13Recursive Queriespdf
Additional material (code, data)
NrFileDownload
1GenBank-Eintrag für Bakers' Yeast

Datenmodell Text

txt
2LEGO Set 5610

Datenmodell Text

txt
3Gesamtgewicht des LEGO Set 5610

Shell-Skript, basierend auf sed und awk (Datenmodell Text).

Usage (UNIX-Shell): weight-of-set5610.sh < set5610-1.txt

sh
4LEGO Set 5610

Datenmodell JSON

json
5USGS Earthquake Data

Datenmodell JSON

json
6Gesamtgewicht des LEGO Set 5610

(JSONiq-Query)

Usage (UNIX-Shell): zorba -r -i -f -q weight-of-set5610.jq

jq
7Stärke des schwersten Erdbebens auf der Nordhalbkugel

(JSONiq-Query)

Usage (UNIX-Shell): zorba -r -i -f -q worst-northern-quake-mag.jq

jq
8Stärke und Ort des schwersten Erdbebens auf der Nordhalbkugel

(JSONiq-Query)

File enthält drei Varianten der Query (zwei Varianten sind derzeit via (: ... :) auskommentiert).

Usage (UNIX-Shell): zorba -r -i -f -q worst-northern-quake-mag-place.jq

jq
9USGS Earthquake Data

Datenmodell Tabular (CSV)

csv
10Python-Modul DB1 (Python 2.7)

Einfache Query-Library (PyQL und relationale Algebra) für Python 2.7. Einbindung in Python-Code via

from DB1 import Table

py
11Python-Modul DB1v3 (Python 3)

Einfache Query-Library (PyQL und relationale Algebra) für Python 3. Einbindung in Python-Code via

from DB1v3 import Table

  • Update (15. Januar, 16:20 Uhr): Implementation von RA aktualisiert
  • Update (15. Januar, 15:30 Uhr): redundanten Aufruf von dupe() entfernt
  • Update (13. November, 21:40 Uhr): dump(‹file›) vermeidet extra Newlines unter Windows
  • Update (7. November, 22:59 Uhr): Methode dump(‹file›) wird jetzt unterstützt
  • Update (27. Oktober, 10:30 Uhr): CSV-Files werden im Encoding utf8 gelesen
py
12Stärke und Ort des schwersten Erdbebens auf der Nordhalbkugel

(PyQL-Query, liest CSV-File earthquakes.csv)

Usage (UNIX-Shell): python worst-northern-quake-mag-place.py

py
13Tabelle contains (LEGO Sets)

Datenmodell Tabular (CSV)

csv
14Tabelle bricks (LEGO Bausteine)

Datenmodell Tabular (CSV)

csv
15Tabelle minifigs (LEGO Minifiguren)

Datenmodell Tabular (CSV)

csv
16Gewicht des LEGO Set 5610

(PyQL-Query)

Usage (UNIX-Shell): python weight-of-set5610.py

py
17Gewicht des LEGO Set 5610 (Optimierung #1)

(PyQL-Query)

Optimierung basiert auf Regeln (constraints) der LEGO Mini-World: eindeutige Identifier in Tabellen bricks und minifigs sowie Disjunktheit beider Tabellen.

Usage (UNIX-Shell): python weight-of-set5610-key.py

py
18Gewicht des LEGO Set 5610 (Optimierung #2)

(PyQL-Query)

Optimierung basiert auf Konstruktion einer temporären Datenstruktur (Dictionary/partielle Funktion quantity).

Usage (UNIX-Shell): python weight-of-set5610-temp.py

py
19Gewicht des LEGO Set 5610 (Data Independence #1)

(PyQL-Query)

Einführung einer temporären Liste pieces als Vereinigung von bricks und minifigs.

Usage (UNIX-Shell): python weight-of-set5610-pieces-list.py

py
20Gewicht des LEGO Set 5610 (Data Independence #2)

(PyQL-Query)

Basiert auf einer neuen persistenten Tabelle pieces.csv, die in der UNIX-Shell durch folgendes Kommando konstruiert werden kann:

cut -f1-6 bricks.csv | last +2 | cat minifigs.csv - > pieces.csv

Usage (UNIX-Shell): python weight-of-set5610-pieces-table.py

py
21SQL DML Statements (Tabelle calendar)

(SQL-Skript)

Demonstration der SQL DML Kommandos INSERT, UPDATE und DELETE.

Usage (UNIX-Shell): psql -f calendar.sql

sql
22SQL 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, INSERT/UPDATE/DELETE-Kommandos sind auf die Relation nicht anwendbar).

Achtung: Im SQL-Skript muss der (absolute) Pfad zum CSV-File angepasst werden.

Usage (UNIX-Shell): psql -f fdw.sql

sql
23Kopie (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): psql -f insert-query.sql

sql
24SQL DDL Statements zur Deklaration von Constraints

(SQL-Skript)

Reichert Tabelle calendar mit einer Reihe von Constraints an, um die Abbildung der Kalender-Miniwelt in die Datenbank zu verfeinern.

Usage (UNIX-Shell): psql -f calendar-constraints.sql

sql
25Kandidaten- 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): psql -f keys.sql

sql
26Die SQL FROM-Klausel

(SQL-Skript)

Demonstriert, dass die Nennung von Subqueries in der FROM-Klausel reihenfolgeunabhängig ist.

Usage (UNIX-Shell): psql -f calendar-attendees.sql

sql
27Row-Types und Row-Values in SQL

(SQL-Skript)

Demonstriert das Konzept der row types und row values in SQL.

Usage (UNIX-Shell): psql -f row-types.sql

sql
28(Überflüssiges) DISTINCT in SQL

(SQL-Skript)

Demonstriert, das für einige Queries die Nennung von DISTINCT überflüssig sein kann, da ohnehin keine Duplikate erzeugt werden. Das RDBMS erkennt die meisten dieser Situationen nicht selbsttätig.

Usage (UNIX-Shell): psql -f distinct-vs-keys.sql

sql
29SQL: 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): psql -f who-is-busy-at-what-times.sql

sql
30SQL: Kompositionalität (Subqueries)

(SQL-Skript)

Demonstriert den Einsatz von Subqueries (⟨query⟩) in der Berechnung von Ausdrücken.

Usage (UNIX-Shell): psql -f compositional.sql

sql
31SQL: Kompositionalität (WITH)

(SQL-Skript)

Demonstriert den Einsatz von WITH ... zur Konstruktion komplexerer Queries. Die in WITH gebundenen Namen sind nur lokal sichtbar und sind nicht persistent.

Usage (UNIX-Shell): psql -f large-yellow-bricks.sql

sql
32SQL: Korrelierte Unteranfragen

(SQL-Skript)

Demonstriert die Nutzung korrelierter Unteranfragen (die freie Variablen beinhalten, die in der umgebenden Anfrage gebunden werden).

Usage (UNIX-Shell): psql -f correlation.sql

sql
33SQL: 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): psql -f foreign-keys.sql

sql
34SQL: Referentielle Integrität

(SQL-Skript)

Demonstriert die (manuelle) Überprüfung der referentiellen Integrität einer Datenbank mittels der SQL-Prädikate EXISTS und [NOT] IN.

Achtung: Im SQL-Skript muss ein (absoluter) Pfade zu einem CSV-File angepasst werden.

Usage (UNIX-Shell): psql -f referential-integrity.sql

sql
35SQL: Intra-Table Foreign Keys (Operationen auf Bäumen)

(SQL-Skript)

Repräsentation von Bäumen mittels Fremdschlüsseln innerhalb einer Tabelle (tree). Baum-Operationen führen zu Self-Joins.

Usage (UNIX-Shell): psql -f intra-table-foreign-keys.sql

sql
36SQL (1NF vs NF²): Codierung strukturierter Information als Text

(SQL-Skript)

Repräsentation von Logo turtle drawing commands mittels Datentyp text. Führt zur Extraktion von Teilinformation mittels regulärer Ausdrücke (Funktionen regxp_split_to_table(), regexp_matches()).

Usage (UNIX-Shell): psql -f turtle-text.sql

sql
37SQL (1NF vs NF²): Codierung strukturierter Information in Arrays

(SQL-Skript)

Repräsentation von Logo turtle drawing commands mittels Arrays von Kommandos (Typ cmd[]). Benutzt tabellen-generierende Funktion unnest() als "Brücke" von Arrays zu Tabellen.

Usage (UNIX-Shell): psql -f turtle-array.sql

sql
38SQL (1NF vs NF²): Codierung strukturierter Information in geschachtelten Tabellen

(SQL-Skript)

Repräsentation von Logo turtle drawing commands in geschachtelten Tabellen — die resultierende Tabelle ist in Non-First Normal Form (NF²). Nach Entschachtelung wird die NF²-Tabelle durch zwei 1NF-Tabellen shapes und turtles repräsentiert.

Usage (UNIX-Shell): psql -f turtle-1NF.sql

sql
39SQL: Gruppierung und Aggregation

(SQL-Skript)

Demonstration verschiedener SQL Aggregat-Funktionen (siehe auch die PostgreSQL 10-Dokumentation zu Aggregat-Funktionen).

Usage (UNIX-Shell): psql -f grouping-aggregation.sql

sql
40SQL: Gruppierung und Aggregation (im Turtle-Beispiel)

(SQL-Skript)

Demonstration von Gruppierung und Aggregation im shapes/turtles-Beispiel.

Usage (UNIX-Shell): psql -f grouping-turtle.sql

sql
41SQL: Gruppierung und Aggregation (Kalender)

(SQL-Skript)

Gruppierung und Aggregation auf der Kalender-Datenbank

Usage (UNIX-Shell): psql -f who-is-busy-at-what-times-grouped.sql

sql
42SQL: LEGO Data Warehouse (Report Queries)

(SQL-Skript)

Aufbau eines Mini-Data Warehouse für die LEGO-Datenbank. Einfache Report-Queries.

Usage (UNIX-Shell): psql -f dw.sql

sql
43SQL: 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): psql -f lego-aggregates.sql

sql
44SQL: Test auf Kandidatenschlüssel

(SQL-Skript)

Test: Ist die angegebene Attributmenge ein Kandidatenschlüssel für Tabelle contains?

Usage (UNIX-Shell): psql -f candidate-key-test.sql

sql
45SQL: 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): psql -f grouping-null.sql

sql
46SQL: LEGO Building Instructions (funktionale Abhängigkeiten)

(SQL-Skript)

Generiert Tabelle instructions, die einen Auszug einer LEGO-Bauanleitung darstellt. Szenario zur Demonstration von funktionalen Abhängigkeiten.

Achtung: Im Skript müssen Pfade zu den Illustrationen der Bauanleitung angepasst werden. Die Illustrationen selbst befinden sich ich im ZIP-Archiv instructions.zip.

Usage (UNIX-Shell): psql -f instructions.sql

sql
47Illustrationen zu den LEGO Building Instructions

(ZIP-Archiv mit PNG-Bildern)

Enthält die Illustrationen zur LEGO-Bauanleitung in Tabelle instructions. Werden in die Datenbank geladen durch SQL-Skript instructions.sql.

Usage (UNIX-Shell): unzip instructions.zip

zip
48Haskell: Generierung von Kandidatenschlüsseln

(Haskell-Source)

Haskell-Implementation der Algorithmen key(K,U,F) und cover(α,F). Mehrere Beispiel-Szenarien sind vorbereitet (siehe Funktion main).

Usage (UNIX-Shell): ghc --make cover-derive-keys.hs; ./cover-derive-keys

hs
49SQL: Simulation von FD-Constraints (mittels Trigger)

(SQL-Skript)

Nutzt einen SQL-Trigger, um die FD rating → stars in Tabelle users zu überwachen. Achtung: Dies ist ineffizient und kein gutes Datenbank-Design.

Usage (UNIX-Shell): psql -f simulate-FD-constraint.sql

sql
50SQL: Erzeugung künstlicher Schlüsselwerte

(SQL-Skript)

Nutzt den Spalten, die als GENERATED ALWAYS AS IDENTITY deklariert wurden. Stützt sich intern auf SQL-Sequenzen (sequences).

Usage (UNIX-Shell): psql -f identity.sql

sql
51SQL: 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): psql -f airport-country.sql

sql
52SQL: 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 INHERITS.

Usage (UNIX-Shell): psql -f employee-secretary-engineer.sql

sql
53RA: Selektion

(Python-Skript, benötigt Python-Modul DB1 oder Python3-Modul DB1v3)

Demonstriert den Selektions-Operators σp der Relationalen Algebra (RA). Das Selektionsprädikat p wird hier in Form eines λ-Ausdrucks als anonyme Funktion angegeben:

lambda t: ...⟨Boolescher Ausdruck, der sich auf Tupel t bezieht⟩ ...

Usage (UNIX-Shell): python selection.py

py
54RA: Projektion

(Python-Skript, benötigt Python-Modul DB1 oder Python3-Modul DB1v3)

Demonstriert den Projektions-Operators π der Relationalen Algebra (RA). Die Projektions-Funktion ℓ kann in zwei Formen angegeben werden:

  1. Als anonyme Funktion, die ein Eingabetupel t auf ein Ausgabetupel abbildet (z.B. zur Umbenennung oder Erzeugung neuer Spalten), Beispiel:

    lambda t: { 'X': t['A'], 'Z': int(t['B']) + 42 }

  2. Als Liste von Namen von Spalten, die nach der Projektion erhalten bleiben — alle anderen Spalten werden "wegprojiziert"):

    ['A', 'B']

Usage (UNIX-Shell): python projection.py

py
55RA: Two-Hops-Query

(Python-Skript, benötigt Python-Modul DB1 oder Python3-Modul DB1v3)

Demonstriert das Zusammenspiel der RA-Operatoren π, σ und ⨉ zur Implementation einer Anfrage über Graphen (findet alle Pfade der Länge 2).

Usage (UNIX-Shell): python two-hops.py

py
56RA: Natural Join

(Python-Skript, benötigt Python-Modul DB1 oder Python3-Modul DB1v3)

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): python natural-joins.py

py
57RA: LEGO-Steine aus der "Animal"-Kategorie

(Python-Skript, benötigt Python-Modul DB1 oder Python3-Modul DB1v3)

Findet die LEGO-Steine, die aus einer Kategorie mit Bezug zu "Animal" stammen. Greift auf die Tabellen sets.csv und categories.csv zu.

Usage (UNIX-Shell): python animal-bricks.py

py
58RA: LEGO-Sets, die schwerer als "Taj Mahal" sind

(Python-Skript, benötigt Python-Modul DB1 oder Python3-Modul DB1v3)

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 sets.csv zu.

Usage (UNIX-Shell): python heavy-sets.py

py
59RA: Kategorisiere LEGO-Sets nach Volumen

(Python-Skript, benötigt Python-Modul DB1 oder Python3-Modul DB1v3)

Kategorisiert LEGO-Sets nach ihrem Volumen (small, medium, large). Greift auf Tabelle sets zu.

Usage (UNIX-Shell): python set-size-categories.py

py
60SQL: Kategorisiere LEGO-Sets nach Volumen

(SQL-Skript)

Kategorisiert LEGO-Sets nach ihrem Volumen (small, medium, large). Zwei Varianten nutzen Fallunterscheidung (CASE...WHEN) und Mengenoperationen (UNION ALL).

Usage (UNIX-Shell): psql -f set-size-categories.sql

sql
61RA: LEGO-Sets, die keine Bausteine mit Aufkleber enthalten

(Python-Skript, benötigt Python-Modul DB1 oder Python3-Modul DB1v3)

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 sets, contains und bricks zu.

Usage (UNIX-Shell): python no-sticker-bricks.py

py
62RA: LEGO-Sets, die ausschliesslich gelbe Bausteine enthalten

(Python-Skript, benötigt Python-Modul DB1 oder Python3-Modul DB1v3)

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 sets, contains sowie auf Tabelle colors zu.

Usage (UNIX-Shell): python all-yellow-bricks.py

py
63Tabelle "colors" (LEGO Farbpalette)

Datenmodell Tabular (CSV)

csv
64Tabelle "replaces" (welcher LEGO Brick kann gleichwertig wie ersetzt werden?)

Datenmodell Tabular (CSV)

csv
65Tabelle "bricks-small" (gekürzte Variante der Tabelle "bricks")

Datenmodell Tabular (CSV)

csv
66Tabelle "sets-small" (gekürzte Variante der Tabelle "sets")

Datenmodell Tabular (CSV)

csv
67Tabelle "contains-small" (gekürzte Variante der Tabelle "contains")

Datenmodell Tabular (CSV)

csv
68RA: Ermittle das schwerste LEGO-Set

(Python-Skript, benötigt Python-Modul DB1 oder Python3-Modul DB1v3)

Findet das schwerste LEGO-Set. Nicht-monotone Anfrage, demonstriert den Einsatz des Antijoin-Operators (▷). Greift auf gekürzte Variante der Tabelle sets zu.

Usage (UNIX-Shell): python max-weight-set.py

py
69RA: Welche Sets enthalten alle notwendigen Steine?

(Python-Skript, benötigt Python-Modul DB1 oder Python3-Modul DB1v3)

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 sets und contains zu.

Usage (UNIX-Shell): python what-can-we-build.py

py
70RA: Liste LEGO-Steine und ihren evtl. Ersatz auf

(Python-Skript, benötigt Python-Modul DB1 oder Python3-Modul DB1v3)

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 contains, bricks und replaces zu.

Usage (UNIX-Shell): python bricks-with-replacement.py

py
71SQL: 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 (LEFT OUTER JOIN).

Usage (UNIX-Shell): psql -f bricks-with-replacement.sql

sql
72SQL: 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 (LEFT OUTER JOIN) und der Gruppierung/Aggregation in SQL.

Usage (UNIX-Shell): psql -f popular-colors.sql

sql