Skript - Labor - Fachhochschule Stralsund

Werbung
Skript zur Vorlesung
Datenbanken II
Fachbereich Elektrotechnik & Informatik
Fachhochschule Stralsund
Prof. Dr. Uwe Hartmann
Datenbanken
­2­
1. Komplexe Anfragen
Beispiel
"Gesucht sind die ANR der Ausstellungen, die keine Bilder des Malers 'K1' zeigen."
R ANR (A) 
 B))
ANR ( KNR='K1' (A BNR
SELECT ANR
FROM A
EXCEPT
SELECT ANR
FROM A x, B y
WHERE x.BNR=y.BNR
WHERE y.KNR='K1'
SELECT x.ANR
FROM A x
WHERE NOT EXISTS
(SELECT *
FROM A y, B z
WHERE y.BNR=z.BNR
AND x.ANR=y.ANR
AND z.KNR='K1')
Beispiel
"Gesucht sind die ANR der Ausstellungen, in denen alle Bilder des Malers 'K1' gezeigt wer­
den"
SELECT x.ANR
FROM A x
WHERE NOT EXISTS
(SELECT *
FROM B y
WHERE y.KNR='K1'
AND NOT EXISTS
(SELECT *
FROM A z
WHERE y.BNR=z.BNR
AND z.ANR=x.ANR))
Datenbanken
­3­
1.1 Relationenalgebra: Division
 Division
Seien R(A, B) und S(B) zwei Relationen. Die Division
T = R/S
ist eine Relation, wobei für jedes Tupel t  T gilt:
Es existiert für jedes Tupel aus s S ein Tupel r  R mit r = (t, s)
R
A
a
a
a
b
b
c
c
B
x
y
z
y
z
x
z
S
B
x
z
T=R/S
A1
a
c
Beispiel
"Gesucht sind die ANR der Ausstellungen, in denen alle Bilder des Malers 'K1' gezeigt wer­
den"
R ANR,BNR (A) /
BNR ( KNR='K1' (B))
Realisierung der Division durch andere Algebraoperationen
Seien R(A, B) und S(B) zwei Relationen. Die Division T = R/S ist eine Folge von Operatio­
nen:
R1 
A (R)
R2 = R1  S
R3 = R2 ­ R
R4 =
A (R3)
T = R1 ­ R4
Datenbanken
­4­
1.2 Relationantupelkalkül
 prozedurale Sprache
Formulierung der Prozedur (Weg), wie ein System von einem Ausgangszustand in einen
Endzustand gelangen soll.
 deskriptive Sprache
Formulierung der Eigenschaften des Endzustandes (Ziel), in den ein System von einem
Ausgangszustand gelangen soll.
 Grundbegriffe der Prädikatenlogik
 Terme
 Formeln
 Quantoren
 freie/gebundene Variable
Beispiel
Unterscheidung zwischen Aussageformen und Aussagen
Aussageform
"Der Student Meier hört die Vorlesung x"
Aussage
"Der Student Meier hört die Vorlesung Datenbanken"
Aussage
"Der Student Meier hört eine Vorlesung"
Definition des Relationentupelkalküls
 Alphabet
Das Alphabet enthält
 Relationennamen
 Attributnamen
 Konstante
 Tupelvariable
 Vergleichssymbole ( =, , <, , >, )
 logische Symbole (  ,  ,  , ,  )
 Klammern
 Terme
1. Eine Konstante ist ein Term.
2. Ist a ein Attributname und x eine Tupelvariable, dann ist x.a ein Term.
 Rangeformeln
3. Ist x eine Tupelvariable und R ein Relationenname, dann ist x / R eine Rangeformel.
Datenbanken
­5­
4. Sind U und V Rangeformeln, die keine gemeinsame Tupelvariable besitzen, dann ist
U  V eine Rangeformel.
 Subformeln
5. Sind t1 und t 2 Terme und ist  ein Vergleichssysmbol, dann ist t1 t 2 eine Subfor­
mel.
6. Sind S und T Subformeln, dann sind  S, S  T, S  T und S  T Subformeln.
7. Ist S eine Subformel, x eine Tupelvariable und R ein Relationenname, dann sind
(x / R)S und ( x / R)S Subformeln.
 Formeln
8. Eine Rangeformel ist eine Formel.
9. Eine Subformel, die keine freien Variablen besitzt, ist eine Formel.
10. Ist U eine Rangeformel und S eine Subformel und kommen alle freien Variablen von S
in U vor, dann ist S  U eine Formel.
11. Sind F und G Formeln, dann ist F  G eine Formel.
12. Die und nur die durch 8 ... 11 definierten Formeln sind Formeln.
 Eine Integritätsbedingung ist eine Formel, die keine freien Variablen besitzt (Aussage)
Beispiel
( x / Verkauf)( y / Artikel)(x.ANR y.ANR)
 Eine Datenbankanfrage ist ein Paar
{ (t1 , ... , t n ) : F }
mit (t1 , ... , t n ) : Target­Liste,
t i : Terme,
F : Formel,
bei dem alle in F vorkommenden freien Variablen in der Targetliste enthalten sein müssen.
Ergebnis einer Datenbankanfrage ist die Menge von Tupeln der Struktur (t1 , ... , t n ) , für
die F wahr ist.
Beispiel
R
A
a1
a1
a2
a3
B
b1
b2
b3
b3
S
B
b1
b1
b3
b4
C
c1
c2
c3
c4
{ (x.A, x.B) : x / R  ( y / S)(x.B y.B) }
Äquivalenz von Algebraoperationen und Kalkülausdrücken
geg. 2 Relationen R(A), S(A), A­Attributmenge
Datenbanken
­6­
 Vereinigung
R  S  { (x.A) : x / R  x / S }
 Durchschnitt
R  S  { (x.A) : x / R  ( y / S)(x.A  y.A) }
 Differenz
R  S  { (x.A) : x / R   ( y / S)(x.A  y.A) }
geg. 2 Relationen R(A), S(B), A,B­Attributmengen
 Projektion
A1 ,...,A n (R)
 { (x.A1 ,..., x.A n ) : x / R }
 Selektion
 P (R)
 { (x.A) : x / R  P(x) }
 Produkt
R  S  { (x.A, y.B) : x / R  y / S }
 Join
R

S  { (x.A, y.B) : x / R  y / S  x.A i  y.B j }
Ai  B j
Beispiel
"Gesucht sind Titel und Wert aller Bilder."
{ (x.Titel, x.Wert) : x / B }
Beispiel
"Gesucht sind die Namen aller Pariser Galerien."
{ (x. Bezeichnung) : x / G  x.Sitz =' Paris' }
Beispiel
"Gesucht sind die Orte, an denen sich Museen oder Galerien befinden."
{ (x.Sitz) : x / G  x / M }
Datenbanken
­7­
Beispiel
"Gesucht sind die Namen von Museen, die Bilder besitzen, sowie deren Titel und Wert."
{ (x. Bezeichnung, y.Titel, y.Wert) : x / M  y / B  x.ENR = y.ENR }
Beispiel
"Gesucht sind die Name der Galerien, in deren Besitz sich Bilder befinden"
{ (x. Bezeichnung) : x / G  ( y / B)(x.ENR = y.ENR) }
Beispiel
"Gesucht sind die Namen der Galerien, die keine Bilder besitzen."
{ (x. Bezeichnung) : x / G   ( y / B)(x.ENR = y.ENR) }
Transformationsregeln
R
x
P,Q
P(x)
­
­
­
­
Relation
Tupelvariable
Subformeln
Subformel, in der x vorkommt

( x / R) P(x)

 ( x / R)  P(x)

 (x / R) P(x)

( x / R)  P(x)

 ( x / R) P(x)

( x / R)  P(x)

( x / R) P1 (x)  (x / R) P2 (x) 

( x / R) P1(x)  ( x / R) P2 (x) 

P  Q

P  Q
(x / R) (P1 (x)  P2 (x))
( x / R) (P1 (x)  P2 (x))
Datenbanken
­8­
 Division
R / S  { (x.A) : x / R  (y / S)( z / R)(y.B  z.B  z.A = x.A) }
Beispiel
"Gesucht sind die Titel der Ausstellungen, die alle Bilder ausstellen"
{ (x.A_ Titel) : x / A  ( y / B)( z / A)(y.BNR  z.BNR  z.ANR = x.ANR) }
Beispiel
"Gesucht sind die Titel der Ausstellungen, die alle Bilder des Malers mit der KNR = 'K2' aus­
stellen"
{ (x.A_ Titel) : x / A  ( k / B)(k.KNR =' K2' ) 
(y / B)(y.KNR =' K2'  ( z / A)(y.BNR z.BNR  z.ANR = x.ANR)) }
Beispiel
'Gesucht sind die Titel der Ausstellungen, die (genau) die gleichen Bilder ausstellen, die auch
in der Ausstellung 'A1' ausgestellt werden.'
{ (x.A_Titel) : x/A  (y/A)(y.ANR =' A1'  (z/A)(y.BNR z.BNR  z.ANR = x.ANR))
 (u/A)(u.ANR = x.ANR  (v/A)(u.BNR v.BNR  v.ANR =' A1' ))}
{ (x.A_Titel) : x/A   (y/A)(y.ANR =' A1' (z/A)(y.BNR z.BNR  z.ANR = x.ANR))
  (u/A)(u.ANR = x.ANR   (v/A)(u.BNR  v.BNR  v.ANR =' A1' ))}
{ (x.A_Titel) : x/A  (y/A)((y.ANR =' A1'  (z/A)(y.BNR z.BNR  z.ANR = x.ANR))
 (y.ANR = x.ANR  (v/A)(y.BNR v.BNR  v.ANR =' A1' )))}
{ (x.A_Titel) : x/A   (y/A)((y.ANR =' A1' (z/A)(y.BNR z.BNR  z.ANR = x.ANR))
 (y.ANR = x.ANR   (v/A)(y.BNR v.BNR  v.ANR =' A1' )))}
Datenbanken
­9­
1.3 Abbildung von Kalkülausdrücken in SQL
Kalkül­Datenbankanfrage:
SQL­Datenbankanfrage:
SELECT
FROM
WHERE
{ (t1 , ... , t n ) : F }
mit (t1 , ... , t n ) : Target­Liste,
F : Formel
select-list
table-reference
search-condition
Abbildung SQL­Kalkül
Target­Liste
Rangeformel
(restl.) Formel



select-list
table-reference
search-condition
Beispiel
"Gesucht sind die Namen von Museen, die Bilder besitzen, sowie deren Titel und Wert."
{ (x. Bezeichnung, y.Titel, y.Wert) : x / M  y / B  x.ENR = y.ENR }

SELECT x.Bezeichnung, y.Titel, y.Wert
FROM M x, B y
WHERE x.ENR=y.ENR
Beispiel
"Gesucht sind die Name der Galerien, in deren Besitz sich Bilder befinden"
{ (x. Bezeichnung) : x / G  ( y / B)(x.ENR = y.ENR) }

SELECT x.Bezeichnung
FROM G x
WHERE EXISTS
(SELECT *
FROM B y
WHERE x.ENR=y.ENR)
Datenbanken
­ 10 ­
Beispiel
"Gesucht sind die Namen der Maler, deren Bilder sich in Museumsbesitz befinden."
{ (x.Name) : x/K  (y/B)(x.KNR = y.KNR  (z/M)(y.ENR = z.ENR)) }

SELECT x.Bezeichnung
FROM K x
WHERE EXISTS
(SELECT *
FROM B y
WHERE x.KNR=y.KNR
AND EXISTS
(SELECT *
FROM M z
WHERE y.ENR=z.ENR))
Transformation von Anfragen
 Anfragetypen
Anfragen
ungeschachtelt
geschachtelt
nicht­korreliert
korreliert
 ungeschachtelte Anfrage
Anfrage ohne innere SELECT­Anweisung (Subanfrage)
 Anfrage mit nicht­korrelierter Subanfrage
Anfrage, bei der eine Subanfrage keinen Bezug auf eine in einer äußeren Anfrage definierte
Rangevariable nimmt
 Anfrage mit korrelierter Subanfrage
Anfrage, bei der eine Subanfrage Bezug auf eine in einer äußeren Anfrage definierte Ran­
gevariable nimmt
 negierte Subanfrage
Subanfrage, bei der die zugehörige WHERE­Bedingung der äußeren durch NOT negiert
wird (NOT IN, NOT EXISTS)
Regeln zur Transformation zwischen join-, IN- und EXISTS-Anfragen
Datenbanken
­ 11 ­
1. Jede ungeschachtelte Anfrage (join) läßt sich in eine geschachtelte Anfrage (IN, EXISTS)
transformieren.
2. Eine geschachtelte Anfrage läßt sich nur dann in eine ungeschachtelte Anfrage transformie­
ren, wenn die Subanfrage nicht negiert ist.
3. Jede geschachtelte Anfrage mit nicht­korrelierter Subanfrage läßt sich in eine mit korrelier­
ter Subanfrage transformieren.
4. Eine geschachtelte Anfrage mit korrelierter Subanfrage läßt sich nur dann in eine ohne kor­
relierte Subanfrage transformieren, wenn die Korrelation sich auf die nächstäußere Anfrage
bezieht.
Beispiel
ungeschachtelt
SELECT x.Titel
FROM B x, A y
WHERE x.BNR=y.BNR
­­­
­­­
2. Trigger
TRIGGER
 Auslösendes Ereignis
nicht-korreliert
korreliert
SELECT x.Titel
FROM B x
WHERE x.BNR IN
(SELECT y.BNR
FROM A y)
SELECT x.Titel
FROM B x
WHERE EXISTS
(SELECT *
FROM A y
WHERE x.BNR=y.BNR)
SELECT x.Titel
FROM B x
WHERE x.BNR NOT IN
(SELECT y.BNR
FROM A y)
SELECT x.Titel
FROM B x
WHERE NOT EXISTS
(SELECT *
FROM A y
WHERE x.BNR=y.BNR)
­­­
SELECT x.Titel
FROM B x
WHERE NOT EXISTS
(SELECT *
FROM A y
WHERE NOT EXISTS
(SELECT *
FROM A z
WHERE y.ANR=z.ANR
AND z.BNR=x.BNR))
Datenbanken
 Ausgelöste Aktion
(wenn auslösendes Ereignis eingetreten, dann Aktion auslösen)
Klassifikation von Triggern
1. nach dem auslösenden Ereignis
 INSERT­Trigger
 UPDATE­Trigger
 DELETE­Trigger
1. nach dem Aktivierungszeitpunkt des Triggers
 Before­Trigger
 After­Trigger
1. nach der Granularität des Triggers
 Zeilen­Trigger
 Anweisungs­Trigger
(Hinweis: in DB2 dürfen Before­Trigger keine Anweisungs­Trigger sein)
­ 12 ­
Datenbanken
­ 13 ­
2.1 Erzeugen und Löschen
Syntax
trigger­definition ::=
CREATE TRIGGER trigger­name
[ NO CASCADE BEFORE | AFTER ] trigger­event ON table­name
[ REFERENCING referencing­specification ]
FOR EACH [ STATEMENT | ROW ] MODE DB2SQL1
[ WHEN (search­condition) ]
triggered­action
trigger­event ::=
INSERT
| DELETE
| UPDATE [ OF column­name [{ , column­name }...] ]
referencing­specification ::=
OLD [AS] range­variable
| NEW [AS] range­variable
| OLD_TABLE [AS] table­identifier
| NEW_TABLE [AS] table­identifier
| referencing­specification referencing­specification2
triggered­action ::=
triggered­statement
| BEGIN ATOMIC triggered­statement; [{ triggered­statement; }...] END
 BEFORE/AFTER: legt Aktivierungszeitpunkt fest
 trigger­event ON table­name: INSERT­, DELETE­ oder UPDATE­Operationen (auslösen­
de Ereignisse) auf eine Relation table­name
 FOR EACH STATEMENT / FOR EACH ROW: Granularität des Triggers
Einschränkung für DB2: Before­Trigger dürfen keine Anweisungstrigger sein
 triggered­action: eine einzelne Anweisung (triggered­statement) oder ein Block von mehre­
ren Anweisungen in BEGIN ... END, die beim Feuern des Triggers ausgeführt werden.
ATOMIC: alle Anweisungen im Block bilden eine Transaktion
 WHEN search­condition: Trigger­Aktion wird nur ausgeführt, wenn die Bedingung erfüllt
ist
1
2
MODE DB2SQL nur für DB2
Wiederholung siehe Erläuterung
Datenbanken
­ 14 ­
 REFERENCING: Definition von Bezeichnern für Tupel/die Relation vor bzw. nach ihrer
Modifikation durch das auslösende Ereignis
OLD range­variable: Tupelvariable repräsentiert ein durch ein Ereignis zu modifizieren­
des Tupel vor der Modifikation ('altes Tupel')
NEW range­variable: Tupelvariable repräsentiert ein durch ein Ereignis zu modifizie­
rendes Tupel nach der Modifikation ('neues Tupel')
OLD_TABLE table­identifier: Name einer (hypothetischen) Relation, die alle zu modi­
fizierenden Tupel vor der Modifikation enthält ('alte Relation')
NEW_TABLE table­identifier: Name einer (hypothetischen) Relation, die alle zu modi­
fizierenden Tupel nach der Modifikation enthält ('neue Relation')
Beispiel
REFERENCING NEW AS neuezeile
WHEN (neuezeile.Attribut NOT IN
(SELECT Attribut
FROM Relation2)
REFERENCING OLD AS altezeile NEW AS neuezeile OLD_TABLE AS altetabelle
WHEN (neuezeile.Attribut > altezeile.Attribut
AND 100 >
(SELECT COUNT(*)
FROM altetabelle))
REFERENCING OLD AS altezeile
INSERT INTO Relation2 VALUES
(altezeile.Attribut1, altezeile.Attribut2)
FOR EACH ROW
FOR EACH STATEMENT
BEFORE INSERT
NEW
(unzulässig)
BEFORE UPDATE
OLD, NEW
(unzulässig)
BEFORE DELETE
OLD
(unzulässig)
AFTER INSERT
NEW
NEW_TABLE
OLD, NEW
OLD_TABLE, NEW_TABLE
OLD
OLD_TABLE
­
NEW_TABLE
­
OLD_TABLE, NEW_TABLE
­
OLD_TABLE
AFTER UPDATE
AFTER DELETE
Syntax
drop­trigger­statement ::=
DROP TRIGGER trigger­name
Datenbanken
­ 15 ­
2.2 Spezielle Trigger-Aktionen
SET-Anweisung
Syntax
set­statement ::=
SET column­name = row­value­constructor [{ , column­name = row­value­constructor}...]
 entspricht der SET­Klausel einer UPDATE­Anweisung
 column­name: Attribut des 'neuen Tupels' eines INSERT­ oder UPDATE­Triggers
 jeder Trigger, der eine SET­Anweisung enthält, muß eine NEW range­variable definieren.
Beispiel
REFERENCING NEW AS neuezeile OLD AS altezeile
...
SET neuezeile.Attribut1=wert
REFERENCING NEW AS neuezeile
...
SET Attribut1=
(SELECT MAX(x.Attribut1)
FROM Relation2 x
WHERE x.Attribut2=Attribut2)
SIGNAL-Anweisung
Syntax
signal­statement ::=
SIGNAL SQLSTATE state ( message )
 löst eine Fehlerbedingung aus und setzt alle Änderungen, die zum Feuern des Triggers ge­
führt haben einschließlich bisheriger Aktionen des Triggers zurück
 state: String aus 5 Zeichen (Ziffern oder Großbuchstaben), wird als SQLSTATE ausgege­
ben
 message: String mit max. 70 Zeichen wird als Fehlernachricht ausgegeben
Beispiel
SIGNAL SQLSTATE '7000I' ('INSERT: Tupel bereits vorhanden')
SIGNAL SQLSTATE '7000I' ('INSERT: Wert ' || char(neuezeile.Attribut) || 'unzulässig')
2.3 Before-Trigger
Syntax (Before-Trigger)
triggered­statement::=
Datenbanken
­ 16 ­
set­statement
| signal­statement
Beispiel
Maler(KNR, Geburt, Geb_Ort, Tod), Bild(BNR, Titel, Jahr, Wert, KNR, ENR)
Integritätsbedingung:
Ein Bild, das ein Maler gemalt hat, muß zu seinen Lebzeiten entstanden sein. Wird diese
Bedingung verletzt, soll Fehlermeldung ausgegeben werden
CREATE TRIGGER INS_B
NO CASCADE BEFORE INSERT ON Bild
REFERENCING NEW AS new_row
FOR EACH ROW MODE DB2SQL
WHEN (EXISTS
(SELECT *
FROM Maler
WHERE KNR=new_row.KNR
AND new_row.jahr NOT BETWEEN Geburt AND Tod))
SIGNAL SQLSTATE 'INS01' ('INSERT Fehler: Entstehungsjahr '||char(new_row.Jahr));
INSERT INTO Bild VALUES
('B18','Bild1',1920,1000,'K5','E7');
INSERT INTO Bild VALUES
('B19','Bild2',1920,1000,null,'E7');
INSERT INTO Bild VALUES
('B20','Bild3',null,1000,'K5','E7');
UPDATE Bild
SET Jahr=1920
WHEN BNR='B2'
CREATE TRIGGER UPD_B
NO CASCADE BEFORE UPDATE OF Jahr ON Bild
REFERENCING NEW AS new_row
FOR EACH ROW MODE DB2SQL
WHEN (EXISTS
(SELECT *
FROM Maler
WHERE KNR=new_row.KNR
AND new_row.jahr NOT BETWEEN Geburt AND Tod))
SIGNAL SQLSTATE 'UPD01' ('UPDATE Fehler: Entstehungsjahr '||char(new_row.Jahr));
Beispiel
Bild(BNR, Titel, Jahr, Wert, KNR, ENR)
Aktion:
Wurde beim Hinzufügen eines Bild­Tupels kein Wert angegeben, wird der Wert auf den
aktuell kleinsten aller Bildwerte festgesetzt
CREATE TRIGGER INS_B
Datenbanken
­ 17 ­
NO CASCADE BEFORE INSERT ON Bild
REFERENCING NEW AS new_row
FOR EACH ROW MODE DB2SQL
WHEN (new_row.Wert IS NULL)
SET new_row.Wert =
(SELECT MIN(Wert)
FROM Bild);
INSERT INTO Bild VALUES
('B17','Bild1',1880,null,'K7','E7');
2.3 After-Trigger
 After­Trigger werden erst dann ausgeführt, wenn die auslösende Manipulationsanweisung
und alle kaskadierenden Folgeanweisungen (Integritätsbedingungen) erfolgreich ausgeführt
wurden
Syntax (After-Trigger)
triggered­statement::=
insert­statement
| delete­statement
| update­statement
| signal­statement
triggernde SQL­Anweisung
Trigger1: Anweisung1
Trigger2
Trigger3
Trigger1: Anweisung2
Trigger4
Beispiel
CREATE TRIGGER INS_B
AFTER INSERT ON Bild
REFERENCING NEW AS new_row
FOR EACH ROW MODE DB2SQL
WHEN (new_row.Wert IS NULL)
UPDATE Bild
SET Wert=
(SELECT MIN(Wert)
FROM Bild)
Datenbanken
­ 18 ­
WHERE BNR=new_row.BNR;
INSERT INTO Bild VALUES
('B17','Bild1',1880,null,'K7','E7');
Beispiel
Einrichtung(ENR, Bezeichnung, Sitz, Anzahl_Bilder)
Bild(BNR, Titel, Jahr, Wert, KNR, ENR)
Aktion:
Für INSERT und DELETE in Bild soll Anzahl_Bilder in Einrichtung aktualisiert werden
CREATE TRIGGER INS_B
AFTER INSERT ON Bild
REFERENCING NEW AS new_row
FOR EACH ROW MODE DB2SQL
UPDATE Einrichtung
SET Anzahl_bilder=Anzahl_Bilder+1
WHERE ENR=new_row.ENR;
CREATE TRIGGER DEL_B
AFTER DELETE ON Bild
REFERENCING OLD AS old_row
FOR EACH ROW MODE DB2SQL
UPDATE Einrichtung
SET Anzahl_bilder=Anzahl_Bilder­1
WHERE ENR=old_row.ENR;
INSERT INTO BIld VALUES
('B17','Bild 17',1910,600,'K7','E7');
DELETE FROM Bild
WHERE ENR='E1';
Datenbanken
­ 19 ­
Rekursion
 Bei der Definition rekursiver Trigger sind durch geeignete Abbruchbedingungen unendli­
che Rekursionen zu vermeiden
Beispiel
Männer
(0,n)
(0,m)
Frauen
Partner
Aktion:
Bei Eintrag eines Partners in Mann/Frau soll der entsprechende Eintrag in der referenzier­
ten Relation erfolgen:
CREATE TRIGGER INS_M
AFTER UPDATE OF Partner ON Mann
REFERENCING NEW AS new_row
FOR EACH ROW MODE DB2SQL
UPDATE Frau
SET Partner=new_row.MNR
WHERE FNR=new_row.Partner;
CREATE TRIGGER INS_F
AFTER UPDATE OF Partner ON Frau
REFERENCING NEW AS new_row
FOR EACH ROW MODE DB2SQL
UPDATE Mann
SET Partner=new_row.FNR
WHERE MNR=new_row.Partner;
2.4 Trigger und Integritätsbedingungen
Unterschiede zwischen CREATE TABLE-Bedingungen und Triggern
 CREATE TABLE­Bedingungen sind deskriptiver als TRIGGER­Bedingungen
 CREATE TABLE­Bedingungen werden zum Zeitpunkt ihrer Definition für alle existieren­
den Daten durchgesetzt
 TRIGGER­Bedingungen werden nur bei Änderungen durch INSERT/UPDATE/DELETE
ausgelöst
 TRIGGER sind mächtiger als CREATE TABLE­Bedingungen
Datenbanken
­ 20 ­
Interaktionen zwischen CREATE TABLE-Bedingungen und Triggern
1. SQL­Anweisung (trigger­event) produziert eine Änderungsliste mit den alten Werten
(OLD_ROW) und/oder den neuen Werten (NEW_ROW)
2. Die von der SQL­Anweisung aktivierten Before­Trigger werden in der Reihenfolge ihrer
Erzeugung auf die Änderungslisten ausgeführt.
3. Änderungen der Änderungsliste werden in der Datenbank durchgeführt. Integritätsbedin­
gungen werden überprüft, und alle Datenbankänderungen für die betreffende Anweisung
werden zurückgesetzt, falls eine Verletzung entdeckt wird. Fremdschlüsselbedingungen
mit Löschaktion wie CASCADE oder SET NULL können weiter Datenbankänderungen
verursachen. Jede dieser sekundären Änderungen wird ausgeführt:
a) Eine Sekundäränderung wird ausgeführt und produziert eine weitere Änderungslisten.
b) Von der Sekundäränderung aktivierte Before­Trigger werden in der Reihenfolge ihrer
Erzeugung auf die Änderungslisten ausgeführt
c) Änderungen der Änderungsliste werden in der Datenbank durchgeführt und außerdem
mit der Änderungsliste der ursprünglichen SQL­Anweisung gemischt. Integritätsbedin­
gungen werden überprüft, Rücksetzen und Kaskadieren wie unter 3.
4. After­Trigger, die von der ursprünglichen SQL­Anweisung oder einer der sekundären Än­
derungen ausgelöst wurden, werden ausgeführt.
Datenbanken
­ 21 ­
3. Erweitertes Entity-Relationship-Modell
3.1 Überdeckung
Überdeckung
Steht jedes Entity e1 E1in einer Beziehung R, so heißt die Beziehung R bezüglich E1
überdeckend.
Erweiterung des ER-Diagramms
(m1,m2)
E1
S1
A1
R
(n1,n2)
A3
E2
S2
A2
mit m1,n1 {0,1} und m2,n2  {1, m/n}
 Ein Entity e1 E1 steht mit mindestens n1 und höchstens n2 Entities e2 E2 in einer Bezie­
hung R und
Ein Entity e2 E2 steht mit mindestens m1 und höchstens m2 Entities e1 E1 in einer Be­
ziehung R.
Beispiel
Firma
(0,m)
(0,n)
Artikel
Verkauf
Student
(0,m)
(1,1)
Studiengang
immatrikuliert
Absolvent
(1,m)
(1,1)
Diplomarbeit
angefertigt
Mieter
Fahrzeug
(0,m)
(1,n)
(1,1)
(1,1)
Wohnung
Fahrzeugbrief
Datenbanken
­ 22 ­
Existenzabhängigkeit
Ein Entity eines Typs E1 (e1 E1), der in einer überdeckenden Beziehung R zu einem Enti­
ty­Typ E2 steht, kann nur existieren, wenn wenigstens eine Beziehung r R zu einem
e2 E2 existiert
Folgerung
Existiert für ein solches Entity keine Beziehung (mehr), wir es gelöscht (ON DELETE
CASCADE)
 Besetzung eines Entitätstyps E1
Bes(E1) = Anzahl der erwarteten Entitäten eines Typs E1, die in einer Beziehung R stehen
 Relative Besetzung eines Entitätstyps E1
RelBes(E1) = Bes(E1)/card(E1)
Abbildung von 1:1-Beziehungen
1. (0,1):(0,1)-Beziehungen
E1
E1
E2
R
E1
E2
(0,1)
R
(0,1)
E2
S1 (NOT NULL)
A1
PK S1
S2 (NOT NULL)
A2
PK S2
S1 (NOT NULL), UNIQUE
S2 (NOT NULL), UNIQUE
A3
PK S1,S2
FK S1 REF E1 ON DELETE CASCADE
FK S2 REF E2 ON DELETE CASCADE
S1 (NOT NULL)
A1
S2
A3
PK S1
FK S2 REF E2 ON DELETE SET NULL
IB S2 IS UNIQUE
IB CHECK(S2 IS NOT NULL OR A3 IS NULL )
S2 (NOT NULL)
A2
PK S2
2. (0,1):(1,1)-Beziehungen
Datenbanken
E1
E1
E2
­ 23 ­
(0,1)
R
(1,1)
E2
S1 (NOT NULL)
A1
S2 UNIQUE, NOT NULL
A3
PK S1
FK S2 REF E2 ON DELETE CASCADE
S2 (NOT NULL)
A2
PK S2
3. (1,1):(1,1)-Beziehungen
E1
(1,1)
R
(1,1)
E2
E
S1 (NOT NULL)
A1
S2 UNIQUE, NOT NULL
A2
A3
PK S1
E
S1 (NOT NULL), UNIQUE
A1
S2 (NOT NULL), UNIQUE
A2
A3
PK S1,S2
E
S1 (NOT NULL)
A1
A2
A3
PK S1
Abbildung von 1:n-Beziehungen
1. (0,1):(0,n)-Beziehungen
Datenbanken
E1
E1
E2
R
E1
E2
­ 24 ­
(0,1)
R
(0,n)
E2
S1 (NOT NULL)
A1
PK S1
S2 (NOT NULL)
A2
PK S2
S1 (NOT NULL)
S2 (NOT NULL), UNIQUE
A3
PK S1,S2
FK S1 REF E1 ON DELETE CASCADE
FK S2 REF E2 ON DELETE CASCADE
S1 (NOT NULL)
A1
PK S1
S2 (NOT NULL)
A2
S1
A3
PK S2
FK S1 REF E1 ON DELETE SET NULL
IB CHECK(S1 IS NOT NULL OR A3 IS NULL )
Datenbanken
­ 25 ­
2. (0,1):(1,n)-Beziehungen
E1
E1
E2
(0,1)
R
(1,n)
E2
S1 (NOT NULL)
A1
PK S1
IB INSERT(E1)
S2 (NOT NULL)
A2
S1
A3
PK S2
FK S1 REF E1 ON DELETE SET NULL
IB CHECK(S1 IS NOT NULL OR A3 IS NULL )
IB DELETE(E2)
INSERT(E1)
insert_e1(s1, a1, s2, a3)
{
BEGIN TRANSACTION
INSERT INTO E1 VALUES (s1, a1);
UPDATE E2 SET S1=s1, A3=a3
WHERE S2=s2 AND S1 IS NULL;
END TRANSACTION
}
DELETE(E2):
delete_e2(s2)
{
BEGIN TRANSACTION
if( SELECT * FROM E2 x WHERE S2=s2
AND x.S1 IS NOT NULL
AND NOT EXISTS
(SELECT * FROM E2 y WHERE y.S1=x.S1
AND y.S2<>x.S2))
{
DELETE E1 WHERE S1 = (SELECT S1 FROM E2 WHERE S2=s2);
}
DELETE E2 WHERE S2=s2;
END TRANSACTION
}
E1
S1
A1
S2
(NOT NULL)
(NOT NULL), UNIQUE
Datenbanken
E2
­ 26 ­
A3
PK S1, S2
FK S2 REF E2 ON DELETE CASCADE
IB Eindeutigkeit von A1 zu S1
S2 (NOT NULL)
A2
PK S2
3. (1,1):(0,n)-Beziehungen
E1
E1
E2
(1,1)
R
(0,n)
E2
S1 (NOT NULL)
A1
PK S1
S2 (NOT NULL)
A2
S1 NOT NULL
A3
PK S2
FK S1 REF E1 ON DELETE CASCADE
Datenbanken
­ 27 ­
4. (1,1):(1,n)-Beziehungen
E1
E1
E2
E
(1,1)
R
(1,n)
E2
S1 (NOT NULL)
A1
PK S1
IB INSERT(E1)
S2 (NOT NULL)
A2
S1 NOT NULL
A3
PK S2
FK S1 REF E1 ON DELETE CASCADE
IB DELETE(E2)
IB INSERT(E2)
S1 (NOT NULL)
A1
S2 (NOT NULL), UNIQUE
A2
A3
PK S1,S2
IB Eindeutigkeit von A1 zu S1
Datenbanken
­ 28 ­
Abbildung von m:n-Beziehungen
1. (0,m):(0,n)-Beziehungen
E1
E1
E2
R
(0,m)
R
(0,n)
E2
S1 (NOT NULL)
A1
PK S1
S2 (NOT NULL)
A2
PK S2
S1 (NOT NULL)
S2 (NOT NULL)
A3
PK S1,S2
FK S1 REF E1 ON DELETE CASCADE
FK S2 REF E2 ON DELETE CASCADE
Datenbanken
­ 29 ­
2. (0,m):(1,n)-Beziehungen
E1
E1
E2
R
E1
E2
(0,m)
R
(1,n)
E2
S1 (NOT NULL)
A1
PK S1
IB INSERT(E1)
S2 (NOT NULL)
A2
PK S2
IB DELETE(E2)
S1 (NOT NULL)
S2 (NOT NULL)
A3
PK S1,S2
FK S1 REF E1 ON DELETE CASCADE
FK S2 REF E2 ON DELETE CASCADE
S1 (NOT NULL)
A1
S2 (NOT NULL)
A3
PK S1,S2
FK S2 REF E2 ON DELETE CASCADE
IB Eindeutigkeit von A1 zu S1
S2
A2
PK S2
Datenbanken
­ 30 ­
3. (1,m):(1,n)-Beziehungen
E1
E1
E2
R
E
(1,m)
R
(1,n)
E2
S1 (NOT NULL)
A1
PK S1
IB INSERT(E1)
IB DELETE(E1)
S2 (NOT NULL)
A2
PK S2
IB INSERT(E2)
IB DELETE(E2)
S1 (NOT NULL)
S2 (NOT NULL)
A3
PK S1,S2
FK S1 REF E1 ON DELETE CASCADE
FK S2 REF E2 ON DELETE CASCADE
S1 (NOT NULL)
A1
S2 (NOT NULL)
A2
A3
PK S1,S2
IB Eindeutigkeit von A1 zu S1
IB Eindeutigkeit von A2 zu S2
Datenbanken
­ 31 ­
Abbildung schwacher Entity-Typen
E1
E1
E1
E2
E2
(1,1)
(0,n)
E2
S1 (NOT NULL)
A1
PK S1
S2 (NOT NULL), UNIQUE
A2
S1 (NOT NULL)
A3
PK S2,S1
FK S1 REF E1 ON DELETE CASCADE
Datenbanken
­ 32 ­
Abbildung rekursiver Beziehungen
Rekursive Beziehung
E
S
R
A
A1
Beispiel
Verkäufer
n
Verkauf
m
Firma
Käufer
ist Chef von
1
Angestellter
Chef
m
hat Chef
1
Person
1
Ehe
 Rekursive Beziehungen sind in der Regel nicht überdeckend (keine (1,1)­, (1,n)­Beziehun­
gen).
1. rekursive (0,n):(0,m)-Beziehungen
E
R
S
(NOT NULL)
A
PK S
S1 (NOT NULL)
S2 (NOT NULL)
A1
PK S1,S2
FK S1 REF E1(S) ON DELETE CASCADE
FK S2 REF E2(S) ON DELETE CASCADE
Datenbanken
­ 33 ­
2. rekursive (0,1):(0,m)-Beziehungen
E
R
E
S
(NOT NULL)
A
PK S
S1 (NOT NULL)
S2 NOT NULL
A1
PK S1
FK S1 REF E1(S) ON DELETE CASCADE
FK S2 REF E2(S) ON DELETE CASCADE
S
(NOT NULL)
A
S1
A1
PK S
FK S1 REF E(S) ON DELETE SET NULL
IB CHECK(S1 IS NOT NULL OR A1 IS NULL )
3. rekursive (0,1):(0,1)-Beziehungen
E
R
S
(NOT NULL)
A
PK S
S1 (NOT NULL), UNIQUE
S2 (NOT NULL), UNIQUE
A1
PK S1,S2
FK S1 REF E1(S) ON DELETE CASCADE
FK S2 REF E2(S) ON DELETE CASCADE
Datenbanken
­ 34 ­
3.2 Generalisierung
Generalisierung/Spezialisierung
Ein Entity­Typ E ist eine Generalisierung zweier Entity­Typen E1 und E2, analog: E1 und
E2 sind Spezialisierungen von E, wenn gilt
1. Alle Elemente von E1 und E2 kommen in E vor und
2. Jedes Element von E1 und E2 besitzt neben seinen eigenen Attributen zusätzlich die At­
tribute genau eines Elements von E
kurz: E1  E und E2  E.
Eine solche Beziehung wird IS­A­Beziehung genannt und im ER­Diagramm dargestellt
durch
E
S
A
IS­A
E1
E2
A1
A2
Folgerung
 Zwischen einem Subtyp und einem Supertyp herrscht eine 1:1­Beziehung
 Ein Subtyp ist existenzabhängig von seinem Supertyp (ON DELETE CASCADE).
Disjunkte/nicht disjunkte Subtypen
Zwei Subtypen E1 und E2 eines Supertyps E heißen disjunkt (d), wenn gilt: E1  E2 =  ,
sonst nicht disjunkt (n)
Totale/Partielle Beziehungen
Eine IS­A­Beziehung zwischen zwei Subtypen E1 und E2 zu einem Supertyps E heißt
total (t), wenn gilt: E1  E2 = E, sonst partiell (p).
Datenbanken
­ 35 ­
Beispiel
Person
d,t
IS­A
Frau
Mann
Boot
n,p
IS­A
Segelboot
Motorboot
Fahrzeug
d,p
IS­A
Auto
Fahrrad
Sänger
n,t
IS­A
Tenor
Bassist
Datenbanken
­ 36 ­
Abbildung von IS-A-Beziehungen
1. nicht disjunkte, partielle IS-A-Beziehungen
E
n,p
IS­A
E1
E
E1
E2
E2
S
(NOT NULL)
A
PK S
S
(NOT NULL)
A1
PK S
FK S REF E ON DELETE CASCADE
S
(NOT NULL)
A2
PK S
FK S REF E ON DELETE CASCADE
Datenbanken
­ 37 ­
2. disjunkte, partielle IS-A-Beziehungen
E
d,p
IS­A
E1
E
E1
E2
E2
S
(NOT NULL)
A
PK S
S
(NOT NULL)
A1
PK S
FK S REF E ON DELETE CASCADE
IB CHECK(S NOT IN (SELECT S FROM E2))
S
(NOT NULL)
A2
PK S
FK S REF E ON DELETE CASCADE
IB CHECK(S NOT IN (SELECT S FROM E1))
Datenbanken
­ 38 ­
3. disjunkte, totale IS-A-Beziehungen
E1
d,t
IS­A
E1
E
E2
S
(NOT NULL)
A
Z
NOT NULL
A1
A2
PK S
IB CHECK Z IN ('E1','E2')
IB CHECK (Z<>'E1' OR A2 IS NULL)
IB CHECK (Z<>'E2' OR A1 IS NULL)
Datenbanken
­ 39 ­
4. nicht disjunkte, totale IS-A-Beziehungen
E
n,t
IS­A
E1
E
E2
S
(NOT NULL)
A
Z
(NOT NULL)
A1
A2
PK S, Z
IB CHECK Z IN ('E1','E2')
IB CHECK (Z<>'E1' OR A2 IS NULL)
IB CHECK (Z<>'E2' OR A1 IS NULL)
IB Eindeutigkeit von A zu S
Herunterladen