Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Ercanbald Wolfrom Geändert vor über 11 Jahren
1
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Vorlesung #7 SQL (Teil 4)
2
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Fahrplan Rekursion Rekursion in SQL-92 Rekursion in DBMS-Dialekten (Oracle und DB2) 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 Vorlesung #7 - SQL (Teil 4)© Bojan Milijaš, 16.11.20122
3
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Rekursion Rekursive Relation voraussetzen in UNI Schema voraussetzen : {[Vorgänger, Nachfolger]} Welche Vorlesungen muss man hören, um die Vorlesung Der Wiener Kreis zu verstehen? SELECT Vorgaenger FROM voraussetzen vs, Vorlesungen vo WHERE vs.Nachfolger = vo.VorlNr AND vo.Titel = 'Der Wiener Kreis' ; Vorlesung #7 - SQL (Teil 4)© Bojan Milijaš, 16.11.20123
4
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Rekursion (2) Das sind aber nur die direkten Vorgänger, bzw. Vorgänger erster Stufe! Wie bekommt man alle? Zunächst Vorgänger zweiter Stufe: SELECT Vorgaenger FROM voraussetzen WHERE Nachfolger IN (SELECT Vorgaenger FROM voraussetzen, Vorlesungen WHERE Nachfolger = VorlNr AND Titel = 'Der Wiener Kreis'); Vorlesung #7 - SQL (Teil 4)© Bojan Milijaš, 16.11.20124
5
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Rekursion (3) SELECT Vogänger FROM voraussetzen WHERE Nachfolger IN (SELECT Vorgänger FROM voraussetzen, Vorlesungen WHERE Nachfolger = VorlNr AND Titel = `Der Wiener Kreis´); SELECT v1.Vogänger FROM voraussetzen v1, voraussetzen v2, Vorlesungen v WHERE v1.Nachfolger = v2.Vorgänger AND v2.Nachfolger = v.VorlNr AND v.Titel = `Der Wiener Kreis´; Entschachtelung Vorlesung #7 - SQL (Teil 4)© Bojan Milijaš, 16.11.20125
6
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Rekursion (4) Man kann die gewonenne entschachtelte Abfrage verallgemeinern für die Vorgänger n-ten Stufe SELECT v1.Vorgänger FROM voraussetzen v1,..., voraussetzen v_n-1, voraussetzen vn, Vorlesungen v WHERE v1.Nachfolger = v2.Vorgänger AND... AND v_n-1.Nachfolger = vn.Vorgänger AND vn.Nachfolger = v.Vorgänger AND v.Titel = `Der Wiener Kreis´; Vorlesung #7 - SQL (Teil 4)© Bojan Milijaš, 16.11.20126
7
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Rekursion (5) (-) sehr umständlich zu formulieren (-) ineffizient bei der Durchführung (-) leider in SQL-Standard nicht anders möglich SQL ist nicht Turing-vollständig, SQL ist deklarativ, keine Schleifen, keine Kontrollverzweigungen, keine GO TO, JUMP Befehle oder ähnliches Das Finden aller Vorgänger nennt man allgemein Berechnen der transitiver Hülle Vorlesung #7 - SQL (Teil 4)© Bojan Milijaš, 16.11.20127
8
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Rekursion (6) – Transitive Hülle voraussetzen Der Wiener Kreis WissenschaftstheorieBioethik ErkenntnistheorieEthikMäeutik Grundzüge Vorlesung #7 - SQL (Teil 4)© Bojan Milijaš, 16.11.20128
9
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Rekursion (7) – Transitive Hülle trans A,B (R)= {(a,b) k IN ( 1,..., k R ( 1.A= 2.B k-1.A= k.B 1.A= a k.B= b))} Vorlesung #7 - SQL (Teil 4)© Bojan Milijaš, 16.11.20129
10
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Rekursion (8) – Oracle CONNECT BY Konstrukt select Titel from Vorlesungen where VorlNr in (select Vorgaenger from voraussetzen CONNECT BY Nachfolger = PRIOR Vorgaenger START WITH Nachfolger = (select VorlNr from Vorlesungen where Titel= 'Der Wiener Kreis')); Vorlesung #7 - SQL (Teil 4)© Bojan Milijaš, 16.11.201210
11
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Rekursion (9) in IBM DB2 with TransVorl (Vorg, Nachf) as (select Vorgaenger, Nachfolger from voraussetzen union all select t.Vorg, v.Nachfolger from TransVorl t, voraussetzen v where t.Nachf= v.Vorgaenger) select Titel from Vorlesungen where VorlNr in (select Vorg from TransVorl where Nachf in (select VorlNr from Vorlesungen where Titel= 'Der Wiener Kreis') ); Vorlesung #7 - SQL (Teil 4)© Bojan Milijaš, 16.11.201211
12
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Sichten (VIEWs) 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; Vorlesung #7 - SQL (Teil 4)© Bojan Milijaš, 16.11.201212
13
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Sichten (2) (+) 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 NAMETITEL KantGrundzuege... SELECT * FROM ProfVorlesung; Vorlesung #7 - SQL (Teil 4)© Bojan Milijaš, 16.11.201213
14
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Sichten (3) - logische Datenunabhängigkeit Relation 1Relation 2Relation 3 Benutzer 2Benutzer 1 Sicht 1Sicht 2Sicht 3 Physische Datenunabhängigkeit Logische Datenunabhängigkeit Vorlesung #7 - SQL (Teil 4)© Bojan Milijaš, 16.11.201214
15
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Sichten (4) – Beispiel logische Datenunabhängigkeit Internet-BesucherStudenten ProfVerlesung Dozenten lesen Kurse CREATE VIEW ProfVorlesung AS SELECT Name, Titel AS SELECT Name, Titel FROM Dozenten FROM Dozenten NATURAL JOIN lesen NATURAL JOIN lesen NATURAL JOIN Kurse; NATURAL JOIN Kurse; CREATE VIEW ProfVorlesung AS SELECT Name, Titel FROM Professoren, Vorlesungen WHERE PersNr = gelesenVon; Professoren Vorlesungen Vorlesung #7 - SQL (Teil 4)© Bojan Milijaš, 16.11.201215
16
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Sichten (5) – UPDATE-Fähigkeit Sichten sind immer veränderbar im Bezug auf DDL- Operation, 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 Vorlesung #7 - SQL (Teil 4)© Bojan Milijaš, 16.11.201216
17
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Sichten (6) – UPDATE-Fähigkeit 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 Vorlesung #7 - SQL (Teil 4)© Bojan Milijaš, 16.11.201217
18
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Datenintegrität 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 Vorlesung #7 - SQL (Teil 4)© Bojan Milijaš, 16.11.201218
19
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Statische CONSTRAINTs 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') ) ); Vorlesung #7 - SQL (Teil 4)© Bojan Milijaš, 16.11.201219
20
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Statische CONSTRAINTs (2) 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) Vorlesung #7 - SQL (Teil 4)© Bojan Milijaš, 16.11.201220
21
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Referentielle Integrität 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...) Vorlesung #7 - SQL (Teil 4)© Bojan Milijaš, 16.11.201221
22
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Referentielle Integrität (2) Schlüsselkandidat UNIQUE CONSTRAINT Primärschlüssel PRIMARY KEY Fremdschlüssel FOREIGN KEY (auch implizit durch das Wort REFERENCES in Tabellen- Definition) FOREIGN KEYs können auch NULL Werte enthalten UNIQUE FOREIGN KEY modelliert 1:1 Beziehung Vorlesung #7 - SQL (Teil 4)© Bojan Milijaš, 16.11.201222
23
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 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 Tabellen- Definition 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. Vorlesung #7 - SQL (Teil 4)© Bojan Milijaš, 16.11.201223
24
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 UNI Schema mit Constraints Kemper Seite 157 URL: siehe Übungsblätter #4 und #5 Vorlesung #7 - SQL (Teil 4)© Bojan Milijaš, 16.11.201224
25
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Fazit und Ausblick Fazit SQL Teil 1 bis 4 SQL Teil 1 – Datentypen, einfache Abfragen SQL Teil 2 – komplexe Abfragen, Unterabfragen SQL Teil 3 – quantifizierte Abfragen SQL Teil 4 – Rekursion, Views, Constraints Ausblick SQL Teil 4 Trigger, prozedurale Erweiterungen (PL/SQL) Einbettung in C,C++,Java SQL Schnittstellen JDBC,ODBC Query By Example QBE Vorlesung #7 - SQL (Teil 4)© Bojan Milijaš, 16.11.201225
26
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Vorlesung #7 Ende
Ähnliche Präsentationen
© 2025 SlidePlayer.org Inc.
All rights reserved.