Die Händler-Datenbank (das Standard-Beispiel aus der Vorlesung)

Händler-DB: Modell (UML)UML-Klassendiagramm

Händler-DB: Modell (ER)ER-Diagramm

Relationales Datenbankschema (ohne Domänen)

haendler: h_id, h_name, h_adresse*           {PK: s_id} 
                                             {UNIQUE: h_name, h_adresse}
ware:     w_id, w_typ, w_bezeichnung         {PK: w_id}

                                             {UNIQUE: w_typ, w_bezeichung}  
liefert:  h_id, w_id, l_preis, l_lieferzeit* {PK: s_id, w_id}  

                                             {FK: h_id -> haendler: h_id}
                                             {FK: w_id -> ware: w_id}
                                             {l_lieferzeit > 0}

SQL-Beispiele

haendler-vorlesung.sql(CREATE-TABLE- und INSERT-Befehle)
haendler.sql(CREATE-TABLE- und INSERT-Befehle: Praktikumsversion, etwas mehr Daten)
query_aufgabe1.sql(die Fragen aus der ersten Praktikumsaufgabe)
query_00.sql(Listet die Inhalte der Tabellen auf)
query_01-identitaet.sql(Beispiele zum Identitäts-Operator)
query_02-projektion.sql(Beispiele zum Projektions-Operator)
query_03-selektion.sql(Beispiele zum Selektions-Operator)
query_04-set.sql(Beispiele zu den Mengen-Operationen)
query_05-join.sql(Beispiele zum Join-Operator)
query_06-aggregation.sql(Beispiele für Aggrefgation)
query_07-gruppierung.sql(Beispiele für Aggregation mit Gruppierung)
query_08-subqueries.sql(Beispiele für Subqueries)
query_09-for-all.sql(Beispiele zur "Für-alle"-Operation)
update-01.sql(Beispiele zur Update-Operation)
haendler_json.sql(Eine Händler-Datenbank mit Daten im JSON-Format)
query_json_01.sql(Ein paar zugehörige Anfragen)

Verbessertes Händler-DB-Datenmodell

Händler-DB: Verbessertes Datenmodell (UML)UML-Klassendiagramm

Händler-DB: Verbessertes Datenmodell (ER)ER-Diagramm

Relationales Datenbankschema (ohne Domänen)

typ:      t_id, t_name                       {PK: t_id}
                                             {UNIQUE: t_name}

haendler: h_id, h_name, h_adresse*           {PK: s_id} 
                                             {UNIQUE: h_name, h_adresse}

ware:     w_id, t_id, w_bezeichnung          {PK: w_id} 
                                             {FK: t_id -> typ: t_id}
                                             {UNIQUE: w_typ, w_bezeichung} 
 
liefert:  h_id, w_id, l_preis, l_lieferzeit* {PK: s_id, w_id}  
                                             {FK: h_id -> haendler: h_id}
                                             {FK: w_id -> ware: w_id}
                                             {l_lieferzeit > 0}

SQL-Beispiele

haendler2.sql(Verbessertes Datenmodell: typ als eigene Tabelle)

Dieses Datenmodell hat den Vorteil, dass für eine Ware nicht beliebige Zeichenketten als Warentyp angegeben werden können. Einer Ware können nur diejenigen Typen zugeordnet werden, die in der (modifizierbaren!) Tabelle typ enthalten sind. Damit weden Tippfehler bei der Eingabe unmöglich gemacht. Außerdem kann der Inhalt der Tabelle typ zur Generierung eines Drop-Down-Menüs verwendet werden.

Modifiziertes Händler-DB-Datenmodell

Die zuvor definerte verbesserte Version des Händler-DB-Datenmodells hat einen entscheidenden Nachteil: Die Anfragen, die für das erste Datenmodell geschrieben wurden, funktionieren nur noch zu Teil für das verbesserte Datenmodell. Viele Anfragen müssten an das neue Datenmodell angepasst werden.

Dieses Problem kann gelöst werden, indem man zunächst alle Tabellen anders benennt und dann die im ersten Modell definierten Tabellen als virtuelle Tabellen (modifizierbare Views) definiert. Tabellen, die Entitäten (= Objekte) beschreiben, erhalten den Präfix e_, Tabellen, die Beziehungen (= Relations = Assoziations) beschrbeien, erhalten den Präfix r_ und Tabellen, die dynamisch veränderbaren Aufzählungstypen realisieren, erhalten den Präfix enum_.

Für das folgende Datenmodell funktionieren alle zuvor definierten Select-Anfragen sowie die meisten Modifikationsanweisungen. Eine wichtige Ausnahme gibt es allerdings: Es ist nicht möglich, einer Ware einen Warentyp zuzuordnen, der nicht zuvor in der Tabelle enum_type definiert wurde.

Händler-DB: Datenmodell mit Views (UML)UML-Klassendiagramm

Händler-DB: Datenmodell mit Views (ER)ER-Diagramm

SQL-Beispiele

haendler3.sql(Verbessertes Datenmodell: Urspüngliches Datenmodell als Views)