Effiziente Integritätsprüfung für SQL-Constraints Seminar „Intelligente Datenbanken“ Henning Lehmacher12. Juli 2005.

Slides:



Advertisements
Ähnliche Präsentationen
Object Relational Mapping
Advertisements

ER-Datenmodell und Abfragen in SQL
Folien 2-5, 7-8 © Prof. Dr. Manfred Rössle (FH Aalen)
System J – Compiler – Praktikum: Datenbanksystementwicklung Knut Stolze
MySQL.
Allgemeine Technologien II
Systemüberblick Beispiele: Microsoft Access Oracle Ingres Informix
SendEplanung Datenbank
Anfragesprachen – Dipl. Ing. Ulrich Borchert / FH Merseburg 1/7
SQL als Abfragesprache
IS: Datenbanken, © Till Hänisch 2000 CREATE TABLE Syntax: CREATE TABLE name ( coldef [, coldef] [, tableconstraints] ) coldef := name type [länge], [[NOT]NULL],
Text-Retrieval mit Oracle Vortrag von Andreas Mück & David Diestel.
Otto-von-Guericke-Universität Magdeburg Gamal Kassem 1 Tabellenzeile mit READ lesen READ TABLE itab INDEX idx READ TABLE itab WITH KEY comp1 = f1.... Compn.
Übung Datenbanksysteme WS 2003/ Übung Datenbanksysteme Hierarchische DBMS
Übung Datenbanksysteme UML
Externe Datenstruktur lineare Liste
© 2005 Prof. Dr. Rainer Manthey Seminar IDB SS 05 1 Seminar Intelligente Datenbanken Seminar Prof. Dr. Rainer Manthey Andreas Behrend Institut für Informatik.
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.
1 Kapitel 12: Transaktionsverwaltung. 2 Transaktion Bündelung mehrerer Datenbankoperationen Mehrbenutzersynchronisation Recovery.
Kapitel 9: Integritätssicherung
Erhard Künzel für Info 9. Klasse: Digitale Schule Bayern© Erhard Künzel.
3.5.2 Fremdschlüssel/ Referentielle Integrität (6/9)
SQL in Visual FoxPro. © 1999 TMN-Systemberatung GmbH SQL Historie n SQL - Structured Query Language n In den 70er Jahren von IBM entwickelt n 1986 zum.
Neue DBF und DBC Befehle in Visual FoxPro
Rushmore - Einführung oder wie Sie Fehler vermeiden.
Datenbankentwicklung IV-LK
SQL PHP und MySQL Referat von Katharina Stracke und Carina Berning
Datenbankentwicklung IV-LK
Betrieb von Datenbanken Marco Skulschus & Marcus Wiederstein Datenmanipulation Lehrbuch, Kapitel 4.
WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #6 SQL (Teil 3)
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 2012/13 Datenbanksysteme Mi 15:15 – 16:45 R Vorlesung #11 Transaktionsverwaltung.
WS 2011/12 Datenbanksysteme Mi 15:15 – 16:45 R Vorlesung #10 Transaktionsverwaltung.
SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #7 SQL (Teil 2)
SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #8 SQL (Teil 3)
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #8 SQL (Teil 5)
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 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #7 SQL (Teil 4)
Datenbanksysteme für hörer anderer Fachrichtungen
WS 2011/12 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #5 SQL (Teil 2)
Relationales Datenmodell und DDL
PL/SQL - Kurze Einführung April 2003Übung Data Warehousing: PL/SQL 2 PL/SQL.. ist eine Oracle-eigene, prozedurale Programmiersprache Sämtliche.
Integritätserhaltung und -Überprüfung in deduktiven Datenbanken
Stoppen der Eingabeaufforderung einer Abfrage j drücken Sie dann F5, oder klicken Sie auf Bildschirmpräsentation > Von Beginn an, um den Kurs zu starten.
Structured Query Language
Transaktionsverwaltung
Semantische Integritätsbedingungen  AIFB SS trigger-Klausel (2/5) Beispiel 3-5: Angestellter: (Ang-Nr, Ang-Name, Gehalt,Familienstand, Abt-Bez).
Semantische Integritätsbedingungen  AIFB SS Überwachung von Integritätsbedingungen (1/3) Dem DBMS muß mitgeteilt werden, wann eine Integritätsbedingung.
WS 2014/15 Datenbanksysteme D0 15:15 – 16:45 R Vorlesung #6 SQL (Teil 3)
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #8 SQL (Teil 5)
11 Zugriffskontrolle (Access Control) Ziele Privilegien Rollen GRANT und REVOKE Befehl Privilegien Rollen GRANT und REVOKE Befehl.
Prolog: Datenbanken Inhalt - Überblick - Erstellen einer Datenbank
Trigger-abhängige Client Interaktionen (bezüglich Oracle8i)
Vorlesung Datenbanksysteme vom Anfragebearbeitung  Logische Optimierung.
Datenbank für Skriptenverkauf
PHPmyadmin Maya Kindler 6c.
WS 2014/15 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #9 SQL Zusammenfassung.
Datenbanken erstellen mit PostgreSQL
Datenbanken abfragen mit SQL
SQL Basics Schulung –
Vorlesung #7 SQL (Teil 4).
Indexierung Oracle: indexes Indexierung.
 Präsentation transkript:

Effiziente Integritätsprüfung für SQL-Constraints Seminar „Intelligente Datenbanken“ Henning Lehmacher12. Juli 2005

2 Henning Lehmacher - Effiziente Integritätsprüfung für SQL-ConstraintsÜbersichtÜbersicht Teil 1: Einführung Überprüfung von Constraints Simulation durch Trigger Constraints vs. Trigger Teil 2: Soundcheck-Verfahren Umwandlung: Constraints  effiziente Trigger

3 Henning Lehmacher - Effiziente Integritätsprüfung für SQL-ConstraintsQuellenQuellen Hendrik Decker: Soundcheck for SQL I.V. Ramakrishnan (Ed.): PADL2001, LNCS Springer-Verlag, 2001 Hendrik Decker: Integrity Enforcement on Deductive Databases Larry Kerschberg (Ed.): Expert Database Systems. The Benjamin/Cummings Publishing Company, 1987 Andreas Behrend, Rainer Manthey, Birgit Pieper: An Amateur‘s Introduction to Integrity Constraints and Integrity Checking in SQL Andreas Heuer u.a. (Eds.): Datenbanksysteme in Büro, Technik und Wissenschaft (BTW), 9. GI-Fachtagung, Oldenburg, März 2001, Proceedings. Informatik Aktuell Springer 2001

4 Henning Lehmacher - Effiziente Integritätsprüfung für SQL-Constraints Teil I: Einführungsbeispiel Integritätsbedingung: Ein Kennzeichen ist nicht sowohl einem PKW als auch einem LKW zugeordnet KennzeichenFabrikat BN-AB-1234VW... KennzeichenAchsen SU-CD pkwlkw

5 Henning Lehmacher - Effiziente Integritätsprüfung für SQL-ConstraintsAssertionsAssertions Assertions Table Constraints Column Constraints Domain Constraints Erinnerung:

6 Henning Lehmacher - Effiziente Integritätsprüfung für SQL-Constraints Umwandlung in Assertion CREATE ASSERTION fahrz1 CHECK (NOT EXISTS (SELECT * FROM pkw, lkw WHERE pkw.kennzeichen = lkw.kennzeichen)); Problem: Kein gängiges DBMS unterstützt Assertions / CHECK-Constraints über mehrere Tabellen. Wo liegen die Schwierigkeiten? Ein Kennzeichen ist nicht sowohl einem PKW als auch einem LKW zugeordnet

7 Henning Lehmacher - Effiziente Integritätsprüfung für SQL-Constraints Überprüfung von Constraints „Naive“ Handhabung durch ein DBMS CREATE ASSERTION fahrz1 CHECK (NOT EXISTS (SELECT * FROM pkw, lkw WHERE pkw.kennzeichen = lkw.kennzeichen));  O( |pkw| * |lkw| ) Vergleiche Überprüfe bei jeder Änderung von pkw und lkw die CHECK-Bedingung (führe die SELECT-Anfrage aus) CHECK pkw lkw

8 Henning Lehmacher - Effiziente Integritätsprüfung für SQL-Constraints CREATE TRIGGER ins_pkw_1 BEFORE INSERT ON pkw REFERENCING NEW AS inserted WHEN (EXISTS (SELECT * FROM lkw WHERE inserted.kennzeichen = lkw.kennzeichen)) BEGIN ROLLBACK END; CREATE TRIGGER ins_lkw_1 BEFORE INSERT ON lkw REFERENCING NEW AS inserted WHEN (EXISTS (SELECT * FROM pkw WHERE inserted.kennzeichen = pkw.kennzeichen)) BEGIN ROLLBACK END; CREATE TRIGGER ins_pkw_1 BEFORE INSERT ON pkw REFERENCING NEW AS inserted WHEN (EXISTS (SELECT * FROM lkw WHERE inserted.kennzeichen = lkw.kennzeichen)) BEGIN ROLLBACK END; CREATE TRIGGER ins_lkw_1 BEFORE INSERT ON lkw REFERENCING NEW AS inserted WHEN (EXISTS (SELECT * FROM pkw WHERE inserted.kennzeichen = pkw.kennzeichen)) BEGIN ROLLBACK END; Simulation durch Trigger Zusätzlich noch zwei Update-Trigger (von nun an nur noch Einfügen/Löschen berücksichtigt) ! DELETE-Trigger sind (in diesem Bsp.) nicht erforderlich! Ein Kennzeichen ist nicht sowohl einem PKW als auch einem LKW zugeordnet

9 Henning Lehmacher - Effiziente Integritätsprüfung für SQL-Constraints CREATE TRIGGER ins_pkw_1 BEFORE INSERT ON pkw REFERENCING NEW AS inserted WHEN (EXISTS (SELECT * FROM lkw WHERE inserted.kennzeichen = lkw.kennzeichen)) BEGIN ROLLBACK END; CREATE TRIGGER ins_lkw_1 BEFORE INSERT ON lkw REFERENCING NEW AS inserted WHEN (EXISTS (SELECT * FROM pkw WHERE inserted.kennzeichen = pkw.kennzeichen)) BEGIN ROLLBACK END; CREATE TRIGGER ins_pkw_1 BEFORE INSERT ON pkw REFERENCING NEW AS inserted WHEN (EXISTS (SELECT * FROM lkw WHERE inserted.kennzeichen = lkw.kennzeichen)) BEGIN ROLLBACK END; CREATE TRIGGER ins_lkw_1 BEFORE INSERT ON lkw REFERENCING NEW AS inserted WHEN (EXISTS (SELECT * FROM pkw WHERE inserted.kennzeichen = pkw.kennzeichen)) BEGIN ROLLBACK END;PerformancePerformance O( |inserted| * |pkw| ) bzw. O( |inserted| * |lkw| ) Vergleiche bei Einfügungen Bei jeder Änderung O( |pkw| * |lkw| ) Vergleiche Im Gegensatz zu: Vergleiche bei Einfügeoperationen auf pkw oder lkw die neu eingefügten Zeilen mit der jeweils anderen Tabelle

10 Henning Lehmacher - Effiziente Integritätsprüfung für SQL-Constraints Trigger eher imperativ Optimierungsarbeit liegt beim Ersteller des SQL-Codes wenig Optimierungs- möglichkeiten für DBMS unübersichtlicher Constraints vs. Trigger CHECK-Constraints rein deklarativ Optimierungsarbeit liegt beim DBMS hoher Optimierungsbedarf intuitiver Optimierender Compiler

11 Henning Lehmacher - Effiziente Integritätsprüfung für SQL-Constraints Soundcheck-Verfahren Teil II: Das Soundcheck-Verfahren CHECK-Constraint Effizienter Trigger I.Differenz zwischen altem und neuem Zustand bestimmen II.„Idle Updates“ überspringen III.Relevante Integr.-Bedingungen bestimmen IV.Relevante Integr.-Bedingungen spezialisieren V.Spezialisierte Integr.-Bedingungen optimieren VI. Optimierten Trigger überprüfen

12 Henning Lehmacher - Effiziente Integritätsprüfung für SQL-Constraints Phase 1 Phase 1: Differenz zwischen altem und neuem Zustand bestimmen KennzeichenFabrikat BN-AB-1234VW K-VB-1000Ford BM-W-999BMW SU-RF-4545Fiat inserted_pkw BM-W-999BMW SU-RF-4545Fiat + KennzeichenFabrikat BN-AB-1234VW K-VB-1000Ford BM-W-999BMW SU-RF-4545Fiat K-VB-1000Ford BM-W-999BMW deleted_pkw -- Differenztabelle

13 Henning Lehmacher - Effiziente Integritätsprüfung für SQL-Constraints Phase 1 Bei Constraints über Sichten: Effektive Änderungen an den Sichten bestimmen Wichtig für deduktive Datenbanken, würde hier jedoch zu weit führen  Annahme: Keine Constraints über Sichten! Constr. ! !

14 Henning Lehmacher - Effiziente Integritätsprüfung für SQL-Constraints Phase 2 Phase 2: „Idle Updates“ überspringen UPDATE pkw SET fabrikat = `Opel` WHERE kennzeichen = `BN-AA-1234`; kann nicht verletzt werden, da kennzeichen nicht verändert wird Allgemein: Überprüfung, ob ein Update eine „tatsächliche“ Änderung bewirkt, kann fast genauso aufwendig sein wie Überprüfung des Constraints selbst.  Updates / Doppeleinfügungen werden nicht gesondert betrachtet („Update := Löschen + Einfügen“) Ein Kennzeichen ist nicht sowohl einem PKW als auch einem LKW zugeordnet

15 Henning Lehmacher - Effiziente Integritätsprüfung für SQL-Constraints Phase 3: Relevante Integritätsbedingungen bestimmen Phase 3 Constraints Differenztabellen inserteddeleted ? Welche Constraints können verletzt werden? ?

16 Henning Lehmacher - Effiziente Integritätsprüfung für SQL-Constraints Phase 3 KennzeichenFabrikat BN-D-007VW... BM-W-999BMW K-UH-123BMW KennzeichenAchsen K-VB NOT... CHECK ( NOT EXISTS (SELECT * FROM pkw, lkw WHERE pkw.kennzeichen = lkw.kennzeichen)); -- KennzeichenFabrikat BN-D-007VW... KennzeichenAchsen K-VB auf jeden Fall konsistenter DB-Zustand! Kann nicht verletzt werden ! Konsistenter DB-Zustand

17 Henning Lehmacher - Effiziente Integritätsprüfung für SQL-Constraints Phase 3 KennzeichenFabrikat BN-D-007VW... BM-W-999BMW K-UH-123BMW KennzeichenAchsen K-VB NOT... CHECK ( NOT EXISTS (SELECT * FROM pkw, lkw WHERE pkw.kennzeichen = lkw.kennzeichen)); + + Konsistenter DB-Zustand KennzeichenFabrikat BN-D-007VW... KennzeichenAchsen K-VB könnte Konsistenz verletzen Kann u.U. verletzt werden ! BM-W-999BMW K-UH-123BMW

18 Henning Lehmacher - Effiziente Integritätsprüfung für SQL-Constraints Phase 3 Formal: NOT EXISTS (SELECT * FROM pkw, lkw WHERE pkw.kennzeichen = lkw.kennzeichen) atom. Prädikate negativer Polarität Negation-innermost Form Atomare Prädikate sind von „negativer/positiver Polarität“ wenn sie in der Negation-innermost Form negiert bzw. nicht negiert auftreten Prädikatenlogik (Bereichskalkül) ¬ ∃ X [ pkw(X,_) ∧ lkw(X,_) ] Verschiebe Negationen möglichst weit nach innen! ∀ X [ ¬ pkw(X,_) ∨ ¬ lkw(X,_) ]

19 Henning Lehmacher - Effiziente Integritätsprüfung für SQL-Constraints Phase 3 Eine Änderung ist dann relevant, wenn sie auf ein atomares Prädikat „matcht“ und entgegengesetzte Polarität besitzt + t(k,a) -- v(n,p) Muss für alle atom. Prädikate untersucht werden! (Abbruch falls Matching gefunden wurde) X/kX/p Substitution + t(k,a) -- v(n,p) ∀ X [ ¬ t(X,a) ∨ ¬ t(X,b) ] ∃ X [ ¬ u(X,m) ∨ v (n,X) ]

20 Henning Lehmacher - Effiziente Integritätsprüfung für SQL-Constraints Bsp.: ∃ X‘ [ inserted_pkw(X‘,_) ∧ ¬ ∀ X [ ¬ pkw(X,_) ∨ ¬ lkw(X,_) ] ] ∃ X‘ [ inserted_lkw(X‘,_) ∧ ¬ ∀ X [ ¬ pkw(X,_) ∨ ¬ lkw(X,_) ] ] Phase 3 Erstelle für jedes atom. Prädikat t(x 1,...,x n, k 1,...,k m ) der Constraint eine Formel… falls t neg. Polarität hat falls t pos. Polarität hat var.const. Integr.-Bedingung oder Wann ist die Integritätsbedingung verletzt? Auswertung

21 Henning Lehmacher - Effiziente Integritätsprüfung für SQL-Constraints Phase 4 Phase 4: Relevante Integr.-Bedingungen spezialisieren... CHECK (NOT EXISTS (SELECT * FROM pkw, lkw WHERE pkw.kennzeichen = lkw.kennzeichen))... CHECK (NOT EXISTS (SELECT * FROM inserted_pkw, lkw WHERE inserted_pkw.kennzeichen = lkw.kennzeichen)) Spezialisierung Relevante Änderung von pkw BN-AA-1111Volvo... inserted_pkw +

22 Henning Lehmacher - Effiziente Integritätsprüfung für SQL-Constraints Phase 4 Funktioniert das immer?... CHECK (NOT EXISTS (SELECT * FROM pkw, lkw WHERE pkw.kennzeichen = lkw.kennzeichen))... CHECK (EXISTS (SELECT * FROM deleted_pkw, lkw WHERE deleted_pkw.kennzeichen = lkw.kennzeichen)) Spezialisierung ? BN-AA-1111Volvo deleted_pkw -- KennzeichenFabrikat K-VB-110VW BN-AA-1111Volvo KennzeichenAchsen K-VB-1104 BN-AA Bei Existenzaussagen: Betrachtung ganzer Tabelle unvermeidlich! OK

23 Henning Lehmacher - Effiziente Integritätsprüfung für SQL-Constraints Phase 4 Und hier?... NOT EXISTS ( SELECT... WHERE EXISTS (SELECT... WHERE NOT EXISTS... ) AND NOT EXISTS (... WHERE EXISTS... ) );... NOT EXISTS ( SELECT... WHERE EXISTS (SELECT... WHERE NOT EXISTS... ) AND NOT EXISTS (... WHERE EXISTS... ) ); Existenz- oder Universalaussage?

24 Henning Lehmacher - Effiziente Integritätsprüfung für SQL-Constraints Phase 4 Formal: Eine Variable ist ∃ -dominiert wenn links von ihr ein ∃ auftaucht. ∀ X [ ∃ Y [¬p(X,Y) ∧ ∀ Z [ q(Y,Z) ] ] ] ∃ -dominiert nicht ∃ -dominiert Variablen, die in der Negation-innermost Form nicht ∃ -dominiert sind, können spezialisiert werden!

25 Henning Lehmacher - Effiziente Integritätsprüfung für SQL-Constraints Bsp.: Phase 3: ∃ X‘[ inserted_pkw(X‘,_) ∧ ¬ ∀ X [ ¬pkw(X,_) ∨ ¬lkw(X,_) ] ] Phase 4: ∃ X [ inserted_pkw(X,_) ∧ ¬ ( ¬pkw(X,_) ∨ ¬lkw(X,_) ) ] Phase 4 Wann ist die Integr.-Bedingung verletzt? (Formel für atom. Prädikat mit neg. Polarität) Phase 3: ∃ x 1 ‘,...,x n ‘ [inserted_t(x 1 ‘,...,x n ‘,k 1,...,k m ) ∧ ¬IC ] nicht ∃ -dominiert ∃ -dominiert Spezialisierte IC ohne ∃ oder ∀ vor den x 1,...,x s Constraint Spezialisierte Constraint Phase 4: ∃ x 1,...,x s [ ∃ x s+1 ‘,...,x n ‘ [inserted_t(x 1,...,x s,x s+1 ‘,...,x n ‘,k 1,...,k m ) ] ∧ ¬IC S ]

26 Henning Lehmacher - Effiziente Integritätsprüfung für SQL-Constraints Phase 4 ∃ X [ inserted_pkw(X,_) ∧ ( pkw(X,_) ∧ lkw(X,_) ) ]... EXISTS (SELECT * FROM inserted_pkw, pkw, lkw WHERE inserted_pkw.kennzeichen = pkw.kennzeichen AND inserted_pkw.kennzeichen = lkw.kennzeichen) Überprüfung in der Praxis: Lies Belegungen für X aus inserted_pkw … … und prüfe, ob sie in pkw und lkw vorkommen

27 Henning Lehmacher - Effiziente Integritätsprüfung für SQL-Constraints Phase 5 ∃ X [ inserted_pkw(X,_) ∧ pkw(X,_) ∧ lkw(X,_) ]... EXISTS (SELECT * FROM inserted_pkw, pkw, lkw WHERE inserted_pkw.kennzeichen = pkw.kennzeichen AND inserted_pkw.kennzeichen = lkw.kennzeichen) Phase 5: Spezialisierte Integr.-Bedingungen optimieren ∃ X [ inserted_pkw(X,_) ∧ lkw(X,_) ) ]... EXISTS (SELECT * FROM inserted_pkw, lkw WHERE inserted_pkw.kennzeichen = lkw.kennzeichen) nach Einfügen: inserted_pkw  pkw  Abfrage von pkw ist überflüssig

28 Henning Lehmacher - Effiziente Integritätsprüfung für SQL-Constraints Umwandlung in Trigger Constraint ist verletzt wenn...: ∃ X [ inserted_pkw(X,_) ∧ lkw(X,_) ] ∃ X [ inserted_lkw(X,_) ∧ pkw(X,_) ] EXISTS (SELECT * FROM inserted_pkw, lkw WHERE inserted_pkw.kennzeichen = lkw.kennzeichen) EXISTS (SELECT * FROM inserted_lkw, pkw WHERE inserted_lkw.kennzeichen = pkw.kennzeichen) SQL

29 Henning Lehmacher - Effiziente Integritätsprüfung für SQL-Constraints Umwandlung in Trigger CREATE TRIGGER ins_pkw_1 BEFORE INSERT ON pkw REFERENCING NEW AS inserted WHEN (EXISTS (SELECT * FROM lkw WHERE inserted.kennzeichen = lkw.kennzeichen)) BEGIN ROLLBACK END; CREATE TRIGGER ins_lkw_1 BEFORE INSERT ON lkw REFERENCING NEW AS inserted WHEN (EXISTS (SELECT * FROM pkw WHERE inserted.kennzeichen = pkw.kennzeichen)) BEGIN ROLLBACK END; CREATE TRIGGER ins_pkw_1 BEFORE INSERT ON pkw REFERENCING NEW AS inserted WHEN (EXISTS (SELECT * FROM lkw WHERE inserted.kennzeichen = lkw.kennzeichen)) BEGIN ROLLBACK END; CREATE TRIGGER ins_lkw_1 BEFORE INSERT ON lkw REFERENCING NEW AS inserted WHEN (EXISTS (SELECT * FROM pkw WHERE inserted.kennzeichen = pkw.kennzeichen)) BEGIN ROLLBACK END; inserted_pkw EXISTS (SELECT * FROM inserted_pkw, lkw WHERE inserted_pkw.kennzeichen = lkw.kennzeichen) EXISTS (SELECT * FROM inserted_lkw, pkw WHERE inserted_lkw.kennzeichen = pkw.kennzeichen)

30 Henning Lehmacher - Effiziente Integritätsprüfung für SQL-ConstraintsZusammenfassungZusammenfassung Hoher Optimierungsbedarf bei Überprüfung von CHECK-Constraints Constraints können durch Trigger simuliert werden Soundcheck-Verfahren wandelt beliebige Constraints in effiziente Trigger um Optimierungsmöglichkeiten (z.B.): Bestimmung der Relevanz von Änderungen Spezialisierung von Anfragen in der Constraint