Klausur PI Datenbanken I vom 24.2.2008 Praktische Informatik (Krägeloh) Name: MatrikelNr.: Versehen Sie jedes Aufgabenblatt mit Ihrem Namen und geben es mit ab! Aufgabe 1: (30 Punkte) Seite 1 a) Beschreiben Sie die mittlere Ebene des 3-Ebenen-Konzeptes nach ANSIISparc ? Konzeptuelle Ebene, Repräsentiert die logische Gesamtsicht aller relevanter Daten und ihrer Beziehungen untereinander. Benötigt Abbildung der realen Welt auf ein Datenmodell mit Abstraktion von den konkreten Dateninhalten b) Wann ist ein Trigger rekursiv ? Wenn er im Trigger-Rumpf ein Ereignis auslöst, auf das er selbst reagiert. c) Welche Vergleichsformen/Operatoren sind erlaubt, wenn eine Sub-Query in einer Where-Klausel ein mengenwertiges Ergebnis zurückgeben kann ? in , <VGLOP> any, <vglop> all, exists d) Welche Standard-Privilegien kannte Oracle bis zur Version 7.0 ? DBA, Resource, Connect e) Was bedeutet es, wenn man einem Nutzer durch einen grant-Befehl ein Recht erteilt und den Befehl mit der Option „with grant option“ versieht Er darf dieses Recht an anderer Nutzer weitergeben. f) Wann müssen Informationen zu einem Objekt der Umwelt in Relationalen Modell zwangsweise auf mehrere Relationen verteilt werden ? Wenn einem Objekt mehrwertige Attribute zugeordnet werden können. g) Was beinhalten die Redo-Informationen im Logbuch ? Die Redo-Information gibt an, wie abgeschlossene, jedoch verlorene Änderungen nachvollzogen werden können Klausur PI Datenbanken I vom 15.2.2007 Name: Praktische Informatik (Krägeloh) MatrikelNr.: Versehen Sie jedes Aufgabenblatt mit Ihrem Namen und geben es mit ab! Seite 2 h) Welche Aufgabe hat der Data-Manager in einem DBMS ? Der Data-Manager bildet die Schnittstelle zu den Geräte- und Sekundärspeichermanager und führt die physischen Zugriffe aus i) Kennzeichnen Sie die Eigenschaften dynamischer und statischer Integritätsbedingungen Statische Bedingungen müssen zu jedem Zeitpunkt bei jeder Datenänderung eingehalten werden. Dynamische Integritätsbedingungen müssen am Ende von Zustandsänderungen wieder eingehalten werden. j) Wann darf man constraints nicht als Attribut-Constraints schreiben ? Generell: wenn sie sich auf mehr als ein Attribut beziehen. Zusätzlich bei Oracle: alle check-constraints Beantworten Sie die nachfolgenden Fragen mittels SQL-Anweisungen auf der Basis der anhängenden Datenbank . Aufgabe 2: (14 Punkte) Ermitteln Sie je Artikel die Artikelnummer, die Bezeichnung und die Anzahl seiner Vorkommnisse in Auftragspositionen des Jahres 2007 (Basis auftrag_datum). Wenn ein Artikel nicht vorkommt, geben Sie stattdessen die Zeichenfolge „Leermeldung“ aus. Nennen Sie diese Spalte „Anzahl Verkäufe“ Select a.artikel_nr, a.bezeichnung, case when count(*)=0 then ‚Leermeldung’ else cast(count(*) as char(12)) end ‚Anzahl Verkäufe’ from artikel a join (auftraege b join auftragspositionen c on b.auftrag_nr=c.auftrag_nr) on a.artikel_nr=c.artikel_nr where extract (year from b.auftrag_datum) = 2007 group by 1,2 Aufgabe 3: (10 Punkte) Geben Sie den (die) Kunden mit ihren Adressdaten aus, die im Jahr 2007 die Rechnung mit dem höchsten Rechnungsbetrag erhalten haben. Select kunden.kunde_nr, name, strasse, plz_strasse, land, ort From kunden join rechnungen on kunden.kunde_nr = rechnungen.kunde_nr Where extract (year from rechnungdatum)=2007 and rechnung_betrag = (select max(rechnung_betrag) from rechnungen where extract (year from rechnungdatum) = 2007) Klausur: Relationale Datenbanksysteme/SQL 15.02.2007 Seite 2 Klausur PI Datenbanken I vom 15.2.2007 Name: Praktische Informatik (Krägeloh) MatrikelNr.: Versehen Sie jedes Aufgabenblatt mit Ihrem Namen und geben es mit ab! Seite 3 Aufgabe 4: (15 Punkte) Geben Sie die durchschnittliche Bestellmenge (Feld Menge in Tabelle Bestellung) je Warengruppe aller Artike der Warengruppen 1,2 und 7 zusammen mit der Warengruppe aus. Berücksichtigen Sie nur Bestellungen der Jahre 2005-2007. Warengruppen, deren Artikel nicht bestelt wurden, sollen nicht ausgegeben werden. Select a.warengruppe, avg(menge) from artikel a join bestellung l on a.artikel_nr=l.artikel_nr where a.warengruppe in (1,2,7) and extract(year from bestelldatum between 2005 and 2007) group by 1 having avg(menge) > 0 Aufgabe 5: (14 Punkte) Führen Sie je Artikel die Artikelnummer, die Bezeichnung sowie den Lieferanten (Nummer, Name) mit dem größten und dem kleinsten Preis (Tabelle Lieferprogramm) zusammen mit diesen Preisen auf. Verwenden Sie Views und keine Subselects (keine Punkte) !!! Create view minpreis (artikel_nr, lieferant_nr, name, minp) as select artikel-nr, lieferant_nr , name , preis from lieferprogramm l1 join lieferanten l on l.lieferantennummer= l1.lieferant_nr where preis = (select min(preis) from lieferprogramm l2 where l1.artikel_nr=l2.artikel_nr) Create view maxpreis (artikel_nr, lieferant_nr, name, maxp) as select artikel-nr, lieferant_nr , name, preis from lieferprogramm l1 l1 join lieferanten l on l.lieferantennummer= l1.lieferant_nr where preis = (select max(preis) from lieferprogramm l2 where l1.artikel_nr=l2.artikel_nr) Select a.artikel_nr, a.bezeichnung, i.lieferant_nr, i.name, i.minp, m.lieferant_nr, m.name, m.maxp from (artikel a join minpreis i on i.artikel_nr=a.artikel_nr) join maxpreis m on m.artikel_nr=a.artikel_nr Klausur: Relationale Datenbanksysteme/SQL 15.02.2007 Seite 3 Klausur PI Datenbanken I vom 15.2.2007 Name: Praktische Informatik (Krägeloh) MatrikelNr.: Versehen Sie jedes Aufgabenblatt mit Ihrem Namen und geben es mit ab! Seite 4 Aufgabe 6: (7 Punkte) Legen Sie zwei Rollen (rolle1, rolle2) für die Datenbank an. Ferner die Nutzer N1, N2 und N3 (ohne Passwörter). Rolle1 darf bei Kunden alles außer Löschen, Lieferanten alles außer Löschen und Ändern und bei Rechnungen nur Lesen. Rolle2 darf Rechnung lesen, einfügen, nicht löschen aber ändern. Ordnen Sie N1 und N2 der rolle1 zu N3 der rolle2. N2 darf aber keine Kunden ändern. Create role rolle1 Create role rolle2 Grant all on kunde, lieferant to rolle1 Revoke delete on kunde from rolle1 Revoke delete,update on lieferant from rolle1 Grant select on rechnungen to rolle1 Grant select, insert, update on rechnungen to rolle2 Grant rolle1 to n1,n2 Grant rolle2 to n3 Revoke update on kunden from n3 Klausur: Relationale Datenbanksysteme/SQL 15.02.2007 Seite 4 Klausur PI Datenbanken I vom 15.2.2007 Name: Praktische Informatik (Krägeloh) MatrikelNr.: Versehen Sie jedes Aufgabenblatt mit Ihrem Namen und geben es mit ab! Seite 5 Aufgabe 7: (10 Punkte) Seien die folgenden Daten einer Vereinsanwendung gegeben. Implementieren Sie die Tabellen (create table) und die genannten Integritäten (alter table add constraint ...) Mitglied Nummer Name Geburtsdatum Eintrittsdatum KrankenVSNR Monatsbeitrag number char(20) date date number number primärschlüssel nicht leer > 01.01.1940 > Geburtsdatum eindeutig nicht leer Beitragszahlung Mitgliedsnummer Relative Zahlnummer Zahldatum BLZ Kontonummer number number date number number Fremdschlüssel Mitglied Nicht leer Nicht leer >0 >0 Primärschlüssel: Mitgliedsnummer + Relative Zahlnummer Eindeutig: BLZ + Kontonummer Löschen, wenn Mitglied gelöscht wird. Create table mitglied (nummer number, name char(20) not null, geburtsdatum date, krankenvsnr number not null, monatsbeitrag number not null) alter table mitglied add constraint c1 primary key (nummer) alter table mitglied add constraint c2 check(geburtsdatum > ’01.01.1940’) alter table mitglied add constraint c3 check (eintrittsdatum > geburtsdatum) alter table mitglied add constraint c4 unique (krankenvsnr) create table beitragszahlung (mitgliedsnummer number, relative_zahlnummer number not null, zhaldatum date not null, blz number, kontonummer number) alter table beitragszahlung add constraint c5 primary key (mitgliedsnummer, relative_zahlnummer) alter table mitglied add constraint c6 foreign key (mitgliedsnummer) references mitglied(nummer) on delete cascade; Klausur: Relationale Datenbanksysteme/SQL 15.02.2007 Seite 5 Klausur PI Datenbanken I vom 15.2.2007 Name: Praktische Informatik (Krägeloh) MatrikelNr.: Versehen Sie jedes Aufgabenblatt mit Ihrem Namen und geben es mit ab! alter table mitglied add constraint c7 check(blz > 0) alter table mitglied add constraint c8 check (kontonummer > 0) alter table mitglied add constraint c9 unique (blz, kontonummer) Klausur: Relationale Datenbanksysteme/SQL 15.02.2007 Seite 6 Seite 6 Klausur PI Datenbanken I vom 15.2.2007 Name: Praktische Informatik (Krägeloh) MatrikelNr.: Versehen Sie jedes Aufgabenblatt mit Ihrem Namen und geben es mit ab! Datenbank (durch create-table definiert): create table lieferanten (lieferantennummer int, name varchar(30), strasse varchar(30), plz varchar(5), ort varchar(30)); create table auftraege (auftrag_nr int, auftrag_datum datetime, kunde_nr int, vertreter_nr int, rabatt float); create table artikel (artikel_nr varchar(27), bezeichnung varchar(40), warengruppe int, verkaufspreis numeric, einkaufspreis numeric, bestand_lager int, bestand_minimum int, jahresumsatz numeric, vorjahresumsatz numeric); create table auftragspositionen (auftrag_nr int, position_nr int, artikel_nr varchar(27), menge int, preis numeric, termin datetime, gelieferte_menge int, berechnete_menge int); create table artikellager (artikel_nr varchar(27), lager_nr int, bestand_lager int); create table rechnungen (rechnung_nr int, rechnung_datum datetime, kunde_nr int, auftrag_nr int, rechnung_betrag numeric, datum_faellig datetime, datum_mahnung datetime, zahlbetrag_gesamt numeric, zahldatum datetime, bezahlt smallint); create table kunden (kunde_nr int, name varchar(30), strasse varchar(30), plz_strasse varchar(5), land varchar(3), ort varchar(30), kundengruppe int, branche varchar(30), vertreter_nr int, datum_kreditauskunft datetime, kreditlimit numeric, saldo_offene_rechnungen numeric, jahresumsatz numeric, vorjahresumsatz numeric, gesperrt bit); Klausur: Relationale Datenbanksysteme/SQL Seite 7 create table lieferprogramm (Lieferant_nr int, artikel_nr varchar(27), preis numeric, lieferzeit int, /* in Arbeitstagen */ datum_letzte_lieferung date) create table bestellung ( lieferant_nr int, artikel_nr varchar(27), menge int, bestelldatum date) 15.02.2007 Seite 7