Vorlesung #7 SQL (Teil 4).

Slides:



Advertisements
Ähnliche Präsentationen
Sicherheitsaspekte Sicherheit im DBMS
Advertisements

Datenintegrität Einschränkung der möglichen Datenbankzustände und -übergänge auf die in der Realität möglichen Formulierung von Integritätsbedingungen.
Datenintegrität Integitätsbedingungen Schlüssel
Deduktive Datenbanken
System J – Compiler – Praktikum: Datenbanksystementwicklung Knut Stolze
© A. Kemper / A. Eickler1 Kapitel 5: Datenintegrität Integitätsbedingungen Schlüssel Beziehungskardinalitäten Attributdomänen Inklusion bei Generalisierung.
Systemüberblick Beispiele: Microsoft Access Oracle Ingres Informix
Datenintegrität, Views und Zugriffsrechte
Kapitel 5 SQL DDL + DML.
Datenintegrität, Views und Zugriffsrechte
Grundlagen Datenbanken
SQL als Abfragesprache
Datensicherheit in DBMS
IS: Datenbanken, © Till Hänisch 2000 CREATE TABLE Syntax: CREATE TABLE name ( coldef [, coldef] [, tableconstraints] ) coldef := name type [länge], [[NOT]NULL],
Datenintegrität Referentielle Integrität create table
1 Datenintegrität Statische Bedingung (jeder Zustand) Dynamische Bedingung (bei Zustandsänderung) Bisher: Definition eines Schlüssels 1:N - Beziehung Angabe.
1 Kapitel 8: Datenintegrität. 2 Datenintegrität Statische Bedingung (jeder Zustand) Dynamische Bedingung (bei Zustandsänderung) Bisher: Definition eines.
Kapitel 9: Integritätssicherung
3.5.2 Fremdschlüssel/ Referentielle Integrität (6/9)
3.5.2 Fremdschlüssel/ Referentielle Integrität (1/9)
Datenbankentwicklung IV-LK
Relationale Datenbanken III
FH-Hof Standard Query Language Richard Göbel. FH-Hof Geschichte der Sprache SQL System/R-Projekts von IBM zu Beginn der 70er Jahre: Entwicklung der Sprache.
Datenintegrität Integitätsbedingungen Schlüssel
WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #6 SQL (Teil 3)
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #4 SQL (Teil 1)
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #6 SQL (Teil 3)
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #6 SQL (Teil 3)
WS 2007/08 Datenbanksysteme Mi 17:00 – 18:30 R Vorlesung #10 Physische Datenorganisation.
WS 2011/12 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #6 SQL (Teil 3)
SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #7 SQL (Teil 2)
WS 2011/12 Datenbanksysteme Mi 15:15 – 16:45 R Vorlesung #9 Physische Datenorganisation.
Vorlesung #4 SQL (Teil 1).
SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #8 SQL (Teil 3)
SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #6 SQL (Teil 1)
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #7 SQL (Teil 4)
WS 2013/14 Datenbanksysteme D0 15:15 – 16:45 R Vorlesung #5 SQL (Teil 2)
SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #9 SQL (Teil 4)
WS 2007/08 Datenbanksysteme Mi 17:00 – 18:30 R Vorlesung #5 SQL (Teil 2)
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #7 SQL (Teil 4)
WS 2011/12 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #4 SQL (Teil 1)
Datenbanksysteme für hörer anderer Fachrichtungen
WS 2011/12 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #5 SQL (Teil 2)
Vorlesung #10 Physische Datenorganisation
Relationales Datenmodell und DDL
Structured Query Language
8 Erzeugen und Verwalten von Tabellen Ziele Kennenlernen der wichtigsten Datenbankobjekte Anlegen von Tabellen Datentypen zur Definition von Spalten.
Vorlesung #5 SQL (Teil 2).
Integritätsbedingungen (Constraints)
1 Referenzielle Konsistenz (1) Vorgehensweise: Klausel references mit nachfolgender Spezikation eines Attributs einer anderen Tabelle identifiziert ein.
WS 2014/15 Datenbanksysteme D0 15:15 – 16:45 R Vorlesung #6 SQL (Teil 3)
11 Zugriffskontrolle (Access Control) Ziele Privilegien Rollen GRANT und REVOKE Befehl Privilegien Rollen GRANT und REVOKE Befehl.
WS 2014/15 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #9 SQL Zusammenfassung.
Datenbanken erstellen mit PostgreSQL
Datenbanken abfragen mit SQL
SQL Lutz KleinostendarpJOBELMANN-SCHULE Datendefinition Die Organisation einer Datenbank basiert auf einer Anzahl verschiedener Objekte. Diese können physikalischer.
 standardisierte -Datendefinitionssprache (DDL) -Datenmanipulationssprache (DML) -Anfragesprache (Query)  derzeit aktueller Standard ist SQL 3  objektrelationale.
SQL Structured Query Language Enzio Thiem. INHALT CREATE TABLE Anweisung Gängige Datentypen Beispiel CREATE TABLE Beispiel CREATE TABLE - erweitert Beispiel.
Technische Universität München Übung zur Einführung in die Informatik für Hörer anderer Fachrichtungen im Sommersemester 2010 Sitzung 8: Die relationale.
SQL Basics Schulung –
Vorlesung #2 ER –Modellierung (Datenbankentwurf)
Sprachumfang von SQL Vier Kategorien DDL (Data Definition Language)
Vorlesung #4 Relationales Kalkül und SQL (Teil 1)
Vorlesung #5 SQL (Teil 2).
Vorlesung #6 SQL (Teil 3).
Abfragesprache SQL in ORACLE
Vorlesung #8 SQL (Teil 5).
Vorlesung #2 Datenbankentwurf
(Structured Query Language)
 Präsentation transkript:

Vorlesung #7 SQL (Teil 4)

Vorlesung #7 - SQL (Teil 4) „Fahrplan“ EXISTS, ANY(SOME), ALL (Wiederholung) Quantifizierte Anfragen Doppelter NOT EXISTS HAVING count = ... Views Constraints Datenintegrität, statische Bedingungen (PK,UQ,NOT NULL,CHECK) referentielle Integrität (FK) Rekursion Standard SQL (geschachtelt, entschachtelt) in ORACLE (CONNECT BY PRIOR) in DB2 (WITH View) © Bojan Milijaš, 13.11.2015 Vorlesung #7 - SQL (Teil 4)

Vorlesung #7 - SQL (Teil 4) EXISTS, ANY, ALL ... SELECT * FROM Studenten WHERE Semester >= ALL(SELECT Semester FROM Studenten); WHERE Semester > ANY(SELECT Semester FROM Studenten S WHERE EXISTS (SELECT * FROM hören h WHERE h.MatrNr = S.MATRNR); © Bojan Milijaš, 13.11.2015 Vorlesung #7 - SQL (Teil 4)

Quantifizierte Anfragen in SQL Es gibt keinen expliziten Allquantor Es gibt aber den Existenzquantor: exists, not exists wieder: „Professoren, die keine Vorlesung halten“ select Name, PersNr from Professoren p where not exists ( select * from Vorlesungen where gelesenVon = p.PersNr ); © Bojan Milijaš, 13.11.2015 Vorlesung #7 - SQL (Teil 4)

Vorlesung #7 - SQL (Teil 4) © Bojan Milijaš, 13.11.2015 Vorlesung #7 - SQL (Teil 4)

Vorlesung #7 - SQL (Teil 4) © Bojan Milijaš, 13.11.2015 Vorlesung #7 - SQL (Teil 4)

Quantifizierte Anfragen in SQL (4) Wer hat alle vierstündigen Vorlesungen gehört? select s.* from Studenten s where not exists (select * from Vorlesungen v where v.SWS = 4 and not exists from hören h where h.VorlNr = v.VorlNr and h.MatrNr=s.MatrNr ) ); © Bojan Milijaš, 13.11.2015 Vorlesung #7 - SQL (Teil 4)

Quantifizierte Anfragen in SQL (5) Allquantifizierung kann immer auch durch eine count Aggregation ausgedrückt werden Wir betrachten dazu eine etwas einfachere Anfrage, in der wir die (MatrNr der) Studenten ermitteln wollen, die alle Vorlesungen hören: select h.MatrNr from hören h group by h.MatrNr having count (*) = (select count (*) from Vorlesungen); © Bojan Milijaš, 13.11.2015 Vorlesung #7 - SQL (Teil 4)

Vorlesung #7 - SQL (Teil 4) 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; © Bojan Milijaš, 13.11.2015 Vorlesung #7 - SQL (Teil 4)

Vorlesung #7 - SQL (Teil 4) 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 NAME TITEL Kant Grundzuege ... SELECT * FROM ProfVorlesung; © Bojan Milijaš, 13.11.2015 Vorlesung #7 - SQL (Teil 4)

Sichten (3) - logische Datenunabhängigkeit Benutzer 2 Benutzer 1 Sicht 1 Sicht 2 Sicht 3 Logische Datenunabhängigkeit Relation 1 Relation 2 Relation 3 Physische Datenunabhängigkeit © Bojan Milijaš, 13.11.2015 Vorlesung #7 - SQL (Teil 4)

Sichten (4) – Beispiel logische Datenunabhängigkeit Internet-Besucher Studenten CREATE VIEW ProfVorlesung AS SELECT Name, Titel FROM Professoren, Vorlesungen WHERE PersNr = gelesenVon; ProfVerlesung CREATE VIEW ProfVorlesung AS SELECT Name, Titel FROM Dozenten NATURAL JOIN lesen NATURAL JOIN Kurse; Professoren Vorlesungen Dozenten lesen Kurse © Bojan Milijaš, 13.11.2015 Vorlesung #7 - SQL (Teil 4)

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 © Bojan Milijaš, 13.11.2015 Vorlesung #7 - SQL (Teil 4)

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 © Bojan Milijaš, 13.11.2015 Vorlesung #7 - SQL (Teil 4)

Vorlesung #7 - SQL (Teil 4) 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 © Bojan Milijaš, 13.11.2015 Vorlesung #7 - SQL (Teil 4)

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') ) ); © Bojan Milijaš, 13.11.2015 Vorlesung #7 - SQL (Teil 4)

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) DROP CONSTRAINT sys_c003798; Dynamische Constraints  mit Triggern nächstes Mal (Vorlesung #9) © Bojan Milijaš, 13.11.2015 Vorlesung #7 - SQL (Teil 4)

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 ...) © Bojan Milijaš, 13.11.2015 Vorlesung #7 - SQL (Teil 4)

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 © Bojan Milijaš, 13.11.2015 Vorlesung #7 - SQL (Teil 4)

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. © Bojan Milijaš, 13.11.2015 Vorlesung #7 - SQL (Teil 4)

Vorlesung #7 - SQL (Teil 4) 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' ; © Bojan Milijaš, 13.11.2015 Vorlesung #7 - SQL (Teil 4)

Vorlesung #7 - SQL (Teil 4) 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'); © Bojan Milijaš, 13.11.2015 Vorlesung #7 - SQL (Teil 4)

Vorlesung #7 - SQL (Teil 4) Rekursion (3) SELECT Vorgänger FROM voraussetzen WHERE Nachfolger IN (SELECT Vorgänger FROM voraussetzen, Vorlesungen WHERE Nachfolger = VorlNr AND Titel = `Der Wiener Kreis´); Entschachtelung SELECT v1.Vorgä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´; © Bojan Milijaš, 13.11.2015 Vorlesung #7 - SQL (Teil 4)

Vorlesung #7 - SQL (Teil 4) 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 = VorlNr AND v.Titel = `Der Wiener Kreis´; © Bojan Milijaš, 13.11.2015 Vorlesung #7 - SQL (Teil 4)

Vorlesung #7 - SQL (Teil 4) 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“ © Bojan Milijaš, 13.11.2015 Vorlesung #7 - SQL (Teil 4)

Rekursion (6) – Transitive Hülle voraussetzen Der Wiener Kreis Wissenschaftstheorie Bioethik Erkenntnistheorie Ethik Mäeutik Grundzüge © Bojan Milijaš, 13.11.2015 Vorlesung #7 - SQL (Teil 4)

Rekursion (7) – Transitive Hülle transA,B(R)= {(a,b)  k  IN (1, ..., k  R ( 1.A= 2.B   k-1.A= k.B  1.A= a  k.B= b))} © Bojan Milijaš, 13.11.2015 Vorlesung #7 - SQL (Teil 4)

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 where Titel= 'Der Wiener Kreis')); © Bojan Milijaš, 13.11.2015 Vorlesung #7 - SQL (Teil 4)

Vorlesung #7 - SQL (Teil 4) 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') ); © Bojan Milijaš, 13.11.2015 Vorlesung #7 - SQL (Teil 4)

Vorlesung #7 Ende