Prof. Dr. T. Kudraß1 Integrität in Datenbanken. Prof. Dr. T. Kudraß2 Unterschied Konsistenz - Integrität Konsistenz beschreibt die Korrektheit der DB-internen.

Slides:



Advertisements
Ähnliche Präsentationen
Object Relational Mapping
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
Folien 2-5, 7-8 © Prof. Dr. Manfred Rössle (FH Aalen)
Das Entity-Relationship-Modell
spezielle Nutzersichten formale Ebene (deskriptive Regeln)
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
SQL::Geschichte/Normen (Übersicht)
Erweiterte Datenmodelle Referentin: Lena Becker HS: Datenbanken vs. Markup Datum:
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],
Das Relationen-Modell
Relationaler Datenbankentwurf (I)
Spezielle Aspekte der Anbindung von Datenbanken im Web.
Das Relationenmodell 1.
Das Entity-Relationship-Modell
Prof. Dr. T. Kudraß1 Das Relationen-Modell. Prof. Dr. T. Kudraß2 Einführung Geht auf klassische Arbeit von Codd zurück (1970) Meistgenutztes Datenmodell.
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
Datenbanken 10: Einfügen, Ändern, Löschen
RelationentheorieObjektorientierte Datenbanken AIFB SS Das ODMG-Objektmodell vs. relationales Modell (1/9) ODMG-Objektmodell Literal_type Atomic_literal.
3.5.2 Fremdschlüssel/ Referentielle Integrität (6/9)
3.5.2 Fremdschlüssel/ Referentielle Integrität (1/9)
Datenbankentwicklung IV-LK
SQL PHP und MySQL Referat von Katharina Stracke und Carina Berning
Relationale Datenbanken III
Betrieb von Datenbanken Marco Skulschus & Marcus Wiederstein Datenmanipulation Lehrbuch, Kapitel 4.
Datenintegrität Integitätsbedingungen Schlüssel
WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #6 SQL (Teil 3)
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)
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 2007/08 Datenbanksysteme Mi 17:00 – 18:30 R Vorlesung #8 Wiederholung: Referentielle Integrität/ Embedded SQL.
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
Structured Query Language
8 Erzeugen und Verwalten von Tabellen Ziele Kennenlernen der wichtigsten Datenbankobjekte Anlegen von Tabellen Datentypen zur Definition von Spalten.
Transaktionsverwaltung
Semantische Integritätsbedingungen  AIFB SS trigger-Klausel (2/5) Beispiel 3-5: Angestellter: (Ang-Nr, Ang-Name, Gehalt,Familienstand, Abt-Bez).
Integritätsbedingungen (Constraints)
7 Verändern von Daten. 9-2 Ziele Beschreibe jeden DML Befehl Einfügen von Zeilen in eine Tabelle Ändern von Zeilen in einer Tabelle Löschen von Zeilen.
Semantische Integritätsbedingungen  AIFB SS Überwachung von Integritätsbedingungen (1/3) Dem DBMS muß mitgeteilt werden, wann eine Integritätsbedingung.
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)
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.
Trigger-abhängige Client Interaktionen (bezüglich Oracle8i)
Datenbank für Skriptenverkauf
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.
SQL Structured Query Language Enzio Thiem. INHALT CREATE TABLE Anweisung Gängige Datentypen Beispiel CREATE TABLE Beispiel CREATE TABLE - erweitert Beispiel.
SQL Basics Schulung –
Vorlesung #7 SQL (Teil 4).
Constraints anlegen und löschen, Data Dictionary Tabellen
 Präsentation transkript:

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

Prof. Dr. T. Kudraß2 Unterschied Konsistenz - Integrität Konsistenz beschreibt die Korrektheit der DB-internen Speicherungsstrukturen, Zugriffspfade und sonstigen Verwaltungsinformation Integrität beschreibt die Korrektheit der Abbildung der Miniwelt in die in der DB gespeicherten Daten –Integrität kann verletzt sein, obwohl die Konsistenz der DB gewahrt bleibt –Ein DBMS kann nur die Konsistenz der Daten sichern Trotzdem spricht man in der DB-Welt von Integritätssicherung (z.B. referentielle Integrität) –Integritätsbedingungen (Constraints) spezifizieren akzeptable DB- Zustände –Änderungen werden nur zurückgewiesen, wenn sie entsprechend der Integritätsbedingungen als falsch erkannt werden

Prof. Dr. T. Kudraß3 Klassifikation von semantischen Integritätsbedingungen Reichweite a)AttributbedingungenGEB-JAHR ist numerisch, 4-stellig b)Bedingungen bezüglich ABT.GEHALTSSUMME < ABT.JAHRESETAT Satzausprägung c)SatztypbedingungenPNR ist eindeutig d)Satztypübergreifende Beding. ABT.GEHALTSSUMME ist Summe aller Angestelltengehälter Zeitpunkt der Überprüfbarkeit - Unverzögert (immediate) sofort bei Änderungsoperation, z.B. a) - Verzögert (deferred) am Transaktionsende, z.B. d) Art der Überprüfbarkeit - Zustandsbedingungen - Zustandsübergangsbedingungen - Beispiele: - Übergang von FAM-STAND von ledig nach geschieden unzulässig - Gehalt darf nicht kleiner werden

Prof. Dr. T. Kudraß4 Beschreibung von Integritätsbedingungen in SQL Constraints werden im Rahmen der Datendefinition angelegt –Deskriptiv: Definition der Bedingung (WAS?), aber nicht der Methode der Überwachung (WIE?) –Unterscheide spalten- vs. tabellenbezogene Constraints Eindeutigkeit von Attributwerten –UNIQUE: Werte in der Spalte/den Spalten sind eindeutig Verbot von Nullwerten –NOT NULL: Spalte muß einen Wert enthalten Schlüsselintegrität –PRIMARY KEY: bedeutet NOT NULL und UNIQUE –Definiert für eine Spalte oder für eine Menge von Spalten auf Tabellenebene Referentielle Integrität –FOREIGN KEY-REFERENCES Constraint Allgemeine benutzerdefinierte Integritätsbedingung –CHECK-Constraint (Regel für Spaltenwerte)

Prof. Dr. T. Kudraß5 Beispiel: Referentielle Integrität Nur Studenten, die in der Tabelle Students erfaßt sind, dürfen sich in Kurse einschreiben. CREATE TABLE Enrolled (sid CHAR (20), cid CHAR(20), grade CHAR (2), PRIMARY KEY (sid,cid), FOREIGN KEY (sid) REFERENCES Students ) Enrolled Students

Prof. Dr. T. Kudraß6 Einhaltung der referentiellen Integrität Betrachte Students und Enrolled; sid in Enrolled ist ein Fremdschlüssel, der Students referenziert Verhalten beim Einfügen Was ist zu tun, wenn ein Tupel in Enrolled eingefügt werden soll mit einer Student-ID, die nicht existiert ? (Zurückweisen!) Verhalten beim Löschen Was ist zu tun, wenn ein Tupel in Students gelöscht werden soll? – Lösche auch alle Tupel in Enrolled, die diesen Studenten referenzieren – Verbiete das Löschen eines Tupels in Students, das noch referenziert wird – Setze sid in Tupeln in Enrolled, die auf den Studenten verweisen, auf eine Default sid (Standardwert) – (In SQL auch möglich: Setze sid in Enrolled, die auf den Studenten verweisen, auf einen speziellen Wert null, bedeutet `unbekannt oder `nicht anwendbar.) Ähnlich bei einer Änderung des Primärschlüssels in Students

Prof. Dr. T. Kudraß7 Referentielle Integrität in SQL/92 SQL/92 unterstützt alle 4 Optionen für Deletes und Updates: – Default ist NO ACTION (delete/update wird zurückgewiesen) – CASCADE (propagiere die Löschung, d.h. entferne alle Tupel, die das gelöschte Tupel referenzieren) – SET NULL / SET DEFAULT (setze Fremdschlüsselwert des referenzierenden Tupels) CREATE TABLE Enrolled (sid CHAR (20), cid CHAR(20), grade CHAR (2), PRIMARY KEY (sid,cid), FOREIGN KEY (sid) REFERENCES Students ON DELETE CASCADE ON UPDATE SET DEFAULT )

Prof. Dr. T. Kudraß8 Rückblick: Schwache Entities Schwaches Entity (weak entity) kann eindeutig identifiziert werden nur über den Primärschlüssel einer anderen (Owner) Entity. Owner Entity und Weak Entity müssen in einer 1:n-Beziehung stehen (ein Owner, mehrere Weak Entities) gehalt name alter name Kinder Angestellter pnr hat (0,*) (1,1) Jedes Entity aus Kinder muß an der Beziehung teilnehmen (total Participation Constraint)

Prof. Dr. T. Kudraß9 Übersetzung schwacher Entity-Menge Schwache Entity-Menge und identifizierende Beziehung werden in eine einzige Tabelle übersetzt – Wenn das Owner-Entity (z.B. der Angestellte) gelöscht wird, müssen auch alle davon abhängigen schwachen Entities gelöscht werden (Existenzabhängigkeit). CREATE TABLE Abhängig ( name CHAR(20), alter INTEGER, pnr CHAR(11) NOT NULL, PRIMARY KEY (name, pnr), FOREIGN KEY (pnr) REFERENCES Angestellter, ON DELETE CASCADE )

Prof. Dr. T. Kudraß10 Weiteres zu Constraints Constraints können bei der Definition durch den Benutzer benannt werden Beispiel: CREATE TABLE Teil ( pk_teil_id INTEGER CONSTRAINT pk_teil PRIMARY KEY (pk_teil_id), tname CHAR(30), ttyp CHAR(10) ) Constraints können - standardmässig unmittelbar (IMMEDIATE) ausgeführt werden oder - auch verzögert am Ende der aufrufenden Transaktion (DEFERRED), global einstellbar durch SET CONSTRAINTS DEFERRED

Prof. Dr. T. Kudraß11 Beispiel für Constraint-Definitionen Teil oberes Teil unteres Teil m n Struktur typ name teil_id menge Instanzendiagramm (Teile-Struktur) ER-Modell Definition einer Stückliste bestandminbestand Lager Zuordnung bezeichnplzort bestand

Prof. Dr. T. Kudraß12 Beispiel-Definition CREATE TABLE Teil ( pk_teil_id INTEGER PRIMARY KEY, tname CHAR(30), ttyp CHAR(10) NOT NULL, tbestand NUMBER CHECK tbestand >= tminbestand tminbestand NUMBER) CREATE TABLE Struktur ( fk_oteil_id INTEGER CONSTRAINT fkrekursiv FOREIGN KEY (fk_oteil_id) REFERENCES Struktur (pk_uteil_id) ON DELETE CASCADE pk_uteil_idINTEGER PRIMARY KEY, CONSTRAINT fkteil2 FOREIGN KEY (pk_uteil_id) REFERENCES Teil (pk_teil_id), menge NUMBER, CONSTRAINT uqstruk UNIQUE (fk_oteil_id, pk_uteil_id) );

Prof. Dr. T. Kudraß13 Beispiel-Definition CREATE TABLE Lager ( pk_lager_id INTEGER PRIMARY KEY, labez CHAR(30), laplz NUMBER, laort CHAR(20) ); CREATE TABLE Lagerzuordnung ( fk_lager_id INTEGER CONSTRAINT fklagerzuordnung1 FOREIGN KEY (fk_lager_id) REFERENCES Lager (pk_uteil_id) fk_teil_idINTEGER CONSTRAINT fklagerzuordnung2 FOREIGN KEY (fk_teil_id) REFERENCES Teil (pk_teil_id), bestand NUMBER, CONSTRAINT pk_lagerzuordnung PRIMARY KEY (fk_lager_id, fk_teil_id) );

Prof. Dr. T. Kudraß14 Beispiel-Szenario Löschen Wirkungsweise des Constraints fkrekursiv: DELETE FROM Struktur WHERE fk_uteil_id =

Prof. Dr. T. Kudraß15 Trigger-Konzept Spezielle Form von gespeicherten Prozeduren (stored procedures), die serverseitig ausgeführt werden Höhere Ausdrucksmächtigkeit als Constraints Aufruf erfolgt nicht explizit sondern bei Eintreten eines bestimmten Ereignisses (automatisches Starten von Operationen) Einsatzgebiete: –Sicherung von Datenintegrität –Zugriffskontrolle –Protokollierung Geschachtelte Ausführung von Triggern möglich Vorteil: DBMS-Funktionalität aus den Anwendungen heraus extrahiert und in der Datenbank zentralisiert (z.B. Integritätssicherung, Zugriffskontrolle) Nachteil: Kann unübersichtlich werden (z.B. Kaskaden)

Prof. Dr. T. Kudraß16 Aufbau von Triggern Trigger-Name Trigger-Zeitpunkt (BEFORE oder AFTER) Trigger-Ereignis (Einfügen, Löschen, Ändern in Tabellen), können mit OR verknüpft werden Trigger-Typ: –FOR EACH ROW: zeilenorientiert (anderenfalls befehlsorientiert) Trigger-Restriktion –Überprüfung einer Bedingung (Prädikat in WHEN-Klausel) Trigger-Rumpf –Aktion, die vom Trigger ausgeführt wird (falls Bedingung erfüllt ist) CREATE TRIGGER trigger-name BEFORE | AFTER INSERT | UPDATE [OF column1, column2,... ] | DELETE ON table-name [ FOR EACH ROW ] WHEN [ predicate ] [ sql-block ]

Prof. Dr. T. Kudraß17 Aufbau von Triggern (Forts.) Trigger-Name –Freie Namenswahl möglich –Namenskonventionen sinnvoll z.B.: Tabellenname/Triggerart/Ereignis Trigger-Zeitpunkt –before: Trigger feuert genau einmal vor Ausführung des Befehls –after: Trigger feuert genau einmal nach Ausführung des Befehls –Bei zeilenorientierten Triggern wird gefeuert vor oder nach jedem durch den Befehl betroffenen Tupel Trigger-Ereignis –Ereignisse können mittels OR verknüpft werden –Im Trigger-Rumpf kann Fallunterscheidung gemacht werden: z.B. if inserting then... if deleting then.... Trigger-Typ –zeilenorientiert (FOR EACH ROW): Ausführung des Triggers pro Datensatz –befehlsorientiert: einmal pro auslösendem Befehl

Prof. Dr. T. Kudraß18 Ausführung von Triggern und Constraints 1.Nach Update-, Insert- oder Delete-Befehl, Setzen aller Sperren und Kennungen 2.Ausführung befehlsorientierter Before-Trigger 3.Für jede angesprochene Zeile wird: a)der jeweilige zeilenorientierte Before-Trigger ausgeführt b)die Datenänderung durchgeführt und anhand der definierten Constraints überprüft soweie c)der jeweilige zeilenorientierte After-Trigger ausgeführt 4.Ausführung des befehlsorientierten After-Triggers 5.Ende der Abarbeitung durch nochmaliges Prüfen der Einhaltung der Constraints, Aufheben der Sperren und Kennungen Im Fehlerfall erfolgt ein Transaktionsabbruch (rollback)

Prof. Dr. T. Kudraß19 Trigger für Zugangskontrolle (Beispiel) CREATE TRIGGER Teil_B BEFORE DELETE OR INSERT OR UPDATE ON Teil WHEN (USER != SYSTEM DECLARE Eingabe_unzulaessig EXCEPTION; BEGIN IF TO_CHAR(SYSDATE, HH24:MI) NOT BETWEEN 08:00 AND 17:00 THEN RAISE Eingabe_unzulaessig EXCEPTION WHEN Eingabe_unzulaessig THEN RAISE_APPLICATION_ERROR (-20001, Nur zwischen 08:00 und 17:00 Uhr Daten eingeben); END; Befehlsorientierter Trigger regelt den Zugang zur Tabelle Teil. Alle Benutzer außer dem SYSTEM-Benutzer dürfen nur zwischen 08:00 und 17:00 Uhr Datensätze anlegen, löschen oder ändern.

Prof. Dr. T. Kudraß20 Protokoll-Trigger (Beispiel) CREATE TABLE T_Protokoll ( benutzerVARCHAR2(30), statement VARCHAR2(10), datumDATE); CREATE TRIGGER Teil_B BEFORE DELETE OR INSERT OR UPDATE ON Teil WHEN (USER != SYSTEM) DECLARE statement varchar2(30); BEGIN IF DELETING THEN :statement := DELETE END IF; IF INSERTING THEN :statement := INSERT END IF; IF UPDATING THEN :statement := UPDATE END IF; INSERT INTO T_Protokoll VALUES (USER, :statement, SYSDATE) END; Protokolliere für jede Aktion auf der Tabelle Teil Benutzernamen, Statement, Datum in einer Protokolltabelle (in Oracle PL-SQL)

Prof. Dr. T. Kudraß21 Änderungs-Trigger (Beispiel) CREATE TRIGGER Lagerzuordnung_A_Update AFTER UPDATE OF bestand ON Lagerzuordnung BEGIN UPDATE Teil T SET T.tbestand = (SELECT SUM(bestand) FROM Lagerzuordnung lz WHERE T.pk_teil_id = lz.fk_teil_id GROUP BY lz.fk_teil_id); END; After-Update-Trigger für den automatischen Update der Spalte tbestand in der Teil-Tabelle (Gesamtbestand eines Teils). Ziel: Jede Bestandsänderung in der Tabelle Lagerzuordnung muß korrekt in die Teil-Tabelle übernommen werden. Sehr ineffiziente Lösung, da stets die gesamte Tabelle Teil aktualisiert wird, auch wenn nur wenige Tupel betroffen.

Prof. Dr. T. Kudraß22 Änderungs-Trigger (Forts. Beispiel) CREATE TRIGGER Lagerzuordnung_AR_Update AFTER UPDATE OF bestand ON Lagerzuordnung FOR EACH ROW DECLARE differenz Lagerzuordnung.bestand%TYPE -- Variable gleichen Typs BEGIN differenz := :NEW.bestand - :OLD.bestand; UPDATE Teil SET T.tbestand = tbestand + :differenz WHERE pk_teil_id = :NEW.fk_teil_id; END; Bessere Lösung für gleiches Problem: Zeilenorientierter Trigger