Universität Mannheim Lehrstuhl für Praktische Informatik III Sven Helmer Datenbanksysteme I, SS 2005 Lösungen zum 6. Übungsblatt 1. (a) select Name from Fluss where Meer = ’Atlantischer_Ozean’; (b) with rekfluss(name) as ((select f.name from fluss f where f.meer = ’Atlantischer_Ozean’) union all (select q.name from rekfluss r, fluss q where q.fluss = r.name)) select * from rekfluss; 2. Es gibt mehrere Möglichkeiten diesen Lösch- und Änderungsschutz in SQL zu realisieren: • mit Triggern • per referentieller Integrität • per Views/Sichten (a) Trigger: create trigger nodelete before delete on Sicherheitsrat for each row when (old.MitgliedsNr < 6) begin Fehlermeldung ausgeben !! Delete-Befehl abbrechen end und 1 create trigger noupdate before update on Sicherheitsrat for each row when (old.MitgliedsNr < 6) begin Fehlermeldung ausgeben !! Update-Befehl abbrechen end (b) referentielle Integrität: create table sicherheitsrat ( MitgliedsNr integer not null, Name varchar(100) not null, unique (MitgliedsNr), primary key (MitgliedsNr, Name) ); create table lock ( Nummer integer not null, Name varchar(100) not null, foreign key (Nummer, Name) references Sicherheitsrat(MitgliedsNr, Name) ); In die Tabelle lock werden die ersten fünf Tupel von Sicherheitsrat eingetragen. Die Tabelle lock wird (für normale Benutzer) schreibgeschützt. Fremdschlüssel können nur auf Schlüsselattributen deklariert werden. Um alle Attribute vor Änderungen zu schützen, werden sämtliche Attribute in den Schlüssel aufgenommen. Der eigentliche Schlüssel der Relation wird mit UNIQUE gekennzeichnet. (c) Sichten: create table temporary ( MitgliedsNr integer not null primary key, Name varchar(100) ); create table permanent ( MitgliedsNr integer not null primary key, Name varchar(100) ); 2 create view Sicherheitsrat(MitgliedsNr, Name) as ( (select MitgliedsNr, Name from temporary) union (select MitgliedsNr, Name from permanent) ); In die Relation permanent werden die ständigen Mitglieder und in die Relation temporary werden die temporären Mitglieder des Sicherheitsrats eingetragen. Die Relation permanent wird schreibgeschützt. Leseoperation werden grundsätzlich auf der Sicht ausgeführt, Änderungsoperationen können nur auf der Relation temporary ausgeführt werden. Nachteil: Anfragen und Änderungen werden nicht auf der gleichen Relation (bzw. Sicht) ausgeführt. 3. (a) R verstößt gegen FD (b) R verstößt nicht gegen FD (c) R verstößt gegen FD (d) R verstößt gegen FD (e) R verstößt nicht gegen FD (f) R verstößt gegen FD 4. (a) Nein, ist kein Superschlüssel. (b) Nein, ist kein Superschlüssel. (c) Ja, ist ein Superschlüssel. (d) Nein, ist kein Superschlüssel. (e) Nein, ist kein Superschlüssel. 3