11. Integrität und Trigger. Integritätssicherung durch Anwendung. Architekturen zur Integritätssicherung. Anwendung 1. Anwendung n Routinen.

Ähnliche Dokumente
Teil IX Transaktionen, Integrität und Trigger

Teil VIII Transaktionen, Integrität und Trigger

6. Trigger Charakterisierung von Triggern. 6. Trigger. Trigger definieren automatische Reaktionen auf Ereignisse, die durch Datenmanupilationen

Beispiel zur referentiellen Integrität

6. Datenintegrität. Integritätsbedingungen

Die Anweisung create table

Datenintegrität. Integitätsbedingungen Schlüssel Beziehungskardinalitäten Attributdomänen Inklusion bei Generalisierung

Datenbanksysteme I Integrität und Trigger Felix Naumann

Datenbanksysteme 2013

Referentielle Integrität

Datenintegrität. Arten von Integritätsbedingungen. Statische Integritätsbedingungen. Referentielle Integrität. Integritätsbedingungen in SQL.

Referentielle Integrität

Integrität in Datenbanken. Prof. Dr. T. Kudraß 1

Semantische Integrität (auch: Konsistenz) der in einer Datenbank gespeicherten Daten als wichtige Anforderung

Datenintegrität. Einschränkung der möglichen Datenbankzustände und -übergänge auf die in der Realität möglichen

Datenintegrität. Einschränkung der möglichen Datenbankzustände und -übergänge auf die in der Realität möglichen

Kapitel 7: Referentielle Integrität

Vorlesung Datenbankmanagementsysteme

VO Datenmodellierung. Katrin Seyr

Datenintegrität. Bisherige Integritätsbedingungen

Seminar 2. SQL - DML(Data Manipulation Language) und. DDL(Data Definition Language) Befehle.

SQL: statische Integrität

SQL. SQL: Structured Query Language. Früherer Name: SEQUEL. Standardisierte Anfragesprache für relationale DBMS: SQL-89, SQL-92, SQL-99

Datenintegrität. Folien zum Datenbankpraktikum Wintersemester 2009/10 LMU München

Grundlagen von Datenbanken. Referentielle Aktionen, Sichten, Serialisierbarkeit und Locking

Funktion definieren Gibt Summe der Gehälter zurück. Aufruf in einem SQL-Statement

WS 2010/11 Datenbanksysteme Fr 15:15 16:45 R Vorlesung #5. SQL (Teil 3)

Aufgabe 1: Integrität

Datenbanken Unit 4: Das Relationale Modell & Datenintegrität

Bedingungen über Werte Statische Integrität. CHECK-Klausel

Datenbanken. Datenintegrität + Datenschutz. Tobias Galliat. Sommersemester 2012

Mengenvergleiche: Alle Konten außer das, mit dem größten Saldo.

Informatik für Ökonomen II: Datenintegrität. Prof. Dr. Carl-Christian Kanne

Datenbanken SQL. Insert, Update, Delete, Drop. Krebs

Wiederholung VU Datenmodellierung

Kapitel 3 Datenintegrität

Klausur PI Datenbanken II vom Name: Praktische Informatik (Krägeloh)

Universität Duisburg-Essen Informationssysteme Prof. Dr.-Ing. N. Fuhr. Praktikum Datenbanken / DB2 Woche 8: Trigger, SQL-PL

Datenbanken: Datenintegrität.

Welche Kunden haben die gleiche Ware bestellt? select distinct a1.name, a2.name from Auftrag a1, Auftrag a2 where a1.ware = a2.ware.

Web Science & Technologies University of Koblenz Landau. Grundlagen der Datenbanken. Integrität. Dr. Jérôme Kunegis Wintersemester 2013/14

Uni Duisburg-Essen Fachgebiet Informationssysteme Prof. Dr. N. Fuhr. Praktikum: Datenbanken Woche 7: Noch mehr SQL

Dieser Foliensatz darf frei verwendet werden unter der Bedingung, dass diese Titelfolie nicht entfernt wird.

Vorlesung Datenbanken

Datenschutz: Zugriffsrechte in SQL

Kapitel DB:VI (Fortsetzung)

1. Integritätsbedingungen und Trigger

Konstante Relationen

Kapitel 7 Datenintegrität und

Inhalt. Ein Einführung in die Nutzung von SQL-Datenbanken am Beispiel Oracle. Daten und Tabellen - ein Beispiel. Daten und Tabellen - Normalisierung

Daten-Definitionssprache (DDL) Bisher: Realwelt -> ERM -> Relationen-Modell -> normalisiertes Relationen-Modell. Jetzt: -> Formulierung in DDL

Referenzielle Integrität SQL

Finalklausur zur Vorlesung Datenbanksysteme I Wintersemester 2003/2004 Prüfer: Prof. R. Bayer, Ph.D. Datum: Zeit: 16.

Integritätsbedingungen Eindeutige Identifikation (1)

Datenabstraktion / Kapselung in (O)RDBMS

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

Testklausur 1 Übungsaufgaben aus alten Datenbanken 1 Klausuren zum Data Science-Synchronisationsmodul Datenbanken WS 2016/17

Kapitel 8: Zugriffskontrolle

Datenbanken Entity-Relationship-Modell und Datenbankentwurf 1. Andreas Heß Hochschule Furtwangen

3.13 SQL und Programmiersprachen

5.3 Datenänderung/-zugriff mit SQL (DML)

7. Datenbankdefinitionssprachen

Terminierungs-Analyse von SQL-Triggern. Sommersemester 05 T. Jahn Seminar Intelligente Datenbanken SQL-Trigger: Terminierungs-Analyse 1

Übung PL/SQL Trigger Lösungen

Von der passiven zur aktiven Datenbank. Checks und Assertions Referentielle Aktionen Trigger

SQL. Datenmanipulation. Datenmanipulationssprache. Ein neues Tupel hinzufügen. Das INSERT Statement

Trigger schreiben. Überblick über Trigger. Datenbank Trigger: Beispiel. Aufbau eines Triggers

Introduction to Data and Knowledge Engineering. 6. Übung SQL

dbis Praktikum DBS I SQL Teil 2

Hochschule Karlsruhe Technik und Wirtschaft Anhänge: Fakultät für Informatik und Wirtschaftsinformatik SS 2013 Prof. Schmidt.

SQL. Datendefinition

Auf einen Blick. Abfrage und Bearbeitung. Erstellen einer Datenbank. Komplexe Abfragen. Vorwort... 13

Semantische Datenintegrität

Integritätsbedingungen für komplexe Objekte in objektrelationalen Datenbanksystemen

Advanced SQL verstehen und einsetzen SQL-Implementierungen kennen und bewerten

Einleitung 19. Teil I Einführung in Datenbanksysteme 25. Kapitel 1 Wozu Datenbanksysteme da sind 27

Datenbanksysteme Kapitel 2: SQL Data Definition Language

Inhaltsverzeichnis. Vorwort Kapitel 1 Einleitung... 15

Auf einen Blick. Abfrage und Bearbeitung. Erstellen einer Datenbank. Komplexe Abfragen. Vorwort 13

Relationales Datenbanksystem Oracle

7. Integritätskontrolle in SQL. Vorlesung "Informationssysteme" Sommersemester 2017

Dipl. Inf. Dipl. Math. Y. Orkunoglu Datum:

SQL. Fortgeschrittene Konzepte Auszug

WS 2010/11 Datenbanksysteme Fr 15:15 16:45 R Vorlesung #6. SQL (Teil 4)

Foreign Keys. MySQL 4, 5. Kapitel 16: Fremdschlüssel. Marcel Noe

Inhaltsverzeichnis. Vorwort 13. Kapitel 1 Einleitung 15

Funktionen. Überblick über Stored Functions. Syntax zum Schreiben einer Funktion. Schreiben einer Funktion

Datenbanken. Zusammenfassung. Datenbanksysteme

Web-Technologien. Prof. Dr. rer. nat. Nane Kratzke SQL. Praktische Informatik und betriebliche Informationssysteme

Wirtschaftsinformatik 7a: Datenbanken. Hochschule für Wirtschaft und Recht SS 16 Dozent: R. Witte

DB2 SQL, der Systemkatalog & Aktive Datenbanken

Integritätsbedingungen / Normalformen- Beispiel: Kontoführung

Grober Überblick zu Datendefinitionsanweisungen in SQL

Erzeugen von Constraints

SQL. Allgemeines CREATE TABLE DROP TABLE ALTER TABLE INSERT INTO UPADTE DELETE SELECT

Das relationale Datenmodell

Vorlesung: Relationale Datenbanksysteme

Transkript:

11. Integrität und Trigger Grundlagen und Begriffe Grundlagen und Begriffe Integritätsbedingungen Integritätsregeln in SQL Trigger Integritätsbedingung (IB) = Bedingung für die Zulässigkeit ( Korrektheit ) betreffend (einzelne) Datenbankzustände σ, Zustandsübergänge σ alt, σ neu oder auch langfristige Datenbankentwicklungen Bezeichnungen: Bedingungsklasse zeitlicher Kontext statisch Datenbankzustand dynamisch transitional Zustandsübergang temporal Zustandsfolge VL Datenbanken I 11 1 VL Datenbanken I 11 2 Architekturen zur Integritätssicherung Integritätssicherung durch Anwendung Anwendung 1 Anwendung n Anwendung 1 Routinen Anwendung n Routinen DBMS DBMS Datenbank Vereinfachte Datenbank-Anwendungsarchitektur Datenbank VL Datenbanken I 11 3 VL Datenbanken I 11 4

Integritätsmonitor Einkapselung Anwendung 1 Anwendung n Anwendung 1 Anwendung n DBMS Monitor Kapselung DBMS Datenbank Datenbank VL Datenbanken I 11 5 VL Datenbanken I 11 6 Inhärente Integritätsbedingungen im RM Integritätsbedingungen in SQL-DDL 1. Typintegrität: SQL erlaubt Angabe von Wertebereichen zu Attributen Erlauben oder Verbieten von Nullwerten 2. Schlüsselintegrität: Angabe eines Schlüssels für eine Relation 3. Referentielle Integrität: die Angabe von Fremdschlüsseln not null: Nullwerte verboten default: Angabe von Default-Werten check ( search-condition ): Attributspezifische Bedingung (in der Regel Ein-Tupel-Integritätsbedingung) primary key: Angabe eines Primärschlüssel foreign key ( Attribut(e)) references Tabelle( Attribut(e) ): Angabe der referentiellen Integrität VL Datenbanken I 11 7 VL Datenbanken I 11 8

Erhaltung der referentiellen Integrität Überprüfungsmodi von Bedingungen Überprüfung der Fremdschlüsselbedingungen nach Datenbankänderungen für π A (r 1 ) π K (r 2 ), z.b. π Verlagsname (Bücher) π Verlagsname (Verlage) Tupel t wird eingefügt in r 1 überprüfen, ob t r 2 existiert mit: t (K) = t(a), d.h. t(a) π K (r 2 ) falls nicht abweisen Tupel t wird aus r 2 gelöscht überprüfen, ob σ A=t (K)(r 1 ) = {}, d.h. kein Tupel aus r 1 referenziert t falls nicht leer abweisen oder Tupel aus r 1, die t referenzieren, löschen (bei kaskadierendem Löschen) on update delete Angabe eines Auslöseereignisses, das die Überprüfung der Bedingung anstößt cascade set null set default no action Kaskadierung: Behandlung einiger Integritätsverletzungen pflanzt sich über mehrere Stufen fort, z.b. Löschen als Reaktion auf Verletzung der referentieller Integrität deferred immediate legt Überprüfungszeitpunkt für eine Bedingung fest deferred: Zurückstellen an das Ende der Transaktion immediate: sofortige Prüfung bei jeder relevanten Datenbankänderung VL Datenbanken I 11 9 VL Datenbanken I 11 10 Überprüfungsmodi: Beispiel Die assertion-klausel Kaskadierendes Löschen create table Bücher ( ISBN char(10) not null, Titel varchar(200), Verlagsname varchar(30), primary key (ISBN), foreign key (Verlagsname) references Verlage (Verlagsname) on delete cascade ) Assertion: Prädikat, das eine Bedingung ausdrückt, die von der Datenbank immer erfüllt sein muß Syntax (SQL:1999) create assertion name check ( prädikat ) Beispiele: create assertion Preise check ( ( select sum (Preis) from Buch) < 10000 ) create assertion Preise2 check ( not exists ( select Preis from Buch ) > 200 ) VL Datenbanken I 11 11 VL Datenbanken I 11 12

Beispiele für Integritätsbedingungen Beispiele für Integritätsbedingungen (II) 1. Das Konto von Weiß darf nicht überzogen werden. 2. Kein Kundenkonto darf unter -100 absinken. 3. Kunden sind durch ihre Namen identifiziert, d.h., kein Kundenname darf mehrfach vorkommen. 4. Der Durchschnittspreis für Karotten muß unter dem für Spargel liegen. 5. Nur solche Waren dürfen bestellt werden, für die es mindestens einen Lieferanten gibt. 6. Der Brotpreis darf nicht erhöht werden. 7. Kunden dürfen nur gelöscht werden, wenn sie keine Waren mehr bestellt haben. 8. Der Preis eines Grundnahrungsmittels darf innerhalb von drei Jahren höchstens um 15% steigen. 9. Kunden müssen gelöscht werden, wenn sie keine Waren mehr bestellt haben. VL Datenbanken I 11 13 VL Datenbanken I 11 14 Mögliche Klassifikationen Mögliche Klassifikationen (II) Kriterium Klassen Kriterium Klassen Granularität Ausdrucksfähigkeit Attribut Tupel Relation Datenbank elementare Prädikate Relationale Algebra SQL SQL + transitive Hülle berechnungsvollständig zeitlicher Kontext Überprüfungszeitpunkt Reaktion statisch transitional temporal Einzeländerung Operationsende Transaktionsende Zurückweisung (reject) Korrektur (repair) VL Datenbanken I 11 15 VL Datenbanken I 11 16

Integritätsregeln Integritätsregeln (II) B O A R IR = B, O, A, R Integritätsbedingung Menge von Datenbankobjekten, auf die sich B bezieht Auslöser, wann B zu überprüfen ist Reaktionen, falls B verletzt ist im usprünglichen SQL-Sprachvorschlag assert <Regelname> [immediate deferred] [ on <Op> ] (A) [for <Rel>] : (O) <Bedingung wie in where-klausel> (O, B) [else ( <Folge von SQL-Anweisungen> )] (R) wobei <Op> ::= { insertion deletion } of <Rel> update of <Rel> [ (<Attribut>)] <Rel> ::= <Relationsname> [ <Variablenname> ] VL Datenbanken I 11 17 VL Datenbanken I 11 18 Integritätsregeln in SQL: Beispiel I Integritätsregeln in SQL: Beispiel II Kunden sind durch ihre Namen eindeutig identifiziert: assert IR1 for KUNDE K1, KUNDE K2: not( K1.KName = K2.KName ) or (K1.KAdr = K2.KAdr and K1.Kto = K2.Kto) Kein Kundenkonto darf unter -100 absinken: assert IR2 for KUNDE : Kto >= -100 bzw. inklusive Angabe von Operationen: assert IR2 on insertion of KUNDE, update of KUNDE for KUNDE : Kto >= -100 VL Datenbanken I 11 19 VL Datenbanken I 11 20

Integritätsregeln in SQL: Beispiel III Integritätsregeln in SQL: Beispiel IV Das Konto von Weiß darf nicht überzogen werden: assert IR3 for KUNDE : not KName = Weiß or Kto >= 0 Der Durchschnittspreis für Karotten muß unter dem für Spargel liegen: assert IR4 deferred ( select avg (Preis) from LIEFERANT where Ware = Karotten ) <= (select avg (Preis) from LIEFERANT where Ware = Spargel ) VL Datenbanken I 11 21 VL Datenbanken I 11 22 Integritätsregeln in SQL: Beispiel V Integritätsregeln in SQL: Beispiel VI Nur solche Waren dürfen bestellt werden, für die es mindestens einen Lieferanten gibt: assert IR5 for AUFTRAG A: exists (select * from LIEFERANT where Ware = A.Ware) Der Brotpreis darf nicht erhöht werden: assert IR6 (on update of LIEFERANT (Preis)) for LIEFERANT: not Ware = Brot or new Preis <= old Preis VL Datenbanken I 11 23 VL Datenbanken I 11 24

Integritätsregeln in SQL: Beispiel VII Integritätsregeln in SQL: Beispiel VIII Kunden dürfen nur gelöscht werden, wenn sie keine Waren mehr bestellt haben: assert IR7 deferred on deletion of KUNDE for KUNDE K: not exists (select * from AUFTRAG where KName = old K.KName) Der Preis eines Grundnahrungsmittels darf innerhalb von drei Jahren höchstens um 15% steigen. kann in diesem Sprachvorschlag nicht ausgedrückt werden! VL Datenbanken I 11 25 VL Datenbanken I 11 26 Integritätsregeln in SQL: Beispiel IX Trigger Kunden müssen gelöscht werden, wenn sie keine Waren mehr bestellt haben: assert IR9 on deletion of AUFTRAG for AUFTRAG A1: exists (select * from AUFTRAG A2 where A2.KName = old A1.KName) else ( delete KUNDE K where K.KName = old A1.KName ); Trigger: Anweisung/Prozedur, die bei Eintreten eines bestimmten Ereignisses automatisch vom DBMS ausgeführt wird Anwendung: Erzwingen von Integritätsbedingungen ( Implementierung von Integritätsregeln) Auditing von DB-Aktionen Propagierung von DB-Änderungen VL Datenbanken I 11 27 VL Datenbanken I 11 28

Trigger (II) Trigger: Entwurf und Implementierung create trigger... after <Operation> <Anweisungen> entspricht einer speziellen Integritätsregel: assert...on <Operation> : false else ( <Anweisungen> ) Spezifikation von Ereignis und Bedingung für Aktivierung des Triggers Aktion(en) zur Ausführung Syntax in SQL:1999 festgelegt verfügbar in den meisten kommerziellen Systemen (aber mit anderer Syntax) VL Datenbanken I 11 29 VL Datenbanken I 11 30 SQL:1999-Trigger Weitere Angaben bei Triggern Syntax: create trigger <Name: > after before <Ereignis> on <Relation> [ when <Bedingung> ] begin atomic < SQL-Anweisungen > end Ereignis: insert update [ of <Liste von Attributen> ] delete for each row bzw. for each statement: Aktivierung des Triggers für jede Einzeländerungen einer mengenwertigen Änderung oder nur einmal für die gesamte Änderung before bzw. after: Aktivierung vor oder nach der Änderung referencing new as bzw. referencing old as: Binden einer Tupelvariable an die neu eingefügten bzw. gerade gelöschten ( alten ) Tupel einer Relation Tupel der Differenzrelationen VL Datenbanken I 11 31 VL Datenbanken I 11 32

Beispiel für Trigger (I) Beispiel für Trigger (II) Kein Kundenkonto darf unter -100 absinken: create trigger bad_account after update of Kto on KUNDE referencing new as INSERTED when (exists (select * from INSERTED where Kto < -100) ) begin atomic rollback; end ähnlicher Trigger für insert Nur solche Waren dürfen bestellt werden, für die es mindestens einen Lieferanten gibt: create trigger bad_order after insert on AUFTRAG referencing new as INSERTED when (exists ( select * from INSERTED I where not exists ( select * from LIEFERANT where Ware = I.Ware)) begin atomic rollback; end VL Datenbanken I 11 33 VL Datenbanken I 11 34 Beispiel für Trigger (III) Methoden der Integritätssicherung Kunden müssen gelöscht werden, wenn sie keine Waren mehr bestellt haben: create trigger bad_customer delete on AUFTRAG referencing old as O for each row when (not exists (select * from AUFTRAG A where A.KName = O.KName)) begin atomic delete from KUNDE where KName = O.KName; end Integritätssicherung durch Änderungstransformationen transformiert Änderungsanweisungen in einer Hochsprache wie SQL so, daß das Ergebnis der Transformation integritätsrespektierend ist Integritätsbedingungen werden in Änderungen hineinkompiliert Generierung von Triggern bzw. ECA-Regeln aus deskriptiven Integritätsbedingungen VL Datenbanken I 11 35 VL Datenbanken I 11 36

Integritätssicherung durch Trigger Integritätssicherung durch Trigger (II) 1. Bestimme Objekt o i, für das die Bedingung φ überwacht werden soll i.d.r. mehrere o i betrachten, wenn Bedingung relationsübergreifend ist Kandidaten für o i sind Tupel der Relationsnamen, die in φ auftauchen 2. Bestimme die elementaren Datenbankänderungen u ij auf Objekten o i, die φ verletzen können Regeln: z.b. Existenzforderungen beim Löschen und Ändern prüfen, jedoch nicht beim Einfügen etc. 4. Bestimme je nach Anwendung die Reaktion r i auf Integritätsverletzung Rücksetzen der Transaktion (rollback) korrigierende Datenbankänderungen 5. Formuliere folgende Trigger: create trigger t-phi-ij after u ij when φ begin r i end 6. Wenn möglich, vereinfache entstandenen Trigger on o i VL Datenbanken I 11 37 VL Datenbanken I 11 38 Trigger in Oracle Trigger in Oracle (II) Implementierung in PL/SQL Notation create [ or replace ] trigger trigger-name before after insert or update [ of spalten ] or delete on tabelle [ for each row [ when ( prädikat ) ] ] PL/SQL-Block Arten: Anweisungsebene (statement level trigger): Trigger wird ausgelöst vor bzw. nach der DML-Anweisung Tupelebene (row level trigger): Trigger wird vor bzw. nach jeder einzelnen Modifikation ausgelöst (one tuple at a time) Trigger auf Tupelebene: Prädikat zur Einschränkung der Anwendung (when) Zugriff auf altes (:old.col) bzw. neues (:new.col) Tupel für delete: nur (:old.col) für insert: nur (:new.col) in when-klausel nur (new.col) bzw. (old.col) VL Datenbanken I 11 39 VL Datenbanken I 11 40

Trigger in Oracle (III) Trigger in Oracle: Beispiel Transaktionsabbruch durch raise_application_error(code, message) Unterscheidung der Art der DML-Anweisung if deleting then... end if; if updating then... end if; if inserting then... end if; Kein Kundenkonto darf unter -100 absinken: create or replace trigger bad_account after insert or update of Kto on KUNDE for each row when (new.kto < -100) begin raise_application_error(-20221, Nicht unter -10000 ); end; VL Datenbanken I 11 41 VL Datenbanken I 11 42