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