 
                                WS 2013/14
Datenbanksysteme
Do 17:00 – 18:30
R 1.007
Vorlesung #7
SQL (Teil 4)
„Fahrplan“
WS 2013/14
Datenbanksysteme
Do 17:00 – 18:30
R 1.007
 Wiederholung
 Relationale Division (doppelter NOT EXISTS, HAVING
(count) = ...)
 Rekursion / hierarchische Abfragen
 Views (Sichten) - gespeicherte Abfragen
 Gewährleistung der logischen Datenunabhängigkeit
 Modellierung von Generalisierung
 UPDATE-fähige Sichten
 Constraints
 NOT NULL, CHECK, UNIQUE, PRIMARY KEY
 Referentielle Integriät (FOREIGN KEY)
 Ausblick Vorlesung #8, SQL Teil 5
© Bojan Milijaš, 14.11.2013
Sichten (VIEWs)
WS 2013/14
Datenbanksysteme
Do 17:00 – 18:30
R 1.007
 „Aussenstehende“ – d.h. Datenbank-Benutzer wollen
wissen, welcher Professor welche Vorlesungen liest?
 Benutzer wissen nichts von Schlüsseln (künstliche
IDs), JOINs, verschiedenen Tabellen usw.
CREATE VIEW ProfVorlesung
AS
SELECT Name, Titel
FROM Professoren, Vorlesungen
WHERE PersNr = gelesenVon;
© Bojan Milijaš, 14.11.2013
WS 2013/14
Datenbanksysteme
Do 17:00 – 18:30
R 1.007
Sichten (2)
SELECT *
FROM ProfVorlesung;
NAME
TITEL
Kant
Grundzuege
...
...
(+) Wir zeigen den Benutzern genau das, was Sie
sehen wollen  Benutzerfreundlichkeit
(+) Wir können die Informationen verbergen, die
Benutzer nicht sehen wollen oder nicht sehen dürfen
 Datenschutz und Sicherheit
(+) Wir können darunterliegende Basis-Tabellen
verändern. Solange die Sichten angepasst werden,
merken die Benutzer nichts  logische
Datenunabhängigkeit
© Bojan Milijaš, 14.11.2013
WS 2013/14
Datenbanksysteme
Do 17:00 – 18:30
R 1.007
Sichten (3) - logische
Datenunabhängigkeit
Benutzer 1
Benutzer 2
Sicht 1
Sicht 2
Sicht 3
Relation 1
Relation 2
Relation 3
Logische
Datenunabhängigkeit
Physische
Datenunabhängigkeit
© Bojan Milijaš, 14.11.2013
Sichten (4) – Beispiel
logische Datenunabhängigkeit
Studenten
WS 2013/14
Datenbanksysteme
Do 17:00 – 18:30
R 1.007
Internet-Besucher
CREATE VIEW ProfVorlesung
CREATE VIEW ProfVorlesung
AS
AS SELECT Name, Titel
ProfVerlesung
FROM Dozenten
SELECT Name, Titel
NATURAL JOIN lesen
FROM Professoren, Vorlesungen
NATURAL JOIN Kurse;
WHERE PersNr = gelesenVon;
Professoren Vorlesungen
lesen
Kurse
Dozenten
© Bojan Milijaš, 14.11.2013
Sichten (5) –
UPDATE-Fähigkeit
WS 2013/14
Datenbanksysteme
Do 17:00 – 18:30
R 1.007
 Sichten sind immer veränderbar im Bezug auf DDLOperation, hier ist aber DML gemeint!
 Sichten sind i.a. nicht UPDATE fähig, da das DBMS
bei einer UPDATE, DELETE oder INSERT Operation
auf einer Sicht nicht weiß, welche Basis-Tabelle wie
zu verändern ist:
 wenn Sichten Duplikatelimierung und Aggregatfunktionen
(DISTINCT, GROUP BY usw.) beinhalten
 wenn der Schlüssel der zugrundeliegenden Tabelle(n) nicht
enthalten ist
 Wenn durch das INSERT, UPDATE oder DELETE
Statement mehr als eine Tabelle referenziert wird
© Bojan Milijaš, 14.11.2013
Sichten (6) –
UPDATE-Fähigkeit
WS 2013/14
Datenbanksysteme
Do 17:00 – 18:30
R 1.007
Beispiel einer nicht UPDATABLE View:
create view WieHartAlsPrüfer (PersNr, Durchschnittsnote) as
select PersNr, avg(Note)
from prüfen
group by PersNr;
alle Sichten
theoretisch änderbare Sichten
in SQL änderbare Sichten
© Bojan Milijaš, 14.11.2013
Datenintegrität
WS 2013/14
Datenbanksysteme
Do 17:00 – 18:30
R 1.007
 Integitätsbedingungen bis jetzt
Schlüssel  Eindeutigkeit
Beziehungskardinalitäten (min,max Notation)
Attributdomänen (NUMBER, CHAR, DATE)
Inklusion bei Generalisierung (Untertyp immer im Obertyp
enthalten)
 statische Integritätsbedingungen
 Bedingungen an den Zustand der Datenbasis
 Mit Datenbank-CONSTRAINTs realisiert
 dynamische Integritätsbedingungen
 Bedingungen an Zustandsübergänge
 Mit Datenbank-TRIGGERn realisiert
* engl. CONSTRAINT = Bedingung, TRIGGER = Auslöser
© Bojan Milijaš, 14.11.2013
Statische CONSTRAINTs
WS 2013/14
Datenbanksysteme
Do 17:00 – 18:30
R 1.007
 NOT NULL
 UNIQUE
 CHECK (Regel)
 Vorisicht: CHECK ist auch dann erfüllt, wenn der logische
Vergleich einen NULL-Wert zurückliefert
CREATE TABLE MyProfessoren
(
PersNr NUMBER(5,0) UNIQUE,
Name VARCHAR2(30) NOT NULL,
Rang CHAR(2) CHECK (Rang IN ('C1', 'C2', 'C3','C4') )
);
© Bojan Milijaš, 14.11.2013
Statische CONSTRAINTs (2)
WS 2013/14
Datenbanksysteme
Do 17:00 – 18:30
R 1.007
 Man kann CONSTRAINTs nachträglich definieren
ALTER TABLE myprofessoren
ADD CHECK (Rang IN ('C1', 'C2', 'C3','C4') );
 löschen, verändern, suchen, auflisten, ein- und
ausschalten, validieren (siehe SQL-Manual des
jeweiligen DBMS, hier Oracle Syntax für das
Löschen)
ALTER TABLE myprofessoren
DROP CONSTRAINT sys_c003798;
 Dynamische Constraints  mit Triggern nächstes
Mal (Vorlesung #9)
© Bojan Milijaš, 14.11.2013
Referentielle Integrität
WS 2013/14
Datenbanksysteme
Do 17:00 – 18:30
R 1.007
 Sorgt dafür, dass die Beziehung zwischen dem
Primärschlüssel und dem Fremdschlüssel bestehen
bleibt (dass die Referenz - der Verweis - erhalten
bleibt)
 Fremdschlüssel müssen auf existierende Tupel
verweisen oder einen Nullwert enthalten
 Beispiel gelesenVon  PersNr
CREATE TABLE Professoren
(PersNr INTEGER PRIMARY KEY ...)
(CREATE TABLE Vorlesungen
gelesenVon INTEGER REFERENCES Professoren ...)
© Bojan Milijaš, 14.11.2013
Referentielle Integrität (2)
WS 2013/14
Datenbanksysteme
Do 17:00 – 18:30
R 1.007
 Schlüsselkandidat UNIQUE CONSTRAINT
 Primärschlüssel PRIMARY KEY
 Fremdschlüssel FOREIGN KEY (auch implizit
durch das Wort REFERENCES in TabellenDefinition)
 FOREIGN KEYs können auch NULL Werte
enthalten
 UNIQUE FOREIGN KEY modelliert 1:1
Beziehung
© Bojan Milijaš, 14.11.2013
Einhaltung referentieller
Integrität
Änderung von referenzierten Daten
Default: Zurückweisen der Änderungsoperation
Propagieren der Änderungen: cascade
Verweise auf Nullwert setzen: set null
Dies ergibt folgende Möglichkeiten bei der
Festlegung des CONSTRAINTs in der TabellenDefinition
WS 2013/14
Datenbanksysteme
Do 17:00 – 18:30
R 1.007
ON [ UPDATE | DELETE ] [ SET NULL | CASCADE ]
Kaskadierendes Löschen mit Vorsicht geniessen!
Beispiel: wenn in „Vorlesungen“ und „hören“
kaskadierend gelöscht wird, verliert man die beim
Löschen eines Professors die Information welcher
Student was gehört hat.
© Bojan Milijaš, 14.11.2013
UNI Schema mit Constraints
WS 2013/14
Datenbanksysteme
Do 17:00 – 18:30
R 1.007
Kemper Seite 157
URL: siehe Übungsblätter #4 und #5
© Bojan Milijaš, 14.11.2013
Fazit und Ausblick
Fazit SQL Teil 1 bis 4
WS 2013/14
Datenbanksysteme
Do 17:00 – 18:30
R 1.007
SQL Teil 1 – Datentypen, einfache Abfragen
SQL Teil 2 – komplexe Abfragen, Unterabfragen
SQL Teil 3 – quantifizierte Abfragen, Rekursion
SQL Teil 4 – Views, Constraints
Ausblick SQL Teil 5
Trigger, prozedurale Erweiterungen (PL/SQL)
Einbettung in C,C++,Java
SQL Schnittstellen JDBC,ODBC
Query By Example QBE
© Bojan Milijaš, 14.11.2013
WS 2013/14
Datenbanksysteme
Do 17:00 – 18:30
R 1.007
Vorlesung #7
Ende