2x2 - DBAI

Werbung
Datenmodellierung
Datenmodellierung
Acknowledgments
Datenmodellierung
VU 184.685, WS 2015
Datenintegrität
Die Folien sind eine kleine Erweiterung der Folien von Katrin Seyr.
Sebastian Skritek
Institut für Informationssysteme
Technische Universität Wien
Sebastian Skritek
Seite 1
Datenmodellierung
1. Überblick
Sebastian Skritek
Datenmodellierung
Seite 2
2. Datenmanipulationssprache
Datenmanipulationssprache – Tupel Einfügen
Überblick
Einfügen von Tupeln in eine angelegte Tabelle
1
Nachtrag: SQL als Datenmanipulationssprache
2
Überblick
3
Integritätsbedingungen
4
Statische Integritätsbedingungen
5
Referentielle Integrität
Professoren ( PersNr : integer , Name : varchar (30) ,
Rang : character (2) , Raum : integer )
• Gewährleistung
• Referentielle Integrität in SQL
• Zyklische Abhängigkeiten
6
Trigger
Sebastian Skritek
Seite 3
Sebastian Skritek
Seite 4
Datenmodellierung
2. Datenmanipulationssprache
Datenmodellierung
Datenmanipulationssprache – Tupel Einfügen
2. Datenmanipulationssprache
Datenmanipulationssprache – Tupel Einfügen
Einfügen von Tupeln in eine angelegte Tabelle
Einfügen von Tupeln in eine angelegte Tabelle
Professoren ( PersNr : integer , Name : varchar (30) ,
Rang : character (2) , Raum : integer )
Professoren ( PersNr : integer , Name : varchar (30) ,
Rang : character (2) , Raum : integer )
Beispiel
Beispiel
Einfügen der Professorin Curie:
Einfügen der Professorin Curie:
insert into Professoren
values (2136 , ’ Curie ’ , ’ C4 ’ , 36);
insert into Professoren
values (2136 , ’ Curie ’ , ’ C4 ’ , 36);
Einfügen mehrerer Professoren:
insert into Professoren
values (2125 , ’ Sokrates ’ , ’ C4 ’ , 226) ,
(2126 , ’ Russel ’ , ’ C4 ’ , 232);
Sebastian Skritek
Datenmodellierung
Seite 4
2. Datenmanipulationssprache
Sebastian Skritek
Datenmodellierung
Seite 4
2. Datenmanipulationssprache
Datenmanipulationssprache – Tupel Einfügen
Datenmanipulationssprache – Tupel Einfügen
Das Ergebnis einer Anfrage in eine Tabelle eintragen:
Das Ergebnis einer Anfrage in eine Tabelle eintragen:
Beispiel
Beispiel
Eintragen aller Studenten zur Vorlesung ‘Logik’:
Eintragen aller Studenten zur Vorlesung ‘Logik’:
hören ( MatrNr , VorlNr )
Studenten ( MatrNr , Name , Sem )
Vorlesungen ( VorlNr , Titel , SWS , PersNr )
hören ( MatrNr , VorlNr )
Studenten ( MatrNr , Name , Sem )
Vorlesungen ( VorlNr , Titel , SWS , PersNr )
insert into hören
Sebastian Skritek
insert into hören
select MatrNr , VorlNr
from Studenten , Vorlesungen
where Titel = ’ Logik ’;
Seite 5
Sebastian Skritek
Seite 5
Datenmodellierung
2. Datenmanipulationssprache
Datenmodellierung
Datenmanipulationssprache – Tupel Löschen
2. Datenmanipulationssprache
Datenmanipulationssprache – Tupel Löschen
Auflisten der zu löschenden Tupeln:
Auflisten der zu löschenden Tupeln:
Beispiel
Beispiel
Löschen des Herrn Kant aus der Professorentabelle:
Löschen des Herrn Kant aus der Professorentabelle:
delete from Professoren
values (2137 , ’ Kant ’ , ’ C4 ’ , 7);
delete from Professoren
values (2137 , ’ Kant ’ , ’ C4 ’ , 7);
Lösche alle Tupel die eine Bedingung erfüllen:
Lösche alle Tupel die eine Bedingung erfüllen:
Beispiel
Beispiel
Löschen des Herrn Kant aus der Professorentabelle:
Löschen des Herrn Kant aus der Professorentabelle:
delete from Professoren where PersNr =2137;
delete from Professoren where PersNr =2137;
delete from Professoren where PersNr < 2137;
Sebastian Skritek
Datenmodellierung
Seite 6
2. Datenmanipulationssprache
Sebastian Skritek
Datenmodellierung
Datenmanipulationssprache – Tupel Löschen
Seite 6
2. Datenmanipulationssprache
Datenmanipulationssprache – Tupel Löschen
Beispiel
Beispiel
Lösche alle Studenten, die die Vorlesung ‘Logik’ besuchen
Lösche alle Studenten, die die Vorlesung ‘Logik’ besuchen
hören ( MatrNr , VorlNr )
Studenten ( MatrNr , Name , Sem )
Vorlesungen ( VorlNr , Titel , SWS , PersNr )
hören ( MatrNr , VorlNr )
Studenten ( MatrNr , Name , Sem )
Vorlesungen ( VorlNr , Titel , SWS , PersNr )
delete from Studenten
where MatrNr in (
select MatrNr
from hören , Vorlesungen
where hören . VorlNr = Vorlesungen . VorlNr and
Titel = ’ Logik ’ );
Sebastian Skritek
Seite 7
Sebastian Skritek
Seite 7
Datenmodellierung
2. Datenmanipulationssprache
Datenmodellierung
Datenmanipulationssprache – Tupel Verändern
2. Datenmanipulationssprache
Datenmanipulationssprache – Tupel Verändern
Beispiel
Erhöhen der Semesteranzahl aller Studierender um 1:
update Studenten
set Semester = Semester + 1;
Sebastian Skritek
Datenmodellierung
Seite 8
2. Datenmanipulationssprache
Sebastian Skritek
Datenmodellierung
Datenmanipulationssprache – Tupel Verändern
Seite 8
2. Datenmanipulationssprache
Datenmanipulationssprache – Tupel Verändern
Beispiel
Erhöhen der Semesteranzahl aller Studierender um 1:
update Studenten
set Semester = Semester + 1;
Beispiel
Alle C3 Professoren mit einer Personalnummer über 2500 erhalten den
Rang C2
update Professoren
set Rang = ’ C2 ’
where Rang = ’ C3 ’ and PersNr > 2500;
Sebastian Skritek
Seite 8
Sebastian Skritek
Seite 9
Datenmodellierung
2. Datenmanipulationssprache
Datenmodellierung
Datenmanipulationssprache – Tupel Verändern
2. Datenmanipulationssprache
Datenmanipulationssprache – Tupel Verändern
Beispiel
Beispiel
Professoren ( PersNr : integer , Name : varchar (30) ,
Rang : character (2) , Raum : integer ,
Lehrbelastung: integer )
Vorlesungen ( VorlNr , Titel , SWS , PersNr )
Professoren ( PersNr : integer , Name : varchar (30) ,
Rang : character (2) , Raum : integer ,
Lehrbelastung: integer )
Vorlesungen ( VorlNr , Titel , SWS , PersNr )
Trage für jeden Professor seine Lehrbelastung (=Summe SWS) ein
Trage für jeden Professor seine Lehrbelastung (=Summe SWS) ein
update Professoren
set Lehrbelastung = (
select sum ( SWS )
from Vorlesungen v
where v . PersNr = Professoren . PersNr )
(Anmerkung: Lehrbelastung sollte so nicht gespeichert werden)
Sebastian Skritek
Seite 9
Datenmodellierung
3. Überblick
Sebastian Skritek
Datenmodellierung
Seite 9
4. Integritätsbedingungen
Integritätsbedingungen
Überblick
Datenbankmanagementsysteme sind für die Erhaltung der
Datenkonsistenz zuständig.
1
Nachtrag: SQL als Datenmanipulationssprache
2
Überblick
3
Integritätsbedingungen
4
Statische Integritätsbedingungen
5
Referentielle Integrität
• Gewährleistung
• Referentielle Integrität in SQL
• Zyklische Abhängigkeiten
6
Trigger
Sebastian Skritek
Seite 10
Sebastian Skritek
Seite 11
Datenmodellierung
4. Integritätsbedingungen
Datenmodellierung
Integritätsbedingungen
4. Integritätsbedingungen
Integritätsbedingungen
Datenbankmanagementsysteme sind für die Erhaltung der
Datenkonsistenz zuständig.
Datenbankmanagementsysteme sind für die Erhaltung der
Datenkonsistenz zuständig.
Konsistenzerhaltung nach Systemfehler (Recovery) bzw. bei
Mehrbenutzerbetrieb (Concurrency Control) → LVA
Datenbanksysteme.
Konsistenzerhaltung nach Systemfehler (Recovery) bzw. bei
Mehrbenutzerbetrieb (Concurrency Control) → LVA
Datenbanksysteme.
Hier (Kapitel 5, 6): semantische Integritätsbedingungen, die aus den
Eigenschaften der modellierten Miniwelt abgeleitet werden.
Sebastian Skritek
Datenmodellierung
Seite 11
4. Integritätsbedingungen
Sebastian Skritek
Datenmodellierung
Integritätsbedingungen
Seite 11
4. Integritätsbedingungen
Integritätsbedingungen
Integritätsbedingungen werden eingeteilt in:
Datenbankmanagementsysteme sind für die Erhaltung der
Datenkonsistenz zuständig.
statische Integritätsbedingungen: Bedingungen (constraints) an den
Zustand der Datenbasis, die in jedem Zustand der
Datenbank erfüllt sein müssen.
Konsistenzerhaltung nach Systemfehler (Recovery) bzw. bei
Mehrbenutzerbetrieb (Concurrency Control) → LVA
Datenbanksysteme.
Hier (Kapitel 5, 6): semantische Integritätsbedingungen, die aus den
Eigenschaften der modellierten Miniwelt abgeleitet werden.
Beispiele
MatrNr muss eindeutig sein; - in AT: 7 stellig,
die ersten zwei Ziffern leiten sich aus dem Immatrikulationsjahr ab,
die nächsten zwei Ziffern codieren die Immatrikulationsuniversität.
PersNr ist eine 4-stellige Zahl
Sebastian Skritek
Seite 11
Sebastian Skritek
Seite 12
Datenmodellierung
4. Integritätsbedingungen
Datenmodellierung
Integritätsbedingungen
4. Integritätsbedingungen
Integritätsbedingungen
Integritätsbedingungen werden eingeteilt in:
Integritätsbedingungen werden eingeteilt in:
statische Integritätsbedingungen: Bedingungen (constraints) an den
Zustand der Datenbasis, die in jedem Zustand der
Datenbank erfüllt sein müssen.
statische Integritätsbedingungen: Bedingungen (constraints) an den
Zustand der Datenbasis, die in jedem Zustand der
Datenbank erfüllt sein müssen.
Beispiele
Beispiele
Professoren haben Rang C2, C3, C4,
Professoren haben Rang C2, C3, C4,
Matrikelnummer der Studierenden ist eindeutig
Matrikelnummer der Studierenden ist eindeutig
Anmeldung zur Übung nur bei aufrechter Inskription
Anmeldung zur Übung nur bei aufrechter Inskription
dynamische Integritätsbedingungen: Bedingungen an
Zustandsänderungen in der Datenbank.
Sebastian Skritek
Datenmodellierung
Seite 12
4. Integritätsbedingungen
Sebastian Skritek
Datenmodellierung
Seite 12
4. Integritätsbedingungen
4.1. Statische Integritätsbedingungen
Integritätsbedingungen
Integritätsbedingungen
Integritätsbedingungen werden eingeteilt in:
statische Integritätsbedingungen: Bedingungen (constraints) an den
Zustand der Datenbasis, die in jedem Zustand der
Datenbank erfüllt sein müssen.
Bekannte implizite Anforderungen an die Datenintegrität
Schlüssel: müssen innerhalb einer Relation eindeutig sein.
Beispiele
Beziehungskardinalitäten: die im ER Modell definierten Kardinalitäten
werden im Relationenmodell so umgesetzt, dass davon
abweichende Daten nicht eingegeben werden können.
Professoren haben Rang C2, C3, C4,
Matrikelnummer der Studierenden ist eindeutig
Attributdomänen: durch die Festlegung von Wertebereichen werden
Bedingungen an die Daten gestellt.
Anmeldung zur Übung nur bei aufrechter Inskription
Inklusion bei Generalisierung: Entities der Untertypen müssen auch in
Obertypen enthalten sein
dynamische Integritätsbedingungen: Bedingungen an
Zustandsänderungen in der Datenbank.
Beispiel
Professoren dürfen nur befördert werden
Sebastian Skritek
Seite 12
Sebastian Skritek
Seite 13
Datenmodellierung
4. Integritätsbedingungen
4.2. Statische Integritätsbedingungen in SQL
Datenmodellierung
4. Integritätsbedingungen
4.2. Statische Integritätsbedingungen in SQL
Statische Integritätsbedingungen in SQL
Statische Integritätsbedingungen in SQL
Schlüsselkandidaten: unique(Attributliste)
Schlüsselkandidaten: unique(Attributliste)
Primärschlüssel: primary key(Attributliste)
Primärschlüssel: primary key(Attributliste)
Fremdschlüssel: foreign key(Attributliste)
Fremdschlüssel: foreign key(Attributliste)
Keine Nullwerte erlaubt: not null
Defaultwert angeben: default
Keine Nullwerte erlaubt: not null
Defaultwert angeben: default
Beispiel
create table Studenten (
MatrNr
integer primary key ,
Name
varchar (30) not null ,
Semester integer default 1);
Sebastian Skritek
Datenmodellierung
Seite 14
4. Integritätsbedingungen
4.2. Statische Integritätsbedingungen in SQL
Statische Integritätsbedingungen in SQL
Sebastian Skritek
Datenmodellierung
Seite 14
4. Integritätsbedingungen
4.2. Statische Integritätsbedingungen in SQL
Statische Integritätsbedingungen in SQL
Überprüfung allgemeiner statischer Integritätsbedingungen mittels
check-Klausel, gefolgt von einer Bedingung
Überprüfung allgemeiner statischer Integritätsbedingungen mittels
check-Klausel, gefolgt von einer Bedingung
Auswertung der check-Klausel bei Änderung/Einfügung in die Tabelle
Auswertung der check-Klausel bei Änderung/Einfügung in die Tabelle
Änderungen auf einer Tabelle werden nur zugelassen, wenn check zu
true auswertet.
Änderungen auf einer Tabelle werden nur zugelassen, wenn check zu
true auswertet.
Bedingungen können beliebig komplex sein, auch eine Anfrage enthalten
- Achtung: nur sehr rudimentär implementiert!
Bedingungen können beliebig komplex sein, auch eine Anfrage enthalten
- Achtung: nur sehr rudimentär implementiert!
Beispiel
create table Studenten
( MatrNr
integer primary key ,
Name
varchar (30) not null ,
Semester integer default 1
check ( Semester between 1 and 13));
Sebastian Skritek
Seite 15
Sebastian Skritek
Seite 15
Datenmodellierung
4. Integritätsbedingungen
4.2. Statische Integritätsbedingungen in SQL
Statische Integritätsbedingungen in SQL
Datenmodellierung
5. Referentielle Integrität
Referentielle Integrität
Beispiel
Schlüssel identifizieren ein Tupel einer Relation.
Studenten können sich nur über Vorlesungen prüfen lassen, die sie vorher
gehört haben.
Fremdschlüssel verweisen auf Tupel einer in Beziehung stehenden
Relation.
create table prüfen
( MatrNr integer ,
VorlNr integer ,
PersNr integer ,
Note
numeric (2 ,1)
check ( Note between 0.7 and 5.0) ,
primary key ( MatrNr , VorlNr ) ,
constraint vorherhören check
( exists ( select * from hören h
where h . VorlNr = prüfen . VorlNr and
h . MatrNr = prüfen . MatrNr )));
Sebastian Skritek
Datenmodellierung
Seite 16
5. Referentielle Integrität
Sebastian Skritek
Datenmodellierung
Referentielle Integrität
Seite 17
5. Referentielle Integrität
Referentielle Integrität
Schlüssel identifizieren ein Tupel einer Relation.
Schlüssel identifizieren ein Tupel einer Relation.
Fremdschlüssel verweisen auf Tupel einer in Beziehung stehenden
Relation.
Fremdschlüssel verweisen auf Tupel einer in Beziehung stehenden
Relation.
Beispiel
Beispiel
PersNr ist Schlüssel von Professoren, gelesenVon in Vorlesungen
verweist auf Tupel in Professoren und ist somit Fremdschlüssel. Es muss
sichergestellt werden, dass in gelesenVon keine Werte stehen, die in
PersNr nicht vorkommen.
PersNr ist Schlüssel von Professoren, gelesenVon in Vorlesungen
verweist auf Tupel in Professoren und ist somit Fremdschlüssel. Es muss
sichergestellt werden, dass in gelesenVon keine Werte stehen, die in
PersNr nicht vorkommen.
Definition (referentielle Integrität)
Fremdschlüssel müssen entweder auf existierende Tupel einer anderen
Relation verweisen oder einen Nullwert enthalten.
Sebastian Skritek
Seite 17
Sebastian Skritek
Seite 17
Datenmodellierung
5. Referentielle Integrität
Datenmodellierung
Referentielle Integrität
5. Referentielle Integrität
Referentielle Integrität
Definition (Dangling References)
Definition (Dangling References)
Dangling References sind Verweise von Fremdschlüsseln auf nicht
existierende Datensätze
Dangling References sind Verweise von Fremdschlüsseln auf nicht
existierende Datensätze
Beispiele (Dangling References)
Einfügen des folgenden Datensatzes in der Tabelle Vorlesungen:
insert into Vorlesungen
values (5100 , ’ Nihilismus ’ , 40 , 0007);
⇒ worauf verweist ’0007’ ?
Löschen des folgenden Datensatzes in der Tabelle Professoren:
delete from Professoren where PersNr =2125;
⇒ worauf verweist ’2125’ in der Vorlesungs-Tabelle?
Sebastian Skritek
Datenmodellierung
Seite 18
5. Referentielle Integrität
5.1. Gewährleistung der referentiellen Integrität
Gewährleistung der referentiellen Integrität
Sebastian Skritek
Datenmodellierung
Seite 18
5. Referentielle Integrität
5.1. Gewährleistung der referentiellen Integrität
Gewährleistung der referentiellen Integrität
Theorem (referentielle Integrität)
Theorem (referentielle Integrität)
Sei R eine Relation mit Primärschlüssel κ und S eine Relation mit
Fremdschlüssel α auf R. Die referentielle Integrität ist gewährleistet, wenn
Sei R eine Relation mit Primärschlüssel κ und S eine Relation mit
Fremdschlüssel α auf R. Die referentielle Integrität ist gewährleistet, wenn
πα (S) ⊆ πκ (R)
πα (S) ⊆ πκ (R)
Erlaubte Änderungen sind also:
Einfügen von s in S, wenn s.α ∈ πκ (R)
Sebastian Skritek
Seite 19
Sebastian Skritek
Seite 19
Datenmodellierung
5. Referentielle Integrität
5.1. Gewährleistung der referentiellen Integrität
Gewährleistung der referentiellen Integrität
Datenmodellierung
5. Referentielle Integrität
5.1. Gewährleistung der referentiellen Integrität
Gewährleistung der referentiellen Integrität
Theorem (referentielle Integrität)
Theorem (referentielle Integrität)
Sei R eine Relation mit Primärschlüssel κ und S eine Relation mit
Fremdschlüssel α auf R. Die referentielle Integrität ist gewährleistet, wenn
Sei R eine Relation mit Primärschlüssel κ und S eine Relation mit
Fremdschlüssel α auf R. Die referentielle Integrität ist gewährleistet, wenn
πα (S) ⊆ πκ (R)
πα (S) ⊆ πκ (R)
Erlaubte Änderungen sind also:
Erlaubte Änderungen sind also:
Einfügen von s in S, wenn s.α ∈ πκ (R)
0
Einfügen von s in S, wenn s.α ∈ πκ (R)
0
Verändern Tupels von s zu s 0 in S, wenn s 0 .α ∈ πκ (R)
Verändern Tupels von s zu s in S, wenn s .α ∈ πκ (R)
Sebastian Skritek
Datenmodellierung
Verändern von r .κ in R, wenn σα=r .κ (S) = ∅, d.h. es gibt keine
Verweise von S auf r
Seite 19
5. Referentielle Integrität
5.1. Gewährleistung der referentiellen Integrität
Gewährleistung der referentiellen Integrität
Sebastian Skritek
Datenmodellierung
Seite 19
5. Referentielle Integrität
5.2. Referentielle Integrität in SQL
Referentielle Integrität in SQL
Beschreibungsmöglichkeit für jeden der drei Schlüsselbegriffe wie folgt:
Theorem (referentielle Integrität)
Sei R eine Relation mit Primärschlüssel κ und S eine Relation mit
Fremdschlüssel α auf R. Die referentielle Integrität ist gewährleistet, wenn
πα (S) ⊆ πκ (R)
Erlaubte Änderungen sind also:
Einfügen von s in S, wenn s.α ∈ πκ (R)
Verändern Tupels von s zu s 0 in S, wenn s 0 .α ∈ πκ (R)
Verändern von r .κ in R, wenn σα=r .κ (S) = ∅, d.h. es gibt keine
Verweise von S auf r
Löschen von r in R, wenn σα=r .κ (S) = ∅
Sebastian Skritek
Seite 19
Sebastian Skritek
Seite 20
Datenmodellierung
5. Referentielle Integrität
5.2. Referentielle Integrität in SQL
Datenmodellierung
Referentielle Integrität in SQL
5. Referentielle Integrität
5.2. Referentielle Integrität in SQL
Referentielle Integrität in SQL
Beschreibungsmöglichkeit für jeden der drei Schlüsselbegriffe wie folgt:
Beschreibungsmöglichkeit für jeden der drei Schlüsselbegriffe wie folgt:
(Kandidaten)-Schlüssel: unique
(Kandidaten)-Schlüssel: unique
Primärschlüssel: primary key(Attributliste)
Primärschlüssel: primary key(Attributliste)
Fremdschlüssel: foreign key(Attributliste)
Fremdschlüssel: foreign key(Attributliste)
Kennzeichnung der Tabelle, auf die verwiesen wird:
references (Tabellenname)
Sebastian Skritek
Datenmodellierung
Seite 20
5. Referentielle Integrität
5.2. Referentielle Integrität in SQL
Sebastian Skritek
Datenmodellierung
Referentielle Integrität in SQL
Seite 20
5. Referentielle Integrität
5.2. Referentielle Integrität in SQL
Referentielle Integrität in SQL
Beschreibungsmöglichkeit für jeden der drei Schlüsselbegriffe wie folgt:
Beschreibungsmöglichkeit für jeden der drei Schlüsselbegriffe wie folgt:
(Kandidaten)-Schlüssel: unique
(Kandidaten)-Schlüssel: unique
Primärschlüssel: primary key(Attributliste)
Primärschlüssel: primary key(Attributliste)
Fremdschlüssel: foreign key(Attributliste)
Fremdschlüssel: foreign key(Attributliste)
Kennzeichnung der Tabelle, auf die verwiesen wird:
Kennzeichnung der Tabelle, auf die verwiesen wird:
references (Tabellenname)
references (Tabellenname)
Einhaltung der Referenziellen Integrität bei Updates, Löschen:
Einhaltung der Referenziellen Integrität bei Updates, Löschen:
on update
{no action | cascade | set null | set default}
on update
{no action | cascade | set null | set default}
on delete
{no action | cascade | set null | set default}
on delete
{no action | cascade | set null | set default}
Achtung bei zyklischen Abhängigkeiten (Chicken-Egg Problem - siehe
unten):
alter table bzw. deferred deferrable
Sebastian Skritek
Seite 20
Sebastian Skritek
Seite 20
Datenmodellierung
5. Referentielle Integrität
5.2. Referentielle Integrität in SQL
Datenmodellierung
Referentielle Integrität in SQL
5. Referentielle Integrität
5.2. Referentielle Integrität in SQL
Referentielle Integrität in SQL
Beispiel
Beispiel
create table Professoren
( PersNr
integer primary key ,
Name
varchar (30) not null ,
...
);
create table Professoren
( PersNr
integer primary key ,
Name
varchar (30) not null ,
...
);
create table Vorlesungen
( VorlNr
integer primary key ,
Titel
varchar (30) ,
SWS
integer ,
gelesenVon integer [ foreign key ]
references Professoren
on update cascade
on delete set null );
Sebastian Skritek
Seite 21
Datenmodellierung
5. Referentielle Integrität
5.2. Referentielle Integrität in SQL
Sebastian Skritek
Seite 21
Datenmodellierung
Referentielle Integrität in SQL
5. Referentielle Integrität
5.2. Referentielle Integrität in SQL
Referentielle Integrität in SQL
Beispiel (Fortsetzung)
Beispiel (Fortsetzung)
Vorlesung
...
gelesenVon
...
...
...
..
.
Professoren
Vorlesung
PersNr
...
...
gelesenVon
2137
2137
...
...
2125
2125
...
...
2126
..
.
2136
..
.
...
..
.
...
..
.
Professoren
PersNr
...
2137
2137
...
2125
2125
...
2126
..
.
2136
..
.
...
..
.
Gewünschte Änderungen:
update Professoren set
PersNr =1111
where PersNr =2137;
delete from Professoren where PersNr =2125;
Sebastian Skritek
Seite 22
Sebastian Skritek
Seite 22
Datenmodellierung
5. Referentielle Integrität
5.2. Referentielle Integrität in SQL
Datenmodellierung
Referentielle Integrität in SQL
5. Referentielle Integrität
5.2. Referentielle Integrität in SQL
Referentielle Integrität in SQL
Beispiel (Fortsetzung)
Beispiel (Fortsetzung)
update Professoren set
PersNr =1111
where PersNr =2137;
update Professoren set
PersNr =1111
where PersNr =2137;
Einhaltung der referentiellen Integrität durch Kaskadieren
(on update cascade)
Einhaltung der referentiellen Integrität durch Kaskadieren
(on update cascade)
Vorlesung
Sebastian Skritek
Datenmodellierung
Seite 23
5. Referentielle Integrität
5.2. Referentielle Integrität in SQL
...
gelesenVon
...
...
...
..
.
...
1111
1111
...
2125
2125
...
2126
..
.
2136
..
.
...
..
.
Sebastian Skritek
Seite 23
Datenmodellierung
Referentielle Integrität in SQL
Professoren
PersNr
5. Referentielle Integrität
5.2. Referentielle Integrität in SQL
Referentielle Integrität in SQL
Beispiel (Fortsetzung)
Beispiel (Fortsetzung)
delete from Professoren where PersNr =2125;
delete from Professoren where PersNr =2125;
Einhaltung der referentiellen Integrität durch “auf NULL setzen”
(on delete set NULL)
Vorlesung
Sebastian Skritek
Seite 24
Sebastian Skritek
...
gelesenVon
...
1111
...
NULL
...
..
.
2126
..
.
Professoren
PersNr
...
1111
...
2136
..
.
...
..
.
Seite 24
Datenmodellierung
5. Referentielle Integrität
5.2. Referentielle Integrität in SQL
Datenmodellierung
Kaskadierendes Löschen
5. Referentielle Integrität
5.2. Referentielle Integrität in SQL
Kaskadierendes Löschen
Vorsicht bei der Verwendung von on delete cascade. Es kann zu
kaskadierdendem Löschen kommen.
Vorsicht bei der Verwendung von on delete cascade. Es kann zu
kaskadierdendem Löschen kommen.
create table Vorlesungen
(...
gelesenVon integer references Professoren
on delete cascade );
create table hören
(...
VorlNr integer references Vorlesungen
on delete cascade );
Sebastian Skritek
Seite 25
Datenmodellierung
5. Referentielle Integrität
5.2. Referentielle Integrität in SQL
Sebastian Skritek
Datenmodellierung
Kaskadierendes Löschen
Seite 25
5. Referentielle Integrität
5.2. Referentielle Integrität in SQL
Universitätsschema mit Integritätsbedingungen
Vorsicht bei der Verwendung von on delete cascade. Es kann zu
kaskadierdendem Löschen kommen.
create table Studenten
( MatrNr
integer primary key ,
Name
varchar (30) not null ,
Semester integer
check ( Semester between 1 and 13));
create table Vorlesungen
(...
gelesenVon integer references Professoren
on delete cascade );
create table hören
(...
VorlNr integer references Vorlesungen
on delete cascade );
Logik
Sokrates
Mäeutik
Ethik
Sebastian Skritek
Schopenhauer
Theophrastos
Seite 25
Sebastian Skritek
Seite 26
Datenmodellierung
5. Referentielle Integrität
5.2. Referentielle Integrität in SQL
Datenmodellierung
Universitätsschema mit Integritätsbedingungen
5. Referentielle Integrität
5.2. Referentielle Integrität in SQL
Universitätsschema mit Integritätsbedingungen
create table Studenten
( MatrNr
integer primary key ,
Name
varchar (30) not null ,
Semester integer
check ( Semester between 1 and 13));
create table Studenten
( MatrNr
integer primary key ,
Name
varchar (30) not null ,
Semester integer
check ( Semester between 1 and 13));
create table Professoren
( PersNr integer primary key ,
Name
varchar (30) not null ,
Rang
char (2) check ( Rang in ( ’ C2 ’ , ’ C3 ’ , ’ C4 ’)) ,
Raum
integer unique );
create table Professoren
( PersNr integer primary key ,
Name
varchar (30) not null ,
Rang
char (2) check ( Rang in ( ’ C2 ’ , ’ C3 ’ , ’ C4 ’)) ,
Raum
integer unique );
create table Assistenten
( PersNr
integer primary key ,
Name
varchar (30) not null ,
Fachgebiet
varchar (30) ,
Boss
integer references Professoren
on delete set null );
Sebastian Skritek
Datenmodellierung
Seite 26
5. Referentielle Integrität
5.2. Referentielle Integrität in SQL
Sebastian Skritek
Datenmodellierung
Universitätsschema mit Integritätsbedingungen
Seite 26
5. Referentielle Integrität
5.2. Referentielle Integrität in SQL
Universitätsschema mit Integritätsbedingungen
create table Vorlesungen
( VorlNr integer primary key ,
Titel varchar (30) ,
SWS
integer ,
gelesenVon integer references Professoren
on delete set null );
create table Vorlesungen
( VorlNr integer primary key ,
Titel varchar (30) ,
SWS
integer ,
gelesenVon integer references Professoren
on delete set null );
create table hören
( MatrNr integer references Studenten
on delete cascade ,
VorlNr integer references Vorlesungen
on delete cascade ,
primary key ( MatrNr , VorlNr ));
Sebastian Skritek
Seite 27
Sebastian Skritek
Seite 27
Datenmodellierung
5. Referentielle Integrität
5.2. Referentielle Integrität in SQL
Datenmodellierung
Universitätsschema mit Integritätsbedingungen
5. Referentielle Integrität
5.2. Referentielle Integrität in SQL
Universitätsschema mit Integritätsbedingungen
create table voraussetzen
( Vorgänger integer references Vorlesungen
on delete cascade ,
Nachfolger integer references Vorlesungen
on delete cascade ,
primary key ( Vorgänger , Nachfolger ));
create table voraussetzen
( Vorgänger integer references Vorlesungen
on delete cascade ,
Nachfolger integer references Vorlesungen
on delete cascade ,
primary key ( Vorgänger , Nachfolger ));
create table prüfen
( MatrNr integer references Studenten
on delete cascade ,
VorlNr integer references Vorlesungen ,
PersNr integer references Professoren
on delete set null ,
Note
numeric (2 ,1)
check ( Note between 0.7 and 5.0) ,
primary key ( MatrNr , VorlNr ));
Sebastian Skritek
Datenmodellierung
Seite 28
5. Referentielle Integrität
5.3. Zyklische Abhängigkeiten
Sebastian Skritek
Datenmodellierung
Seite 28
5. Referentielle Integrität
5.3. Zyklische Abhängigkeiten
Zyklische Abhängigkeiten
Zyklische Abhängigkeiten
Beispiel (chicken/egg)
Beispiel (chicken/egg)
Legen Sie die Tabellen chicken und egg an, wobei für jedes Huhn
vermerkt wird, aus welchem Ei es geschlüpft ist, und umgekehrt:
Legen Sie die Tabellen chicken und egg an, wobei für jedes Huhn
vermerkt wird, aus welchem Ei es geschlüpft ist, und umgekehrt:
create table chicken
( cID integer primary key ,
eID integer references egg );
Sebastian Skritek
Seite 29
Sebastian Skritek
Seite 29
Datenmodellierung
5. Referentielle Integrität
5.3. Zyklische Abhängigkeiten
Datenmodellierung
5. Referentielle Integrität
5.3. Zyklische Abhängigkeiten
Zyklische Abhängigkeiten
Zyklische Abhängigkeiten
Beispiel (chicken/egg)
Beispiel (chicken/egg)
Legen Sie die Tabellen chicken und egg an, wobei für jedes Huhn
vermerkt wird, aus welchem Ei es geschlüpft ist, und umgekehrt:
Legen Sie die Tabellen chicken und egg an, wobei für jedes Huhn
vermerkt wird, aus welchem Ei es geschlüpft ist, und umgekehrt:
create table chicken
( cID integer primary key ,
eID integer references egg );
create table chicken
( cID integer primary key ,
eID integer references egg );
ERROR: relation ‘‘egg’’ does not exist
ERROR: relation ‘‘egg’’ does not exist
create table egg
( eID integer primary key ,
cID integer references chicken );
Sebastian Skritek
Datenmodellierung
Seite 29
5. Referentielle Integrität
5.3. Zyklische Abhängigkeiten
Sebastian Skritek
Datenmodellierung
Zyklische Abhängigkeiten
Seite 29
5. Referentielle Integrität
5.3. Zyklische Abhängigkeiten
Zyklische Abhängigkeiten
Lösung: verwenden Sie den alter table Befehl:
Lösung: verwenden Sie den alter table Befehl:
Beispiel (chicken/egg)
create table chicken ( cID integer primary key ,
eID integer );
create table egg ( eID integer primary key ,
cID integer references chicken );
Sebastian Skritek
Seite 30
Sebastian Skritek
Seite 30
Datenmodellierung
5. Referentielle Integrität
5.3. Zyklische Abhängigkeiten
Datenmodellierung
Zyklische Abhängigkeiten
5. Referentielle Integrität
5.3. Zyklische Abhängigkeiten
Zyklische Abhängigkeiten
Lösung: verwenden Sie den alter table Befehl:
Beispiel (chicken/egg)
Beispiel (chicken/egg)
Das Anlegen der Tabellen funktioniert, aber:
create table chicken ( cID integer primary key ,
eID integer );
insert into chicken values (1 ,11);
create table egg ( eID integer primary key ,
cID integer references chicken );
alter table chicken add constraint chickenrefegg
foreign key ( eID ) references egg ;
Sebastian Skritek
Datenmodellierung
Seite 30
5. Referentielle Integrität
5.3. Zyklische Abhängigkeiten
Sebastian Skritek
Datenmodellierung
Zyklische Abhängigkeiten
Seite 31
5. Referentielle Integrität
5.3. Zyklische Abhängigkeiten
Zyklische Abhängigkeiten
Lösung: verzögern Sie die Überprüfung der Bedingung bis zum Ende der
Transaktion (Definition Transaktion in LVA Datenbanksysteme).
Beispiel (chicken/egg)
Das Anlegen der Tabellen funktioniert, aber:
insert into chicken values (1 ,11);
ERROR: insert or update on table ‘‘chicken’’ violates
foreign key constraint ‘‘chickenrefegg’’
DETAIL: Key (eid)=(11) is not present in table ‘‘egg’’.
Sebastian Skritek
Seite 31
Sebastian Skritek
Seite 32
Datenmodellierung
5. Referentielle Integrität
5.3. Zyklische Abhängigkeiten
Datenmodellierung
Zyklische Abhängigkeiten
5. Referentielle Integrität
5.3. Zyklische Abhängigkeiten
Zyklische Abhängigkeiten
Lösung: verzögern Sie die Überprüfung der Bedingung bis zum Ende der
Transaktion (Definition Transaktion in LVA Datenbanksysteme).
Lösung: verzögern Sie die Überprüfung der Bedingung bis zum Ende der
Transaktion (Definition Transaktion in LVA Datenbanksysteme).
Beispiel (chicken/egg)
Beispiel (chicken/egg)
alter table chicken add constraint chickenrefegg
foreign key ( eID ) references egg
initially deferred deferrable ;
alter table chicken add constraint chickenrefegg
foreign key ( eID ) references egg
initially deferred deferrable ;
begin ;
insert into chicken values (1 ,11);
insert into egg values (11 ,1);
commit ;
Sebastian Skritek
Datenmodellierung
Seite 32
6. Trigger
Sebastian Skritek
Datenmodellierung
Seite 32
6. Trigger
6.1. Anwendungsgebiete
Anwendungsgebiete
Trigger
Trigger finden Verwendung bei:
Standardisierung erst im SQL-99 Standard, waren allerdings schon vorher
in kommerziellen DBMS enthalten. Daher ist die
Implementierung in den meisten DBMS verschieden.
Berechnung gespeicherter abgeleiteter Attribute
Beispiel
Verwendung zur Sicherstellung Datenintegrität
Berechnung des Bruttopreises bei gespeichertem Nettopreis und
Umsatzsteuersatz
Arbeiten nach dem Event - Condition - Action Modell:
beim Eintreffen eines bestimmten Ereignisses (event)
unter bestimmten Bedingungen (condition)
werden vom DBMS Aktionen automatisch ausgeführt
(action).
Achtung: zyklische Trigger oder Endlosschleifen!
Sebastian Skritek
Seite 33
Sebastian Skritek
Seite 34
Datenmodellierung
6. Trigger
6.1. Anwendungsgebiete
Datenmodellierung
Anwendungsgebiete
6. Trigger
6.2. Syntax
Syntax
Trigger finden Verwendung bei:
Berechnung gespeicherter abgeleiteter Attribute
Definition des Triggers: create trigger
Beispiel
Auslösende Ereignisse: insert, update, delete
Berechnung des Bruttopreises bei gespeichertem Nettopreis und
Umsatzsteuersatz
“feuert” vor oder nach Ausführung: before/after insert
auf Tupel- bzw. Queryebene: for each row/statement
einschränkende Bedingungen mittels when
allgemeinen Bedingungen
kann auf die Werte vor und nach dem Ereignis zugreifen:
referencing old/new (nur bei for each row)
Beispiele
Alle Mitarbeiter, die mehr als 5 SWS Vorlesungen abhalten, bekommen
einen Gehaltsbonus (+5%).
Professoren können nicht degradiert werden
Sebastian Skritek
Datenmodellierung
Verwendung von Prozeduren in jeweiligen DBMS Syntax
Seite 34
6. Trigger
6.3. Beispiele
Sebastian Skritek
Datenmodellierung
Beispiele
Seite 35
6. Trigger
6.3. Beispiele
Beispiele
Beispiel
Beispiel
Professoren können nicht degradiert werden (ORACLE Syntax in
Prozedur)
Alle Mitarbeiter, die mehr als 5 SWS Vorlesungen abhalten, bekommen
einen Gehaltsbonus (+5%).
create trigger ke ineDeg radier ung
before update on Professoren
for each row
when ( old . Rang is not null )
begin
if : old . Rang = ’ C3 ’ and : new . Rang = ’ C2 ’
then : new . Rang := ’ C3 ’;
end if ;
if : old . Rang = ’ C4 ’ then : new . Rang := ’ C4 ’;
end if ;
if : new . Rang is null then : new . Rang := : old . Rang ;
end if ;
end
create trigger viellehre
after insert on Vorlesungen
referencing new as vo_neu
for each row
when group by vo_neu . gelesenvon
having sum ( Vorlesungen . SWS ) > 5 and
sum ( Vorlesungen . SWS ) - vo_neu . SWS <=5
update Professoren
set Professoren . gehalt = Professoren . gehalt *1.05
where Professoren . PersNr = vo_neu . gelesenvon ;
Sebastian Skritek
Seite 36
Sebastian Skritek
Seite 37
Datenmodellierung
6. Trigger
6.3. Beispiele
Datenmodellierung
Beispiele
7. Lernziele
Lernziele
Beispiel
Professoren können nicht degradiert werden (PostgreSQL Syntax)
CREATE OR REPLACE FUNCTION ouf () RETURNS
TRIGGER AS $$
BEGIN
IF ( OLD . Rang = ’ C3 ’ AND NEW . Rang = ’ C2 ’) THEN
RETURN OLD ;
END IF ;
RETURN NEW ;
END ;
$$ LANGUAGE plpgsql ;
SQL als Datenmanipulationssprache:
Einfügen, Bearbeiten, und Löschen von Daten
Welche Arten von Integrtätsbedingungen gibt es
Statische Integritätsbedingungen in SQL
Insbesonders: Fremdschlüssel:
• Referentielle Integrität in SQL
Umgang mit zyklischen Abhängigkeiten
Trigger
CREATE TRIGGER ke ineDeg radier ung
BEFORE UPDATE ON Profesoren
FOR EACH ROW
when ( OLD . Rang is not NULL )
EXECUTE PROCEDURE ouf ();
Sebastian Skritek
Datenmodellierung
Seite 38
8. Ausblick
Ausblick
Bachelor-LVAs:
184.686 – VU Datenbanksysteme (WS)
184.705 – VU Semistrukturierte Daten (SS)
184.737 – VU Einführung in wissensbasierte Systeme
...
Master-LVAs:
181.201 – SE Seminar aus Datenbanken
181.140 – VU Datenbanktheorie
184.734 – VU Foundations of Information Integration
184.247 – VU Deduktive Datenbanken
...
Sebastian Skritek
Seite 40
Sebastian Skritek
Seite 39
Herunterladen