FH 0. Datenintegrität constraints : Übung / Prakt. constraints 1) Implementieren Sie folgende constraints auf der Muster-DB: Relation: Lieferant Lieferanten_nr primary key Name not null alter table lieferanten add constraint lieferantennr_pk primary key(lieferanten_nr); alter table lieferanten modify (name not null); Datenbanken 2 - WS 2013/2014 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 1 [..] 0. Datenintegrität constraints : Übung / Prakt. constraints Relation: Artikel Artikel_Nr prim key Lieferanten_Nr foreign key (Lieferant) Warengruppe Wert: 1-99, not null Mengeneinheit Wert: "g","kg","t","Stck" Verkaufspreis not null, Wert > 0 und > einkaufspreis Einkaufspreis Wert <=0 und < verkaufspreis Lieferzeit Wert > 0 und < 100 Bestand_Minimum Wert >= 0 Datenbanken 2 - WS 2013/2014 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 2 [..] 0. Datenintegrität constraints : Übung / Prakt. constraints alter table artikel add constraint artikel_nr_pk primary key(artikel_nr); alter table artikel add constraint lieferanten_fk foreign key (lieferanten_nr) references lieferanten(lieferanten_nr) on update cascade on delete set null; alter table artikel add constraint warengruppe_check check (warengruppe between 1 and 99); alter table artikel modify (warengruppe not null); alter table artikel add constraint mengeneinheit_check check (mengeneinheit in ('g', 'kg', 't', 'Stck')); alter table artikel modify (verkaufspreis not null); alter table artikel add constraint verkaufspreis_check check (verkaufspreis > 0 and verkaufspreis > einkaufspreis); alter table artikel add constraint einkaufspreis_check check (einkaufspreis >=0 and einkaufspreis < verkaufspreis); alter table artikel add constraint lieferzeit_check check (lieferzeit > 0 and lieferzeit < 100); alter table artikel add constraint bestand_min_check check (bestand_minimum >=0); Datenbanken 2 - WS 2013/2014 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 3 [..] 0. Datenintegrität constraints : Übung / Prakt. constraints Relation: ArtikelLager Artikel_Nr prim key, foreign key (Artikel) Lager_Nr prim key, Wert >0 Bestand_Lager alter table artikellager add constraint artikelnr_pk primary key(artikel_nr, lager_nr); alter table artikellager add constraint artikelnr_fk foreign key(artikel_nr) references artikel(artikel_nr) on update cascade on delete cascade; alter table artikellager add constraint lager_nr_check check(lager_nr > 0); Datenbanken 2 - WS 2013/2014 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 4 [..] 0. Datenintegrität constraints : Übung / Prakt. constraints Relation : Kunden Kunde_Nr prim key Name not null Plz_Strasse not null Land not null , Wert : "D", "A", "I", "CH", "GB" Ort not null Kundengruppe >=0, <= 100 Gesperrt_Kz Wert: 0,1 Kreditlimit NOT NULL, >=0 Datenbanken 2 - WS 2013/2014 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 5 [..] 0. Datenintegrität constraints : Übung / Prakt. constraints alter alter alter alter alter alter alter alter alter alter table kunden add constraint kundenr_pk primary key(kunde_nr); table kunden modify (name not null); table kunden modify (plz_strasse not null); table kunden modify (land not null); table kunden add constraint land_check check (land in ("D", "A", "I", "CH", "GB")); table kunden modify (ort not null); table kunden add constraint kundengruppe_check check (kundengruppe >= 0 and kundengruppe <= 100); table kunden add constraint gesperrt_kz_check check (gesperrt_kz in (0,1)); table kunden modify (kreditlimit not null); table kunden add constraint kreditlimit_check check (kreditlimit >= 0); Datenbanken 2 - WS 2013/2014 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 6 [..] 0. Datenintegrität constraints : Übung / Prakt. constraints Relation: Auftraege Auftrag_Nr prim key Auftrag_Datum not null Kunde_Nr foreign key (Kunden) , not null Vertreter_Nr not null Rabatt_Prozent Wert >=0 und < = 50 alter table auftraege add constraint auftragnr_pk primary key(auftrag_nr); alter table auftraege modify (auftrag_datum not null); alter table auftraege add constraint kundenr_fk foreign key (kunde_nr) references kunden(kunde_nr) on update cascade on delete set default; alter table auftraege modify (kunde_nr not null); alter table auftraege modify (vertreter_nr not null); alter table auftraege add constraint rabatt_check check (rabatt_prozent between 0 and 50); Datenbanken 2 - WS 2013/2014 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 7 [..] 0. Datenintegrität constraints : Übung / Prakt. constraints Relation: Auftragspositionen Auftrag_Nr prim key, foreign key (Auftrag) Position_Nr prim key, > 0 Position_aktiv not null, Wert 0,1 Artikel_Nr not null, foreign key (Artikel) Menge not null Preis not null, Wert >= 0 Berechnet Wert <= geliefert eindeutig: (auftrag_nr, Artikel_nr) Datenbanken 2 - WS 2013/2014 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 8 [..] 0. Datenintegrität constraints : Übung / Prakt. constraints alter table auftragspositionen add constraint auftragnr_pk2 primary key(auftrag_nr, position_nr); alter table auftragspositionen add constraint auftragnr_fk2 foreign key(auftrag_nr) references auftraege(auftrag_nr) on update cascade on delete cascade; alter table auftragspositionen modify (position_aktiv not null); alter table auftragspositionen add constraint position_check check (position_aktiv in (0,1)); alter table auftragspositionen modify (artikel_nr not null); alter table auftragspositionen add constraint artikelnr_fk foreign key(artikel_nr) references artikel(artikel_nr) on update cascade on delete set null; alter table auftragspositionen modify (menge not null); alter table auftragspositionen modify (preis not null); alter table auftragspositionen add constraint preis_check check(preis >= 0); alter table auftragspositionen add constraint berechnet_check Datenbanken 2 check(berechnet < geliefert); - WS 2013/2014 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 9 [..] 0. Datenintegrität constraints : Übung / Prakt. constraints Relation: Rechnungen Rechnung_Nr prim key Rechnung_Datum not null Kunde_Nr not null, foreign key (Kunde) Auftrag_Nr not null, foreign key (Auftraege) Datum_Faellig Wert NULL oder >= Rechnung_Datum Datum_Mahnung_1 Wert NULL oder >= Datum_Faellig / Rechnung_Datum Datum_Mahnung_2 NULL oder > Datum_Mahnung_1 (Wert nur wenn Datum_Mahnung_1 IS NOT NULL) Zahldatum NULL oder > Rechnung_Datum Bezahlt Wert 0,1 Datenbanken 2 - WS 2013/2014 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 10 [..] 0. Datenintegrität constraints : Übung / Prakt. constraints alter table rechnungen add constraint rechnungnr_pk primary key (rechnung_nr); alter table rechnungen modify (rechnung_datum not null); alter table rechnungen modify (kunde_nr not null); alter table rechnungen add constraint kundenr_fk2 foreign key(kunde_nr) references kunden(kunde_nr) on update cascade on delete set default; alter table rechnungen modify (auftrag_nr not null); alter table rechnungen add constraint auftragnr_fk2 foreign key(auftrag_nr) references auftraege(auftrag_nr) on update cascade on delete set default; alter table rechnungen add constraint datum_faellig_check check(datum_faellig is null or datum_faellig >= rechnung_datum); alter table rechnungen add constraint mahnung1_check check(datum_mahnung_1 is null or datum_mahnung_1 >= nvl(datum_faellig, rechnung_datum)); Datenbanken 2 - WS 2013/2014 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 11 [..] 0. Datenintegrität constraints : Übung / Prakt. constraints Relation: Bestellungen Bestell_Nr prim key Lieferanten_Nr not null, foreign key (Lieferanten) Lieferant_Name not null Bestelldatum not null Artikel_Nr not null, foreign key Menge Wert > 0 alter table bestellungen add constraint bestellnr_pk primary key(bestell_nr); alter table bestellungen modify (lieferanten_nr not null); alter table bestellungen add constraint lieferantennr_fk foreign key(lieferanten_nr) references lieferanten(lieferanten_nr) on update cascade on delete cascade; alter table bestellungen modify (lieferanten_name not null); alter table bestellungen modify (bestelldatum not null); alter table bestellungen modify (artikel_nr not null); alter table bestellungen add constraint artikelnr foreign key (artikel_nr) references artikel(artikel_nr) on update cascade on delete set default;; alter table bestellungen add constraint menge_check check (menge > 0); Datenbanken 2 - WS 2013/2014 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 12 [..] 0. Datenintegrität constraints : Übung / Prakt. constraints 2) Ergänzen Sie die Hochschuldatenbank aus Kap. 5 um die nachfolgend genannten Integritätsbedingungen Student Matrikelnr|Name|Fachbereich|Fachsemester|Geb_Dat|Geschlecht Schlüssel: Matrikelnr, Geschlecht: w / m, Fachbereich: 1-9 Datenbanken 2 - WS 2013/2014 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 13 [..] 0. Datenintegrität constraints : Übung / Prakt. constraints create table student (matrikel_nr name fachbereich fachsemester geb_dat geschlecht Datenbanken 2 char(12) primary key not null, char(25) not null, int not null check(fachbereich between 1 and 9), int not null check (fachsemester > 0), date not null, char(1) not null check (geschlecht = 'm' or geschlecht= 'w')); - WS 2013/2014 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 14 [..] 0. Datenintegrität constraints : Übung / Prakt. constraints Dozent Name|Fachbereich|Lehrgebiet Schlüssel: Name create table dozent (name char(20) not null primary key, fachber int not null check (fachber between 1 and 9), lehrgebiet char(20) ); Datenbanken 2 - WS 2013/2014 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 15 [..] 0. Datenintegrität constraints : Übung / Prakt. constraints Vorlesung Vorl_Nr|Bezeichnung|Hoersaal|Plätze|Beginn_h|Ende_h|Dozent Schlüssel: Vorl_Nr, Plätze: 20-500, Fremdschlüssel: Dozent auf Tabelle Dozent, Feld Name create table vorlesung (vorl_nr bezeichnung hoersaal plaetze char(5) not null , char(20) , char(8) , int check (plaetze >= 20 and plaetze <= 500), beginn_h char(5) , ende_h char(5), dozent char(20) not null, primary key (vorl_nr), foreign key(dozent) references dozent(name) ); Datenbanken 2 - WS 2013/2014 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 16 [..] 0. Datenintegrität constraints : Übung / Prakt. constraints Hoert Student|Vorlesung Schlüssel: Student und Vorlesung, Fremdschlüssel: Student auf Tabelle Student, Feld Matrikelnr, Vorlesung auf Tabelle Vorlesung Feld Vorl_Nr create table hoert (student char(12) not null, vorlesung char(5) not null, primary key (student, vorlesung) , foreign key(student) references student(matrikel_nr), foreign key(vorlesung) references vorlesung (vorl_nr) ); Datenbanken 2 - WS 2013/2014 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 17 [..] 0. Datenintegrität constraints : Übung / Prakt. constraints Klausurergebnis Student|Fach|Klausur_Datum|Ergebnis Schlüssel: Student und Fach und Klausur_Datum, Fremdschlüssel: Student auf Tabelle Student, Fach Matrikel_Nr create table klausurergebnis (student char(12) not null, fach char(25) not null, klausur_datum date not null, ergebnis numeric(3,1) check ( ergebnis in (1.0, 1.3, 1.7, 2.0, 2.3, 2.7, 3.0, 3.3, 3.7, 4.0,5.0) ) , primary key (student, fach, klausur_datum) , foreign key(student) references student(matrikel_nr) ); Datenbanken 2 - WS 2013/2014 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 18 [..] 0. Datenintegrität Views : Übung / Prakt. constraints 3) Es sei folgende Integritätsregel gegeben: „Für einen gesperrten Kunden darf kein Auftrag erfasst werden“ Setzen diese Regel durch einem prüfenden View um. create view auftrag_integrität as select * from auftraege where (select gesperrt_kz from kunden k where .kunde_nr = auftraege.kunde_nr) = 0 with check option Datenbanken 2 - WS 2013/2014 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 19 Teil 1. Trigger PL/SQL: Übungen / Lösungen Aufgabe: Bestellung Artikel Artikel_nr Bestand EK-Preis Bestellmenge Bestelldatum Letzt_Lieferant_nr Letzt_Lieferant_Name Lieferant Lieferanten_nr Name Bestellwert_Gesamt diesem alter alter alter alter alter table table table table table artikel add artikel add artikel add artikel add lieferanten Datenbanken 2 char(27) (Prim Key) numeric(10,0) numeric(10,2) numeric(10,0) (letzte bestellte Menge) date (letztes Bestelldatum) int (Nummer des letzten Lieferanten) char(30) (Name des letzten Lieferanten, redundant) int char(30) numeric(10,2) (Prim Key) Gesamtwert (Menge*EK-Preis) aller Bestellungen bei Lieferanten bestellmenge numeric(10,0); bestelldatum date; Letzt_Lieferant_nr int; Letzt_Lieferant_Name char(30); add Bestellwert_Gesamt numeric(10,2); - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 20 Teil 1. Trigger PL/SQL: Übungen / Lösungen Aufgabe: Bestellung Beispieltrigger Nachverarbeitung: Bei der Eingabe von Tupeln in die Tabelle „Bestellung“ werden die in Fettschrift gekennzeichneten Daten in den Tabellen „Artikel“ und „Lieferant“ aktualisiert. create table bestellungen ( bestell_nr int, lieferanten_nr int, lieferanten_name varchar(30), bestelldatum date, artikel_nr varchar(27), menge numeric(9,0) ); Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 21 Teil 1. Trigger PL/SQL: Übungen Aufgabe: Bestellung create or replace trigger bestellneu after insert on bestellungen for each row declare preis float; begin update artikel set bestellmenge = :new.menge, bestelldatum=:new.bestelldatum, letzt_lieferant_nr=:new.lieferant_nr, letzt_lieferant_name = :new.lieferanten_name where artikel_nr = :new.artikel_nr; select einkaufspreis into preis from artikel where artikel_nr=:new.artikel_nr; update lieferanten set bestellwert_gesamt = nvl(bestellwert_gesamt,0) + preis * :new.menge where lieferanten_nr = :new.lieferanten_nr; end; Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 22 Teil 1. Datenintegrität Trigger : Übungen/Lösungen Aufgabe: Familienstand Die Relation „Student“ habe folgende Struktur: create table student (matrikel_nr name fachbereich fachsemester geb_dat geschlecht familienstand char(12), char(25), number, number, date, char(1), char(1)); Implementieren Sie mit den geeigneten Mitteln folgende Integritätsregeln: matrikel_nr : primärschlüssel fachbereich : Wertebereich {1,2,3,4,5,9} geschlecht : Wertebereich {‚w‘ , ‚m‘} familienstand : Wertebereich {‚l‘ , ‚v‘ , ‚g‘ , ‚w‘ } Der Familienstand darf sich nur wie folgt ändern: l (ledig) -> v (verheiratet) v -> g (geschieden) / w (verwitwet) w,g -> v Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 23 Teil 1. Datenintegrität Trigger : Übungen/Lösungen Aufgabe: Familienstand alter alter alter alter table table table table student student student student add add add add constraint constraint constraint constraint pimkey primary key(matrikel_nr); fachb check(fachbereich in (1,2,3,4,5,9)); geschl check(geschlecht in ('m', 'w')); famstand check(familienstand in ('l', 'v', 'g', 'w')); create or replace trigger familienstand after update of familienstand on student /* oder before ? Performance , constraints Fehler nach before !!! */ for each row begin if :new.familienstand in ('g', 'w') and :old.familienstand not in ('v') then raise_application_error(-20000, 'Aenderung in geschieden oder verwitwet nur von verheiratet erlaubt'); rollback; end if; if :new.familienstand in ('l') then raise_application_error(-20000, 'Aenderung in ledig nicht erlaubt'); rollback; end if; if :new.familienstand = :old.familienstand then raise_application_error(-20000, 'Aenderung nicht erlaubt'); rollback; end if; end; Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 24 Teil 1. Datenintegrität Trigger : Übungen/Lösungen Aufgabe: Lagerplätze Es sei folgende Integritätsregel gegeben: „Zu jedem Artikel darf es nur maximal 5 Lagerplätze geben“ a) Diskutieren Sie, mit welchen Integritätsmechanismen diese Regel implementiert werden kann oder nicht b) Implementieren Sie die Regel Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 25 Teil 1. Datenintegrität Trigger : Übungen/Lösungen Aufgabe: Lagerplätze Regel ist dynamisch (erfordert Zählen der Lagerplätze). Constraints deshalb nicht möglich. Ein Trigger ist (immer) möglich. Before Trigger, da Integrität. Erfordert Zugriff auf die dem Trigger zugeordnete Tabelle, die ist gesperrt, daher Hilfstabelle und merken der betroffenen Artikel. Verarbeitung der Hilfstabelle in After-TriggerBefehlsorientiert, dann ist die Tabelle frei. Create table artikeltemp (artikel_nr varchar(27)); Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 26 Teil 1. Datenintegrität Trigger : Übungen/Lösungen Aufgabe: Lagerplätze create or replace Trigger beschraenkte_lagerplaetze before insert on artikellager for each row begin insert into artikel_temp values (:new.artikel_nr); end; Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 27 Teil 1. Datenintegrität Trigger : Übungen/Lösungen Aufgabe: Lagerplätze Trigger zählt die eingefügten Artikel (in Hilfstabelle), die mehr als 5 Einträge in Artikellager haben. Ist diese Zahl > 0, wird die Transaktion abgebrochen. create or replace Trigger beschraenkte_lagerplaetze_kontrolle after insert on artikellager Declare anzahl int; begin Select count(*) into anzahl from hilfstabelle h where (select count(*) from artikellager l where h.artikel_nr = l.artikel_nr) > 5; If anzahl > 0 then raise_application_error(-20000, ‘Ein Artikel hat mehr als 5 Lagerplätze ‘); end if; end; Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 28 Teil 1. Trigger PL/SQL: Übungen / Lösungen Aufgabe: Anzahl Lagerplätze, Lösung MS-SQL-Server Nur befehlsorientierte After-Trigger definiert, aber Sammeln der vom Ereignis betroffenen Tupel in einer Tabelle inserted / bzw. deleted. Die wird mit einem Cursor durchlaufen und die Triggerhandlung je Tupel ausgeführt CREATE TRIGGER [prueffuenfeintraege] ON dbo.artikellager FOR insert AS declare @artikel_nr char(27) declare articurs Cursor FOR select artikel_nr from inserted open articurs fetch next from articurs into @artikel_nr while @@fetch_status=0 begin if (select count(*) from artikel_lager where artikel_nr=@artikel_nr) >= 5 begin raiserror() rollback end fetch next from articurs into @artikel_nr end close artcurs deallocate articurs return Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 29 Teil 1. Trigger PL/SQL: Übungen Aufgabe: Bundesliga create table Spieler ( Nummer int primary key , Spielt_fuer_Ligamannschaft char(40) , Gehalt number(10,2)) create table Spieler_Position ( Person int references spieler(person), Position varchar(40), primary key (person, position) ); Integritätsregel: „Einem Spieler, der für die Ligamannschaft ‚Bayern’ spielt, darf nicht zugleich in der Position „Abwehr“ und „Angriff“ eingesetzt werden (Trigger auf Tabelle Spieler_Position).“ Realisieren Sie diese Regel in Oracle . Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 30 Teil 1. Trigger PL/SQL: Übungen Aufgabe: Bundesliga - Lösung Lösungsansatz: Zeilenorientierter Trigger, da Kenntnis der Daten sinnvoll. Aber: Zugriff auf Tabelle „Spieler_Position“ notwendig, die ist aber gesperrt. Daher speichern der betroffenen Tupel (Key) in Hilfstabelle durch zeilenorientierten Trigger und Prüfung der Regel in befehlsorientiertem after-Trigger (tabelle nicht mehr gesperrt). create table hilf_spieler (spieler int); create trigger pruefe_nutzer_before before insert or update on Spieler_Position for each row begin insert into hilf_spieler values (:new.person); end; Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 31 Teil 1. Trigger PL/SQL: Übungen Aufgabe: Bundesliga - Lösung create trigger pruefe_nutzer_after after insert or update on Spieler_Position declare cnt int; cursor hilf_cur is select spieler from hilf_spieler; spieler_hilf int; mannschaft char(40); begin open hilf_cur; loop fetch hilf_cur into spieler_hilf; exit when hilf_cur %notfound; select Spielt_fuer_Ligamannschaft into mannschaft from spieler where person= spieler_hilf; if if (mannschaft=’Bayern’) select nvl(count(*),0) into cnt from spieler_position where person= spieler_hilf and position in (‚Abwehr’,’Angriff’); if (cnt > 1) raise_application_error(-20000,’Zu viele Positionen’); end if; end if; end loop; close hilf_cur; end; Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 32 Teil 1. Trigger PL/SQL: Übungen / Lösungen Aufgabe: Cursor / Stored Proc Bestellung Schreiben Sie eine gespeicherte Prozedur mit folgender Funktionalität: Durchlaufen Sie die Tabelle Artikel (cursor) . Für jeden aktiven Artikel, bei dem der Lagerbestand kleiner ist als der Mindestbestand, wird ein Eintrag (insert) in die Tabelle Bestellung vorgenommen. Der Artikel wird beim Hauptlieferanten in der im Feld „Bestellmenge“ angegebenen Menge bestellt. Bestelldatum ist das Tagesdatum, Lieferdatum 14 Tage später. Die Prozedur soll den Bestellwert (Summe EK-Preis*Bestellmenge über alle bestellte Artikel) als Output-Parameter zurückgeben. Die Tabellenstrukturen seien wie folgt definiert: Artikel Artikel_nr Aktiv Bestand Mindestbestand Bestellmenge Hauptlieferant EKPreis Lieferant Lieferant_nr Name Bestellung Bestellnr Lieferant Name Bestelldatum Lieferdatum Artikel_nr Menge Datenbanken 2 char(20) bit int int int int number (Prim Key) int char(30) (Prim Key) int int char(20) date date char(20) int (primary key höchste bestehende Nummer um 1 erhöhen) ) (Nummer des Lieferanten (foreign key)) (Name des Lieferanten, redundante Speicherung) (zu bestellende Menge) (foreign key auf Lieferant) (foreign key auf Artikel) Anzahl der bestellten Artikel - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 33 Teil 1. Trigger PL/SQL: Übungen / Lösungen Aufgabe: Cursor / Stored Proc Bestellung create table artikel( artikel_nr varchar(20), aktiv number(1,0), bestand number, mindestbestand number, bestellmenge number, hauptlieferant number, ekpreis number(19,4), primary key(artikel_nr) ); create table lieferant( lieferant_nr number, name varchar(30), primary key(lieferant_nr)); create table bestellung ( bestellnr number, lieferant number, name varchar(20), bestelldatum date, lieferdatum date, artikel_nr varchar(20), menge number, primary key(bestellnr), foreign key(lieferant) references lieferant(lieferant_nr), foreign key(artikel_nr) references artikel(artikel_nr) ); Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 34 Teil 1. Trigger PL/SQL: Übungen / Lösungen Aufgabe: Cursor / Stored Proc Bestellung /* Alternative Lösung unter Nutzung des Oracle-Konzeptes „Sequence“ zur Erzeugung einer Folge von Bestellnummern*/ CREATE SEQUENCE bestellung_seq START WITH 1 INCREMENT BY 1 ; CREATE OR REPLACE PROCEDURE "ARTIKELBESTELLUNG" (bestellwert out number ) as begin declare artnr artikel.artikelnr%type; bestmenge number; preis number (10,2); liefnr number; name char(20); bestnr int; cursor artikelcursor is select artikelnr , bestellmenge, hauptlieferant, ekpreis from artikel where aktiv=1 and bestand < mindestbestand; begin bestellwert:=0; open artikelcursor; fetch artikelcursor into artnr, bestmenge, liefnr, preis; while artikelcursor%found loop bestellwert:=bestellwert + bestmenge*preis; select name into name from lieferant where lieferant_nr=liefnr; /* Verwende die Sequenz */ insert into bestellung values( bestellung_seq.nextval , liefnr, name, current_date, current_date+14, artnr, bestmenge) fetch artikelcursor into artnr, bestmenge, liefnr, preis; end loop; close artikelcursor end; end; Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 35 Teil 1. Trigger PL/SQL: Übungen / Lösungen Aufgabe: Cursor / Stored Proc Bestellung CREATE OR REPLACE PROCEDURE "ARTIKELBESTELLUNG" (bestellwert out number ) as begin declare artnr artikel.artikelnr%type; bestmenge number; preis number (10,2); liefnr number; name char(20); bestnr int; cursor artikelcursor is select artikelnr , bestellmenge, hauptlieferant, ekpreis from artikel where aktiv=1 and bestand < mindestbestand; begin bestellwert:=0; open artikelcursor; fetch artikelcursor into artnr, bestmenge, liefnr, preis; while artikelcursor%found loop bestellwert:=bestellwert + bestmenge*preis; select name into name from lieferant where lieferant_nr=liefnr; /* erhöhe bisherige höchste bestellnummer um 1, wird neue nummer */ select nvl(max(bestellnr),0)+1 into bestnr from bestellung; insert into bestellung values(bestnr, liefnr, name, current_date, current_date+14, artnr, bestmenge) /* Bestellnr ist nicht dabei, da identity field. Dürfen nicht in value aufgeführt werden */ fetch artikelcursor into artnr, bestmenge, liefnr, preis; end loop; close artikelcursor end; end; Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 36 Teil 2. Datenbankentwurf : Übungen / Lösungen Aufgabe: Komponisten Setzen Sie folgenden Sachverhalt in ein E-R-Diagramm um (inklusive Angabe der Attribute, Schlüssel, Type, Komplexitäten): In einer zu modellierenden Umwelt gibt es Personen, die die Rollen von Komponisten, Sängern, Orchesterdirigenten und Promotern spielen. Personen haben eine eindeutige ID. Komponisten schreiben Musikstücke. Ein Stück ist immer genau einem Komponisten zuzuordnen. Das Musikstück wurde in einem bestimmten Jahr von seinem Komponisten geschrieben. Es hat einen eindeutigen Titel sowie eine mehrwertige Beschreibung. Musikstücke lassen sich u.a. in die Kategorien Klassik und Moderne aufteilen. Klassische Musik wird für ein bestimmtes Instrument geschrieben. Moderne unterteilt man in Vocal und Instrumental. Moderne Musikstücke wurden u.U. mehrfach von unterschiedlichen Sängern (Vocal) bzw. Dirigenten (Instrumental) auf Tonträger aufgenommen. Die Aufnahme hat eine eindeutige ID, ein Aufnahmedatum und einen Produktionsort. Sänger haben immer genau einen Promoter, der aber mehrere Sänger betreuen kann. Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 37 Teil 2. Datenbankentwurf : Übungen / Lösungen Person Aufgabe: Komponisten ID is a Komponist Promoter Dirigent (0,n) Sänger (0,n) (0,n) (1,1) schreibt ID Datum betreut macht macht Ort (0,n) (1,1) Ort (1,1) Aufnahmen Aufnahmen Datum ID (1,1) (1,1) in in (0,n) (0,n) Klassik vocal Instrument instrumental is a Moderne is a (1,1) Musikstück Titel Datenbanken 2 Beschreibung Jahr - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 38 Teil 2. Datenbankentwurf : Übungen / Lösungen Aufgabe: Stadtverwaltung Setzen Sie folgende Beschreibung in ein E-R-Diagramm incl. Komplexitäten um: In einer Stadtverwaltung arbeiten Personen (eindeutige Personalnummer, Name, Einstufung. Sie lassen sich in Arbeiter und Beamte klassifizieren. Arbeiter erhalten ein Gehalt in einer bestimmten Höhe, Beamte eine Vergütung. Sie haben zusätzlich eine Diensteinstufung, die mehrere Werte annehmen kann . Beamte können ernannt oder gewählt sein (politische Beamte). Jede Person ist genau einem Dezernat zugeordnet. Dezernate haben eine eindeutige Bezeichnung, jedem Dezernat sind mehrere Aufgabengebiete zugeordnet, In einem Dezernat können viele Personen arbeiten. Jedes Dezernat muss von genau einem politischen Beamten (Dezernent) geleitet werden, ein Dezernent kann nur ein Dezernat leiten. Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 39 Teil 2. Datenbankentwurf : Übungen / Lösungen Aufgabe: Stadtverwaltung Personalnr Person Name (1,1) Bezeichnung (1,n) Dezernat (1,1) arbeitet in Einstufung Aufgabengebiet is a Arbeiter Gehalt Beamte is-a ernannt Datenbanken 2 Vergütung leitet Einstufung gewählt (0,1) - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 40 Teil 2. Datenbankentwurf : Übungen / Lösungen Aufgabe: Bundestag Setzen Sie folgende Beschreibung in ein E-R-Diagramm incl. Komplexitäten um: Im Bundestag sitzen Abgeordnete aus Wahlkreisen. Sie haben einen Namen, Geburtsdatum und sind durch die Wahlkreisnummer eindeutig identifiziert. Ferner müssen sie genau einer Partei angehören. Parteien haben einen eindeutigen Schlüssel (Bezeichnung) und eine Mitgliederzahl. Wahlkreise haben eine eindeutige Nummer und eine Bezeichnung. Jeder Wahlkreis entsendet genau einen Abgeordneten. Wahlkreise liegen in Städten, zu einer Stadt können mehrere Wahlkreise gehören. Städte haben eine eindeutige Bezeichnung und eine Einwohnerzahl. Abgeordnete stimmen ( u.U. mehrfach) über Gesetzesvorlagen ab. Gesetzesvorlagen haben eine eindeutige Identnummer und einen Inhalt. Das Abstimmungsergebnis ist je Abgeordnetem mit dem Datum und dem Abstimmungsverhalten (ja, nein, Enthaltung) zu speichern. Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 41 Datenbankentwurf : Übungen / Lösungen Name Abgeord n 1 zu Nr n aus Abstimm ung Verhalten Partei (0,n) (1,1) 1 (1,1) (0,n) Mitglieder Bez Gebdat 1 (1,1) Wahlkreis Bez (1,1) Datum Liegt in Aufgabe: Bundestag m (1,n) (0,n) Stadt Gesetzesvorlage Bez Ident Einwohnerzahl Inhalt Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 42 Teil 2. Datenbankentwurf : Übungen / Lösungen Aufgabe: Verkaufsartikel Setzen Sie folgende Beschreibung in ein E-R-Diagramm incl. Komplexitäten um: Eine Firma verkauft Artikel. Sie sind durch eine eindeutige Artikelnummer gekennzeichnet. Ferner haben sie eine Bezeichnung und einen Preis. Einige Artikel sind rabattfähig. Diese haben als weitere Attribute einen „maximalen Rabatt“. Weiterhin gibt es Artikelrabatte. Sie haben Gültigkeitsbereiche „gilt_von“ und „gilt_bis“ , „gilt_von“ kennzeichnet einen Rabatt eindeutig, außerdem haben sie den Rabattwert als Attribut. Rabattfähige Artikel müssen mindestens einen, sie können viele Artikelrabatte haben. Jeder Artikelrabatt muss genau einem Artikel zugeordnet sein. Die Firma hat Kunden (Kundennummer eindeutig und der Name). Kunden können aktiv oder inaktiv sein. Inaktive Kunden haben das Datum als Attribut, an dem sie inaktiv wurden. Einge aktive Kunden erhalten für ausgewählte, rabattfähige Artikel einen Kunden_Sonderrabatt. Ein Artikel kann Sonderrabatte für verschiedene Kunden haben, ebenso kann ein Kunde Sonderrabatte für mehrere Artikel erhalten Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 43 Teil 2. Datenbankentwurf : Übungen / Lösungen Nummer Bez Aufgabe: Verkaufsartikel Kunden KuNr Artikel Preis Wert Name is a is a M Maxrabatt rabattfähig 1 n Sonderrab (0,n) Preis (1,n) aktiv (0,n) seit n hat (1,1) Gilt von Datenbanken 2 Inaktiv Wert Artikelrabatt Gilt bis - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 44 Teil 2. Datenbankentwurf : Übungen / Lösungen Aufgabe: Fahrzeugpark Setzen Sie folgende Beschreibung in ein E-R-Diagramm incl. Komplexitäten um: In einem Unternehmen gibt es Fahrzeuge. Sie sind durch ihr Kennzeichen eindeutig identifizierbar. Ferner haben sie eine Leistungsstärke, einen Fahrzeugtyp und eine Erstzulassung. Weiterhin speichert man die für das Fahrtzeug erforderliche Führerscheinklasse. In dem Unternehmen sind Personen angestellt. Sie sind durch eine Personalnummer eindeutig gekennzeichnet. Sie verfügen über eine Adresse (Strasse, PLZ, Ort) und ein Eintrittsdatum. Einige Angestellte sind Fahrer, sie haben eine oder mehrere Führerscheine verschiedener Klassen. Je Fahrer werden die von ihm gefahrenen Stunden gespeichert. Jedem Fahrzeug ist genau ein Fahrer zugeordnet, einem Fahrer können mehrere, es muss kein Fahrzeug zugeordnet sein. Andere Angestellte sind Monteure. Sie haben eine bestimmte Qualifikation. Monteure können keine Fahrer sein. Fahrzeuge werden von Monteuren einer Inspektion (Wartung) unterworfen. Ein Fahrzeug kann beliebig oft gewartet werden. Diese Inspektion findet an einem bestimmten Tag statt und hat ein Inspektionsergebnis. Wenn ein Fahrer ein Fahrzeug benutzt, werden die Daten dieser Fahrt (Datum, Zielort, sowie Ort und Uhrzeit von evtl. mehreren Zwischenstopps) gespeichert. Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 45 Teil 2. Datenbankentwurf : Übungen / Lösungen Kennzeichen Leistungsstärke Erstzulassung Personalnummer Strasse Adresse Plz Aufgabe: Fahrzeugpark Fahrzeug Fahrzeugtyp (0,n) (0,n) (1,1) Führerscheinklasse Person Datum Ergebnis Ort Eintrittsdatum is a Inspektion fährt (0,n) (1,1) Monteur Ort Tour/Fahrt Zwischenstop betreut Qualifikation (1,1) Uhrzeit Abfahrtszeit Zielort (0,n) macht (0,n) Fahrer Stunden Datenbanken 2 Führerschein - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 46 Teil 2. Datenbankentwurf : Übungen / Lösungen Kennzeichen Leistungsstärke Erstzulassung Personalnummer Strasse Adresse Plz Aufgabe: Fahrzeugpark Fahrzeug Fahrzeugtyp (0,n) Person (0,n) Datum (1,1) Ergebnis Führerscheinklasse Ort Eintrittsdatum is a Inspektion Monteur Ort Tour/Fahrt Zwischenstop fährt Qualifikation (0,n) Uhrzeit Datum (0,n) Fahrer Zielort Stunden Datenbanken 2 Führerschein - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 47 Teil 2. Datenbankentwurf : Übungen / Lösungen Aufgabe: Transformation in Relationen Überführen Sie die ER-Diagramme aus den bisherigen Aufgaben nach den vorgegebenen Regeln in relationale Strukturen. Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 48 Teil 2. Datenbankentwurf : Übungen / Lösungen Teil I: Datenbankentwurf Transformation: Komponisten Person(PID) Komponist(PersonID) Dirigent(PersonID) Saenger(PersonID, PromoterID) Promoter(PersonID) Musikstück(Titel, Jahr, Komponist_ID) Musikstück_Beschreibung (Titel, Beschreibung) Klassik(Titel, Instrument) Moderne(Titel) Vocal(ModerneID) Instrumental(ModerneID) InstrumentalAufnahmen(IID, Ort, Datum, DirigentID, InstrumentalID) VocalAufnahmen(VID, Ort, Datum, SaengerID, VocalID) Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 49 Teil 2. Datenbankentwurf : Übungen / Lösungen Transformation: Stadtverwaltung Person(ID, Name, Einstufung, ArbeitetinDezBezeichnung) Arbeiter(PNR,Gehalt) Beamter(PNR,Vergütung) Beamter_Einstufung(BeamterPNR ,Diensteinstufung) Gewählt(BeamterPNR) Ernannt(BeamterNR) Dezernat(Bezeichnung,LeiterGewähltBeamterPNR) DezAufgabengebiet(DezBezeichnung ,Aufgabengebiet) Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 50 Teil 2. Datenbankentwurf : Übungen / Lösungen Transformation: Bundestag Abgeordneter (Name, Gebdat, Wahlkreis_Nr, Partei_Bezeichnung) Wahlkreis (Wahlkreis_Nr, Wahlkreis_Bezeichnung, Stadt_Bezeichnung) Partei(Bezeichnung,Mitglieder) Stadt(Bezeichnung,Einwohnerzahl) Gesetzesvorlage(Identnummer,Inhalt) Abstimmung(Wahlkreis_Nr_Abgeordneter, GesetzesvorlageIdentNr, Verhalten, Datum) Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 51 Teil 2. Datenbankentwurf : Übungen / Lösungen Transformation: Verkaufsartikel Artikel (Nr, Bez, Preis) Rabattfähig (Artikel_NR, maxrabatt) Kunden (KUNR, Name) Aktiv (KUNR) Inaktiv (KUNR, seit ) Sonderrabatt (RabattfaehigArtikelNR, AktivKUNR, Wert) Artikelrabatt (RabattfaehigArtikelNR ,Gilt_von ,Gilt_bis,Wert) Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 52 Teil 2. Datenbankentwurf : Übungen / Lösungen Transformation: Fahrzeugpark Person (PNR,Strasse,PLZ,Ort,Eintritt) Fahrer (PersonPNR,Stunden) Fahrer_FSKL (FahrerPNR,FSKL) Monteur (PersonPNR ,Qualifikation ) Fahrzeug (KZ, PS, FSKL, Typ, Erstzu, FährtFahrerPNR) Tour (TourNr, Fahrer_PNR , FahrzeugKZ, Datum, Zielort) Stops (TourNr ,Zeit, Ort) Inspiziert (MonteurPNR, FahrzeugKZ , Tag , Ergebnis) Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 53 Teil 2. Datenbankentwurf : Übungen / Lösungen Aufgabe: Transformation Semantikloses ER-Diagramm 1 Überführen Sie folgendes Diagramm in eine relationale Struktur. Berücksichtigen Sie die Tatsache, dass nur sehr wenige Elemente von E1und E3 zueinander in der Beziehung R1 stehen Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 54 Teil 2. Datenbankentwurf : Übungen / Lösungen Aufgabe: Transformation Semantikloses ER-Diagramm 1 A1 A2 A3 R3 E1 m n A9 1 A5 E2 1 R1 A7 A4 n R2 n E3 A8 Datenbanken 2 A6 RE1(A1,A2,A3) RR3(A1,A2,A4) RR3a(A1,A2,A4,A9) RR1(A1,A2,A7) RE2(A4,A5) RE3R2(A7,A8,A4) RR2(A7,A6) - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 55 Teil 2. Datenbankentwurf : Übungen / Lösungen Aufgabe: Transformation Semantikloses ER-Diagramm 2 Überführen Sie dieses „Semantik“-lose E-R-Diagramm in eine relationale Struktur unter Kennzeichnung von Schlüsseln und Fremdschlüsseln. Gehen Sie davon aus, dass die Relationship R2 für beide Rollen obligatorisch ist. R3 sei für die Rolle E3 obligatorisch, für E2 optional. Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 56 Teil 2. Datenbankentwurf : Übungen / Lösungen Aufgabe: Transformation Semantikloses ER-Diagramm 2 A1 A2 A3 A5 B1 m E1 E2 1 n R_R3B4 (A1,B4) C3 C2 Datenbanken 2 R3 R_E1E3R2R3 (A1,A2,A3,C1,C2,B1,B2) C1: Unique E3 C1 1 B4 1 B3 n R1 R2 B2 R_E3C3 (A1,C3) R_E2 (B1,B2,B3) R_R1 (A1,B1,B2,A5) - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 57 Teil 2. Datenbankentwurf : Übungen / Lösungen Aufgabe: Transformation Semantikloses ER-Diagramm 3 Überführen Sie folgendes ER-Diagramm (ohne Semantik) gemäß den in der Vorlesung genannten Regeln (ohne Effizienzüberlegungen) in relationale Strukturen Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 58 Teil 2. Datenbankentwurf : Übungen / Lösungen Aufgabe: Transformation Semantikloses ER-Diagramm 3 A1 A2 E1 A3 m A4 R1 R2 n E3 Datenbanken 2 R_E1 (A1,A2,A3) R_E3 (A10,A11,A1,A2,A4) R_E2 (A4) A11 A10 E2 1 1 n n R3 A6 R_E2_A6 (A4,A6) R_R3 (A1,A2,A4) - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 59 Teil 2. Datenbankentwurf : Übungen / Lösungen Beispiel Generalisierung mit Trigger Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 60 Teil 2. Datenbankentwurf : Übungen / Lösungen Aufgabe Normalisierung FH Folgende relationale Strukturen seien entwickelt: (Schlüsselattribute jeweils unterstrichen, Fremdschlüssel kursiv): Student: MatrikelNr Name Strasse PLZ Ort Bundesland Nationalität Fachbereich Dozent: Name Fachbereich Vorlesung: VorlesungsNr Vorlesbezeichnung Fachbereichszuordnung DozentName Klausur: Matrikel_Nr Name Fachbereich Vorlesung Dozentname Datum Ergebnis Folgende Regeln gelten im Anwendungsbereich: 1) Eine Vorlesung wird von genau einem Dozenten gehalten 2) Dieser Dozent lässt auch die Klausur schreiben 3) Der Fachbereich des Dozenten stimmt mit der Fachbereichszuordnung einer Vorlesung überein 4) Klausuren werden nur semesterweise gespeichert, pro Semester pro Vorlesung eine Klausur Welche Normalformen werden verletzt (Begründung) ? Überführen Sie die Relationen in die dritte Normalform. Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 61 Teil 2. Datenbankentwurf : Übungen / Lösungen Student: MatrikelNr Name Strasse PLZ Ort Bundesland Nationalität Fachbereich 3.NF verletzt: { PLZ } -> {Ort, Bundesland} Student: MatrikelNr Name Strasse PLZ PLZ_Bundesland: PLZ Ort Bundesland Nationalität Fachbereich Dozent: Name Fachbereich o.k. Vorlesung: VorlesungsNr Vorlesbezeichnung Fachbereichszuordnung DozentName 3.NF verletzt: {Dozentname} -> {Fachbereichszuordnung} Vorlesung: VorlesungsNr Datenbanken 2 Vorlesbezeichnung DozentName - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 62 Teil 2. Datenbankentwurf : Übungen / Lösungen Klausur: Matrikel_Nr Name Fachbereich Vorlesung Dozentname Datum Ergebnis 2.NF : {Matrikel_nr} -> {Name, Fachbereich} 2.NF : {Dozentname} -> {Fachbereich} 2.NF : {Vorlesung} -> {Dozentname, Datum} (pro Vorlesung nur 1 Klausur=1 Datum) (der Dozent, der die Vorlesung hält, prüft auch) Vorlesung: VorlesungsNr Vorlesbezeichnung DozentName Prüfungsdatum Klausur: Matrikel_Nr Vorlesung Ergebnis Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 63 Teil 2. Datenbankentwurf : Übungen / Lösungen Aufgabe Normalisierung Musik Folgende relationale Strukturen seien entwickelt: (Schlüsselattribute jeweils unterstrichen, Fremdschlüssel kursiv): Dirigent (PersonID Name Alter Nationalität Titel ) Opernhaus (Name Stadt Orchester_Bezeichnung ) Orchester ( OrchesterBezeichnung Mitgliederzahl Gründungsjahr Dirigent_Titel DirigentID ) Oper ( Titel , Komponist Jahr_Erstaufführung ) Aufführung ( Opernhaus Orchester OperTitel Dirigent Spielzeit Anzahlaufführungen) Regeln: 1) Es werden immer nur die Aufführungen einer Spielzeit pro Opernhaus gespeichert. 2) Innerhalb einer Spielzeit wechselt der Dirigent eines Orchesters nicht. 3) Innerhalb einer Spielzeit wechselt das Orchester eines Opernhauses nicht Welche Normalformen werden verletzt (Begründung) ? Überführen Sie die Relationen in die dritte Normalform. Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 64 Teil 2. Datenbankentwurf : Übungen / Lösungen Aufgabe Normalisierung Musik Dirigent (PersonID Name Alter Nationalität Titel ) Ist in 3. NF Orchester ( OrchesterBezeichnung Mitgliederzahl Gründungsjahr Dirigent_Titel DirigentID) 3.NF verletzt: {DirigentID } -> {Dirigent_Titel } Orchester (OrchesterBezeichnung Mitgliederzahl Gründungsjahr DirigentID ) Opernhaus (Name Stadt Orchester_Bezeichnung ) Ist in 3. NF Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 65 Teil 2. Datenbankentwurf : Übungen / Lösungen Aufgabe Normalisierung Musik Oper ( Titel , Komponist Ist in 3. NF Jahr_Erstaufführung ) Aufführung ( Opernhaus Orchester OperTitel Dirigent Spielzeit Anzahlaufführungen) 2.NF verletzt: {Orchester } -> {Dirigent} (da kein Wechsel des Dirigenten in Spielzeit) 2.NF verletzt: {Opernhaus } -> {Orchester} (da kein Wechsel des Dirigenten in Spielzeit) Aufführung ( Opernhaus OperTitel Datenbanken 2 Spielzeit Anzahlaufführungen) - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 66 Teil 3. Physikalische Organisation : Übungen / Lösungen Hash-Organisation (1) Tragen Sie folgende Datensätze mit den entsprechenden Schlüsselwerten in eine Hash-Organisation ein, die folgende Eigenschaften hat: 7 Container, ein Container beinhaltet 2 Datensätze. Überlaufbereich ebenfalls 2 Datensätze pro Container 5 – 15 – 25 – 35 – 7 – 12 – 19 – 22 – 84 – 10 – 21 – 22 – 23 – 30 Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 67 Teil 3. Physikalische Organisation : Übungen / Lösungen B0 35 7 U2 U1 19 B1 15 22 U3 U2 84 B2 23 30 U3 22 B3 10 U4 B4 25 U5 B5 5 12 U1 21 U6 B6 U7 Datenbehälter Überlaufbehälter Hash-Organisation (1) Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 68 Teil 3. Physikalische Organisation : Übungen / Lösungen Hash-Organisation (2) Tragen Sie die Schlüsselwerte 1, 2 18, 20, 4, 5, 13, 24, 31, 6, 19, 46, 12, 17 in eine Hash-Organisation mit Überlaufbereich ein, die über n = 11 Behälter verfügt (ein Datensatz je Behälter) Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 69 Teil 3. Physikalische Organisation : Übungen / Lösungen B0 U0 13 U1 U3 B1 1 U4 U1 24 B2 2 U0 U2 31 U3 46 B3 B4 4 U4 12 B5 5 U5 17 B6 6 B7 18 U7 B8 19 U8 B9 20 U5 U2 U6 U9 B10 U10 Datenbehälter Überlaufbehälter Hash-Organisation (2) Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 70 Teil 3. Physikalische Organisation : Übungen / Lösungen Aufbau ISAM-Datei Eine ISAM-Datei wird i.A. auf Basis einer vorhandenen Datenmenge sortiert aufgebaut und der Index angelegt. Danach wird die Organisation unter Verwendung von Überlaufbehältern erweitert. Sei eine ISAM-Organisation gegeben, in einen Datenblock passen 3 Datensätze, in einen Indexblock 2 Indexeinträge. Zu jedem Datenblock gibt es einen Zeiger auf genau einen Überlaufblock. Diese sind ggfs. untereinander verzeigert. Überlaufbehälter nehmen 2 Datensätze auf. Verteilen Sie folgenden Datensätze (sortiert!) auf die Datenblöcke und legen Sie den Index an. Lassen Sie je Datenblock einen Datensatz als Reserve frei: 5 – 25 – 7 – 42 – 36 – 9 – 18 – 21 – 55 – 41 – 38 – 59 – 67 Wie sieht die Datendatei und die Indexdatei nach Eingabe dieser Daten aus ? Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 71 Teil 3. Physikalische Organisation : Übungen / Lösungen I1 I2 I3 I4 7 B1 5 7 18 B2 9 18 25 B3 21 25 38 B4 36 38 42 B5 41 42 59 B6 55 59 67 B7 67 B8 Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 72 Teil 3. Physikalische Organisation : Übungen / Lösungen Aufbau ISAM-Datei Fügen Sie nun folgende Werte ein und nehmen Sie die notwendigen Änderungen in Datendatei, Indexdatei und Überlaufbereich vor: 8 – 34 – 74 – 43 – 58 – 60 – 1 – 2 – 3 – 22 – 78 – 6 – 85 Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 73 Teil 3. Physikalische Organisation : Übungen / Lösungen I1 I2 I3 I4 7 B1 1 5 7 18 B2 8 9 18 25 B3 21 22 25 38 B4 34 36 38 42 B5 41 42 59 B6 43 55 59 74 B7 60 67 74 85 B8 78 85 Datenbanken 2 2 3 6 58 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 74 Teil 3. Physikalische Organisation : Übungen / Lösungen Zugriffsbeschleunigung bei ISAM (1) Sei eine geblockte Dateistruktur gegeben. Blockgröße sei 8000 Bytes, Recordlänge 500 Bytes. Die Datei habe 800000 Records. Es sei ein sortierter, dichter Index angelegt, Schlüssellänge sei 15 Bytes, Verweislänge auf einen Record: 5 Bytes. In wie vielen Block-Zugriffen wird im Mittel der Datensatz zu einem Schlüssel gefunden, wenn die Suche im Index erfolgt. Lösung: Dichter Index: 1 Indexelement / Record -> 800000 Indexrecords. Index-Recordlänge : 20 , Blocklänge 8000 -> 8000 / 20 = 400 Indexrecords pro Block -> 800000 Recs / 400 = 2000 Indexblöcke -> im Mittel 1000 + 1 = 1001 Index-Block-Zugriffe (sequentiell 25 000 Zugriffe) Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 75 Teil 3. Physikalische Organisation : Übungen / Lösungen Zugriffsbeschleunigung bei ISAM (2) Sei eine geblockte Dateistruktur gegeben. Blockgröße sei 8000 Bytes, Recordlänge 500 Bytes. Die Datei habe 800000 Records. Es sei ein sortierter, dünner Index angelegt, Schlüssellänge sei 15 Bytes, Verweislänge auf einen Record: 5 Bytes. Lösung: Blockgröße 8.000 : Recordlänge 500 800.000 Records : 16 Records /Block Dünner Index: 50.000 Datenblöcke -> 16 Datenrecords / Block -> 50 000 Daten-Blöcke -> 50.000 Indexeinträge (1 Eintrag / Block) Indexlänge (15+5)=20 Bytes, Blockgröße 8.000 -> 400 Indexrecords / Block 50.000 Indexeinträge / 400 pro Block -> 125 Indexblöcke Die Suche erfolgt im Mittel in 63 Index-Block-Zugriffen (Index) + 1 Zugriff Datenblock Sequentiell 25 000 ! Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 76 Teil 3. Physikalische Organisation : Übungen / Lösungen Aufgabe B-Baum (1): Wie sieht ein B-Baum der Ordnung 1 nach der Eingabe folgender Schlüsselwerte aus: 30– 29 – 27 – 18 – 15 – 20 – 9 – 10 –11 –12 –13 Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 77 Teil 3. Physikalische Organisation : Übungen / Lösungen einfügen 30, 29, 27, spalten Aufgabe B-Baum (1): 27 29 30 einfügen 18, 15, spalten 29 15 18 27 30 einfügen 20, 9, 10, 2x spalten 9 Datenbanken 2 10 15 18 29 20 27 30 einfügen 11, 12, spalten - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 78 Teil 3. Physikalische Organisation : Übungen / Lösungen einfügen 11, 12, spalten Aufgabe B-Baum (1): 18 10 9 29 11 12 15 20 27 30 einfügen 13 18 10 9 Datenbanken 2 11 12 29 13 15 20 27 30 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 79 Teil 3. Physikalische Organisation : Übungen / Lösungen Aufgabe B-Baum (2): Wie sieht ein B-Baum der Ordnung 1 nach der Eingabe folgender Schlüsselwerte aus: 1 – 2 – 3 – 4 – 5 – 20 – 19 – 18 – 17 – 16 – 6 – 12 – 41 - 35 Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 80 Teil 3. Physikalische Organisation : Übungen / Lösungen einfügen 1, 2 Aufgabe B-Baum (2): 1 2 einfügen 3 1 2 3 einfügen 4, 5 2 1 Datenbanken 2 4 3 5 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 81 Teil 3. Physikalische Organisation : Übungen / Lösungen einfügen 20, 19 Aufgabe B-Baum (2): 4 2 1 19 3 5 20 einfügen 18, 17 4 2 1 Datenbanken 2 17 3 5 19 18 20 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 82 Teil 3. Physikalische Organisation : Übungen / Lösungen einfügen 16, 6 Aufgabe B-Baum (2): 4 17 2 1 6 3 19 5 16 18 20 einfügen 12, 41, 35 4 17 2 1 Datenbanken 2 3 6 5 19 12 16 18 35 20 41 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 83 Teil 3. Physikalische Organisation : Übungen / Lösungen Aufgabe B-Baum (3): Erzeugen Sie den B-Baum erster Ordnung, der sich durch die Eingabe folgender Daten ergibt 10 – 15 – 12 – 5 – 11 – 3 – 1 – 25 – 2 – 13 – 14 – 17 – 19 Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 84 Teil 3. Physikalische Organisation : Übungen / Lösungen einfügen 10, 15, 12 Aufgabe B-Baum (3): 10 12 15 einfügen 5, 11 12 5 10 11 15 einfügen 3, 1 10 1 3 5 12 11 15 einfügen 25, 2, 13 Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 85 Teil 3. Physikalische Organisation : Übungen / Lösungen einfügen 25, 2, 13 Aufgabe B-Baum (3): 10 3 1 2 12 5 11 13 15 25 einfügen 14, 17, 19 10 3 1 Datenbanken 2 2 12 15 19 5 11 13 14 17 19 25 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 86 Teil 3. Physikalische Organisation : Übungen / Lösungen Aufgabe B-Baum (3): 10 12 3 1 Datenbanken 2 2 15 5 19 11 13 14 17 25 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 87 Teil 3. Physikalische Organisation : Übungen / Lösungen B*-Baum (1) Wie sieht ein B*-Baum der Ordnung 1 mit 2 Datensätzen pro Blatt nach der Eingabe folgender Schlüsselwerte aus: 30– 29 – 27 – 18 – 15 – 20 – 9 – 10 –11 –12 –13 Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 88 Teil 3. Physikalische Organisation : Übungen / Lösungen einfügen 30, 29, 27 B*-Baum (1) 29 27 29 30 einfügen 18 27 29 18 Datenbanken 2 27 29 30 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 89 Teil 3. Physikalische Organisation : Übungen / Lösungen einfügen 15 B*-Baum (1) 27 18 15 18 29 27 29 30 einfügen 20 27 18 15 18 Datenbanken 2 20 27 29 29 30 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 90 Teil 3. Physikalische Organisation : Übungen / Lösungen einfügen 9 B*-Baum (1) 27 15 9 15 18 18 20 27 29 29 30 einfügen 10 15 27 10 9 10 Datenbanken 2 18 15 18 29 20 27 29 30 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 91 Teil 3. Physikalische Organisation : Übungen / Lösungen einfügen 11 B*-Baum (1) 15 27 10 9 10 11 18 15 18 29 20 27 29 30 einfügen 12 15 27 10 12 9 10 11 12 Datenbanken 2 15 18 18 29 20 27 29 30 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 92 Teil 3. Physikalische Organisation : Übungen / Lösungen einfügen 13 B*-Baum (1) 15 27 10 12 9 10 11 12 Datenbanken 2 13 15 18 18 29 20 27 29 30 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 93 Teil 3. Physikalische Organisation : Übungen / Lösungen B*-Baum (2) Wie sieht ein B*-Baum der Ordnung 1 mit 2 Datensätzen pro Blatt nach der Eingabe folgender Schlüsselwerte aus: 1 – 2 – 3 – 4 – 5 – 20 – 19 –18 – 17 – 16 - 6 – 12 - 41 - 35 Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 94 Teil 3. Physikalische Organisation : Übungen / Lösungen einfügen 1,2 B*-Baum (2) 1 2 einfügen 3 2 1 2 3 einfügen 4 2 1 Datenbanken 2 2 3 4 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 95 Teil 3. Physikalische Organisation : Übungen / Lösungen einfügen 5 B*-Baum (2) 1 2 2 4 3 4 5 einfügen 20 1 2 2 4 3 4 5 20 einfügen 19 4 2 1 Datenbanken 2 2 3 4 19 5 19 20 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 96 Teil 3. Physikalische Organisation : Übungen / Lösungen einfügen 18 B*-Baum (2) 4 2 1 2 3 4 18 19 5 18 19 20 einfügen 17 4 18 17 2 1 Datenbanken 2 2 3 4 5 17 19 18 19 20 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 97 Teil 3. Physikalische Organisation : Übungen / Lösungen einfügen 16 B*-Baum (2) 4 18 16 2 1 2 3 4 5 16 17 17 19 18 19 20 einfügen 6 16 4 18 6 2 1 2 Datenbanken 2 3 4 5 6 17 16 17 19 18 19 20 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 98 Teil 3. Physikalische Organisation : Übungen / Lösungen B*-Baum (2) einfügen 12 16 4 18 6 2 1 2 3 Datenbanken 2 4 5 6 17 12 16 17 19 18 19 20 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 99 Teil 3. Physikalische Organisation : Übungen / Lösungen einfügen 41 B*-Baum (2) 16 4 18 2 1 2 3 6 4 5 17 6 12 16 17 19 18 19 20 41 einfügen 35 16 4 18 2 1 2 3 Datenbanken 2 4 6 5 6 17 12 16 17 19 18 19 35 20 35 41 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 100 Teil 3. Physikalische Organisation : Übungen / Lösungen B*-Baum (3) Wie sieht ein B*-Baum der Ordnung 1 mit 2 Datensätzen pro Blatt nach der Eingabe folgender Schlüsselwerte aus: 10 - 15 - 12 - 5 - 11 - 3 – 1 - 25 – 2 – 13 – 14 – 17 - 19 Datenbanken 2 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 101 Teil 3. Physikalische Organisation : Übungen / Lösungen einfügen 10,15 B*-Baum (3) 10 15 einfügen 12 12 10 12 15 einfügen 5 10 12 5 Datenbanken 2 10 12 15 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 102 Teil 3. Physikalische Organisation : Übungen / Lösungen einfügen 11 B*-Baum (3) 10 12 5 10 11 12 15 einfügen 3 10 5 3 Datenbanken 2 5 12 10 11 12 15 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 103 Teil 3. Physikalische Organisation : Übungen / Lösungen einfügen 1 B*-Baum (3) 10 3 1 3 12 5 10 5 11 12 15 einfügen 25 10 3 1 3 Datenbanken 2 5 12 5 10 11 12 15 25 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 104 Teil 3. Physikalische Organisation : Übungen / Lösungen einfügen 2 B*-Baum (3) 3 2 1 2 10 5 3 12 5 10 11 12 15 25 einfügen 13 3 2 1 Datenbanken 2 2 10 12 15 5 3 5 10 11 12 13 15 25 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 105 Teil 3. Physikalische Organisation : Übungen / Lösungen einfügen 14 B*-Baum (3) 10 3 2 1 2 14 5 3 Datenbanken 2 5 12 10 11 12 15 13 14 15 25 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 106 Teil 3. Physikalische Organisation : Übungen / Lösungen einfügen 17 B*-Baum (3) 10 3 2 1 2 14 5 3 Datenbanken 2 5 12 10 11 12 15 13 14 15 17 25 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 107 Teil 3. Physikalische Organisation : Übungen / Lösungen einfügen 19 B*-Baum (3) 10 3 2 1 2 14 5 3 Datenbanken 2 5 15 19 12 10 11 12 13 14 15 17 19 25 - SS 2010 - © Prof. Dr. Klaus-Dieter Krägeloh - Folie 108