Die Olympia-Datenbank
(das Standard-Beispiel aus dem Praktikum)

Olympia-DB: ModellUML-Klas­sen­dia­gramm

Relationales Datenbankschema (ohne Domänen)

sportler:  id, name, vorname*, geburtstag, land, geschlecht
           {PK: id}
           {UNIQUE: name, vorname*, geburtstag, land, geschlecht}
           {geschlecht IN ('w', 'm')}

wettkampf: id, sportart, wettkampfart, geschlecht, sportstaette, beginn*
           {PK: id}
           {UNIQUE: sportart, wettkampfart, geschlecht}
           {geschlecht IN ('w', 'm')}

teilnahme: s_id, w_id, platz*, doping*, disqualifiziert
           {PK: s_id, w_id}
           {FK: s_id -> sportler: id}
           {FK: w_id -> wettkampf: id}
           {platz > 0}
           {NOT(doping IS TRUE AND disqualifiziert IS FALSE)}
           {NOT(disqualifiziert IS TRUE AND platz IS NOT NULL)}

olympia1_create.sql(Daten­bank gemäß Modell 1 erstel­len)
olympia_aufgabe_1.sql(Prak­ti­kums­auf­ga­be Olym­pia Teil 1)
olympia1_aufgabe_1_loesung.sql(Lösungs­vor­schlä­ge zu Auf­ga­be 1)
olympia_aufgabe_2.sql(Prak­ti­kums­auf­ga­be Olym­pia Teil 2)
olympia1_aufgabe_2_loesung.sql(Lösungs­vor­schlä­ge zu Auf­ga­be 2)
olympia_aufgabe_3.sql(Prak­ti­kums­auf­ga­be Olym­pia Teil 3)
olympia1_aufgabe_3_loesung.sql(Lösungs­vor­schlä­ge zu Auf­ga­be 3)
olympia_aufgabe_4.sql(Prak­ti­kums­auf­ga­be Olym­pia Teil 4)
olympia1_aufgabe_4_loesung.sql(Lösungs­vor­schlä­ge zu Auf­ga­be 4)

Robustes Olympia-DB-Datenmodell

Olympia-DB: Robustes Datenmodell (UML)UML-Klas­sen­dia­gramm

Relationales Datenbankschema (ohne Domänen)

enum_land:         id, kuerzel, name_de, name_en, name_fr
                   {PK: id} 
                   {UNIQUE: kuerzel}
                   {UNIQUE: name_de}
                   {UNIQUE: name_en}
                   {UNIQUE: name_fr}

enum_sportart:     id, name
                   {PK: id} 
                   {UNIQUE: name}

enum_wettkampfart: id, name
                   {PK: id} 
                   {UNIQUE: name}

enum_sportstaette: id, name
                   {PK: id} 
                   {UNIQUE: name}

e_sportler:        id, name, vorname*, geburtstag, l_id, geschlecht 
                   {PK: id} 
                   {UNIQUE: name, vorname*, geburtstag, land, geschlecht}

e_wettkampf:       id, wa_id, geschlecht, spst_id, beginn* 
                   {PK: id}
                   {UNIQUE: wa_id, geschlecht}  

r_teilnahme:       s_id, w_id, platz*, doping*, disqualifiziert  
                   {PK: s_id, w_id}  
                   {FK: s_id -> e_sportler: id}
                   {FK: w_id -> e_wettkampf: id}
                   {platz > 0}
                   {NOT(doping IS TRUE AND disqualifiziert IS FALSE)}
                   {NOT(disqualifiziert IS TRUE AND platz IS NOT NULL)}
                   {(SELECT geschlecht FROM e_sportler s
                     WHERE s.id = NEW.s_id)
                    =
                    (SELECT geschlecht FROM e_wettkampf w
                     WHERE w.id = NEW.w_id)
                   }
                   {platz <= (SELECT COUNT(*)
                              FROM   r_teilnahme t
                              WHERE      t.w_id = NEW.w_id 
                                     AND t.platz IS NOT NULL
                             )
                   }

olympia2_create.sql(Daten­bank gemäß Modell 2 erstel­len)
olympia_aufgabe_1.sql(Prak­ti­kums­auf­ga­be Olym­pia Teil 1)
olympia2_aufgabe_1_loesung.sql(Lösungs­vor­schlä­ge zu Auf­ga­be 1)
olympia_aufgabe_2.sql(Prak­ti­kums­auf­ga­be Olym­pia Teil 2)
olympia2_aufgabe_2_loesung.sql(Lösungs­vor­schlä­ge zu Auf­ga­be 2)
olympia_aufgabe_3.sql(Prak­ti­kums­auf­ga­be Olym­pia Teil 3)
olympia2_aufgabe_3_loesung.sql(Lösungs­vor­schlä­ge zu Auf­ga­be 3)
olympia_aufgabe_4.sql(Prak­ti­kums­auf­ga­be Olym­pia Teil 4)
olympia2_aufgabe_4_loesung.sql(Lösungs­vor­schlä­ge zu Auf­ga­be 4)

Robustes Olympia-DB-Datenmodell mit Views zur Vereinfachung

Olympia-DB: Robustes Datenmodell mit Views(UML)UML-Klas­sen­dia­gramm

Relationales Datenbankschema (ohne Domänen)

Das rela­tio­na­le Daten­bank­sche­ma das zwei­ten Modell wird eins-zu-eins über­nom­men.
Das rela­tio­na­le Daten­bank­sche­ma des ers­ten Modells wird mit Hil­fe von Updata­ble Views auf die Tabel­len des zwei­ten Modells abge­bil­det.
Dar­über hin­aus gibt es noch drei wei­te­re Views, die Joins zwi­schen zwei bzw. drei der Tabel­len sportler, wettkampf und teilnahme auf eine ein­zi­ge vir­tu­el­le Tabel­le abbil­den.

olympia3_create.sql(Daten­bank gemäß Modell 3 erstel­len)
olympia_aufgabe_1.sql(Prak­ti­kums­auf­ga­be Olym­pia Teil 1)
olympia1_aufgabe_1_loesung.sql
olympia2_aufgabe_1_loesung.sql
olympia3_aufgabe_1_loesung.sql
(Lösungs­vor­schlä­ge zu Auf­ga­be 1)
olympia_aufgabe_2.sql(Prak­ti­kums­auf­ga­be Olym­pia Teil 2)
olympia1_aufgabe_2_loesung.sql
olympia2_aufgabe_2_loesung.sql
olympia3_aufgabe_2_loesung.sql
(Lösungs­vor­schlä­ge zu Auf­ga­be 2)
olympia_aufgabe_3.sql(Prak­ti­kums­auf­ga­be Olym­pia Teil 3)
olympia1_aufgabe_3_loesung.sql
olympia2_aufgabe_3_loesung.sql
olympia3_aufgabe_3_loesung.sql
(Lösungs­vor­schlä­ge zu Auf­ga­be 3)
olympia_aufgabe_4.sql(Prak­ti­kums­auf­ga­be Olym­pia Teil 4)
olympia1_aufgabe_4_loesung.sql
olympia2_aufgabe_4_loesung.sql
olympia3_aufgabe_4_loesung.sql
(Lösungs­vor­schlä­ge zu Auf­ga­be 4)