Grundlagen

Werbung
Grundlagen (3)
„
Sprachentwicklung von SQL
„
5. Die Standardsprache SQL
„
„
SQL wurde „de facto“-Standard in der relationalen Welt
(1986 von ANSI, 1987 von ISO akzeptiert)
Weiterentwicklung des Standards in drei Stufen
Inhalt
„
SQL2 (1992)
Grundlagen
„
(SQL3) SQL:1999
Mengenorientierte Anfragen (Retrieval)
„
SQL:2003
Möglichkeiten der Datenmanipulation
„
Möglichkeiten der Datendefinition
Beziehungen und referentielle Integrität
Mächtigkeit von SQL
„
Schemaevolution
Indexierung
„
Sichten
N. Ritter, DIS, SS 2005, Kapitel 5
1
Auswahlvermögen äquivalent dem Relationenkalkül und der
Relationenalgebra
Trotz Vermeidung von mathematischen Konzepten wie Quantoren
relational vollständig
N. Ritter, DIS, SS 2005, Kapitel 5
Grundlagen (1)
„
Spezielle Sprachkonstrukte für den DBA
4
Grundlagen (4)
Seit 1974 viele Sprachentwürfe
„
SQL: abbildungsorientierte Sprache
„
SQUARE: Specifying Queries As Relational Expressions
„
SEQUEL: Structured English Query Language, Weiterentwicklung zu
FROM
„
SQL: Structured Query Language
WHERE ...
„
„
„
strukturierte Sprache, die auf englischen Schlüsselwörtern
basiert
„
Grundbaustein:
SELECT ...
...
Abbildung
Ein bekanntes Attribut oder eine Menge von Attributen wird mit Hilfe einer
Relation in ein gewünschtes Attribut oder einer Menge von Attributen
abgebildet.
Weitere ähnliche Sprachen: QUEL, . . .
http://www.cse.iitb.ernet.in:8000/proxy/db/~dbms/Data/Papers-Other/SQL1999/
„
Allgemeines Format
(SQL-Standard Dokumente + einige Artikel)
<Spezifikation der Operation>
http://www.wiscorp.com/sql99.html
<Liste der referenzierten Tabellen>
(Artikel + Präsentationen zu SQL:1999)
[WHERE Boolescher Prädikatsausdruck]
N. Ritter, DIS, SS 2005, Kapitel 5
2
N. Ritter, DIS, SS 2005, Kapitel 5
Grundlagen (2)
„
Grundlagen (5)
Sprachentwicklung von SQL
„
„
„
„
„
Entwicklung einer vereinheitlichten DB-Sprache für alle Aufgaben der
DB-Verwaltung
SQL92-Syntax (Auszug, Table=Relation, Column=Attribut, Listenelemente durch Komma getrennt)
SQL-statement: query
INSERT INTO
Erweiterung der Anfragesprache zur „natürlichen“ Formulierung
bestimmter Fragen
DELETE FROM
gezielte Verbesserungen verschiedener Sprachkonstrukte zur
UPDATE
Komplexität:
„
einfache Anfragemöglichkeiten für den gelegentlichen Benutzer
„
mächtige Sprachkonstrukte für den besser ausgebildeten Benutzer
N. Ritter, DIS, SS 2005, Kapitel 5
view-name
3
table-name
view-name
DROP TABLE
table-name
set-list
(
(
)
attr-name-list
WHERE
SET
CREATE VIEW
DROP VIEW
(
table-name
view-name
table-name
view-name
CREATE TABLE
leichter Zugang durch verschiedene „Sprachebenen“ anwachsender
query
table-name
Lehrexperimente mit Studenten mit und ohne Programmiererfahrung
Erleichterung des Verständnisses und zur Reduktion von Fehlern
„
5
VALUES
constant-list
condition
WHERE
attr-defn-list
attr-name-list
condition
, PRIMARY KEY (
)
AS
attr-name-list
)
)
query
view-name
N. Ritter, DIS, SS 2005, Kapitel 5
6
1
Grundlagen (6)
Anfragen (1)
SQL92-Syntax (Forts.)
„
„
SELECT-Anweisung
select-exp
::=
bitte keine
Aggregatfunktionen
verwenden
query: SELECT
expr-list
DISTINCT
GROUP BY
FROM
from-list
attr-spec-list
HAVING
condition
WHERE
*
ORDER BY
condition
ASC
attr-spec-list
„
DESC
N. Ritter, DIS, SS 2005, Kapitel 5
7
expr:
„
SELECT
„
FROM-Klausel:
*:
spezifiziert zu verarbeitende Relation bzw.
Ausgabe ‚ganzer‘ Tupel
„
WHERE-Klausel:
Sammlung (elementarer) Prädikate der Form
Ai Θ ai oder Ai Θ Aj (Θ ∈ { =, <>, <, <, >, > }),
die mit AND und OR verknüpft sein können
10
Unser Beispiel-Schema:
predicate: expr
condition
condition
AND
condition
condition
OR
condition
comparison
expr
comparison
expr
attr-spec
expr
arithm.op
expr
TITEL
ANY
SCHAUSPIELER (SP)
PNR
query
W-ORT NAME
IS
ROLLE (RO)
NOT
attr-spec
LIKE
NOT
FIGUR
NULL
N. Ritter, DIS, SS 2005, Kapitel 5
8
A-JAHR A-ORT THEATER
N. Ritter, DIS, SS 2005, Kapitel 5
Grundlagen (8)
11
Anfragen (3)
SQL92-Syntax (Forts.)
„
Untermengenbildung
Welche Dramen von Goethe wurden nach 1800 uraufgeführt?
table-name
from
R-TYP
DARSTELLER (DA)
PNR FIGUR
view-name
TITEL
constant
arithm.op: + - * /
„
AUTOR KRITIKER U-ORT U-JAHR
query
query
attr-spec
comparison: = <> < > <= >=
DRAMA (DR)
expr-list
AL L
expr-list
IN
NOT
EXISTS
function
query
comparison
expr-list
constant
from:
DICHTER (DI)
AUTOR G-ORT G-JAHR
expr
predicate
NOT
„
Anfragen (2)
SQL92-Syntax (Forts.)
condition:
Grob:
N. Ritter, DIS, SS 2005, Kapitel 5
Grundlagen (7)
„
SELECT [ALL | DISTINCT] select-item-commalist
FROM table-ref-commalist
[WHERE cond-exp]
[GROUP BY column-ref-commalist]
[HAVING cond-exp]
SELECT
FROM
WHERE
var-name
LEFT JOIN
from
ON
condition
set:
attr-spec
=
expr
function: AVG(
expr
MAX(
DISTINCT
attr-spec
MIN(
SUM(
COUNT(*)
)
COUNT(DISTINCT attr-spec
attr-defn:
attr-name
„
)
attr-name
„
Ausgabe von Attributen, Text oder Ausdrücken
Spalten der Ergebnisrelation können (um)benannt werden (AS)
table-name
.
var-name
attr-name
„
Beispiel:
SELECT
INTEGER
NUMERIC(
DECIMAL(
CHAR(
VARCHAR(
N. Ritter, DIS, SS 2005, Kapitel 5
Benennung von Ergebnis-Spalten
„
attr-spec:
length
)
*
DRAMA
AUTOR = ‘Goethe’ AND U-JAHR > 1800;
FROM
NAME,
‘Berechnetes Alter: ‘ AS TEXT,
CURRENT_DATE – GEBDAT AS ALTER
SCHAUSPIELER;
NOT NULL
9
N. Ritter, DIS, SS 2005, Kapitel 5
12
2
Anfragen (4)
„
Anfragen (7)
Test auf Mengenzugehörigkeit
„
„
„
Symmetrische Abbildung (Forts.)
Finde die Dichter (AUTOR, G-ORT), deren Dramen von Dichtern
mit demselben Geburtsort (G-ORT) kritisiert wurden.
Ai IN (a1, aj, ak)
explizite Mengendefinition
Ai IN (SELECT . . .) implizite Mengendefinition
SELECT A.AUTOR, A.G-ORT
Beispiel:
FROM
Finde die Schauspieler (PNR), die Faust, Hamlet oder Wallenstein
SELECT DISTINCT PNR
FROM
DARSTELLER
„
Default: keine Duplikateliminierung
„
DISTINCT erzwingt Duplikateliminierung
13
N. Ritter, DIS, SS 2005, Kapitel 5
„
Welche Figuren kommen in Dramen von Schiller oder Goethe vor?
SELECT
FROM
äußere
Abbildung WHERE
16
Anfragen (8)
Geschachtelte Abbildung
„
A.G-ORT = B.G-ORT;
D.KRITIKER = B.AUTOR in der erhaltenen Lösung?
Anfragen (5)
„
D.KRITIKER = B.AUTOR
AND
Duplikateliminierung
N. Ritter, DIS, SS 2005, Kapitel 5
„
AND
Diskussion: Welche Rolle spielen die Bedingungen A.AUTOR = D.AUTOR und
WHERE FIGUR IN („Faust“, „Hamlet“, „Wallenstein“);
„
DICHTER A, DRAMA D, DICHTER B
WHERE A.AUTOR = D.AUTOR
gespielt haben.
Symmetrische Abbildung (Forts.)
Finde die Schauspieler (NAME, W-ORT), die bei in Weimar uraufgeführten Dramen an ihrem Wohnort als ’Held’ mitgespielt haben.
DISTINCT FIGUR
ROLLE
TITEL IN (
SELECT TITEL
FROM
DRAMA
innere
WHERE AUTOR IN („Schiller“, „Goethe“));
Abbildung
A:
SELECT S.NAME, S.W-ORT
FROM
SCHAUSPIELER S, DARSTELLER D, ROLLE R, DRAMA A
WHERE
Innere und äußere Relationen können identisch sein
Eine geschachtelte Abbildung kann beliebig tief sein
F1
F2
F3
F4
F5
F6
S.PNR = D.PNR
AND
D.FIGUR = R.FIGUR
AND
R.TITEL = A.TITEL
AND
A.U-ORT = ’Weimar’
AND
R.R-TYP = ’Held’
AND
D.A-ORT = S.W-ORT;
Diskussion: Wie sieht das Auswertungsmodell (Erklärungsmodell) bei
symmetrischer Notation aus?
N. Ritter, DIS, SS 2005, Kapitel 5
14
N. Ritter, DIS, SS 2005, Kapitel 5
Anfragen (6)
„
Anfragen (9)
Symmetrische Abbildung
„
Finde die Figuren und ihre Autoren, die in Dramen von Schiller oder Goethe
vorkommen.
SELECT
FROM
WHERE
Einführung von Tupelvariablen (correlation names) erforderlich
„
Vorteile der symmetrischen Notation
„
Ausgabe von Größen aus inneren Blöcken
„
keine Vorgabe der Auswertungsrichtung (DBS optimiert !)
„
Auswertungs-/Erklärungsmodell
„
Einfacher Operatorbaum für Anfrage A (siehe Folie 17)
FIGUR, AUTOR
ROLLE RO, DRAMA DR
(RO.TITEL=DR.TITEL) AND
(DR.AUTOR=„Schiller“ OR DR.AUTOR=„Goethe“);
„
„
17
πNAME, W-ORT
σF1 ∧ F2 ∧ F3 ∧ F4 ∧ F5 ∧ F6
Optimierung?
×
×
×
SP
direkte Formulierung von Vergleichsbedingungen über Relationengrenzen hinweg möglich
DA
RO
DR
einfache Formulierung des Verbundes
N. Ritter, DIS, SS 2005, Kapitel 5
15
N. Ritter, DIS, SS 2005, Kapitel 5
18
3
Anfragen (10)
„
Anfragen (13)
Auswertungs-/Erklärungsmodell (Forts.)
„
„
Optimierter Operatorbaum für Anfrage A (siehe Folie 17)
Aggregatfunktionen (Forts.)
„
πNAME, W-ORT
„
Heuristische Optimierungsregeln:
σF6
1. Führe Selektionen so früh wie möglich aus!
2. Bestimme die Verbundreihenfolge so, dass
die Anzahl und Größe der Zwischenobjekte
minimiert wird!
F1
„
„
„
F2
F3
SP
DA
σF5
σF4
RO
DR
N. Ritter, DIS, SS 2005, Kapitel 5
19
Aggregat-Funktion (AVG) wird angewendet auf einstellige Ergebnisliste
(GEHALT)
keine Eliminierung von Duplikaten
Verwendung von arithmetischen Ausdrücken ist möglich:
AVG (GEHALT/12)
An wievielen Orten wurden Dramen uraufgeführt (U-Ort)?
SELECT
COUNT (DISTINCT U-ORT)
FROM
DRAMA;
N. Ritter, DIS, SS 2005, Kapitel 5
Anfragen (11)
„
Auswertung
Anfragen (14)
Benutzer-spezifizierte Reihenfolge der Ausgabe
„
Aggregatfunktionen (Forts.)
„
ORDER BY order-item-commalist
An welchen Orten wurden mehr als zwei Dramen uraufgeführt ?
SELECT
Finde die Schauspieler, die an einem Ort wohnen, an dem sie gespielt haben,
sortiert nach Name (aufsteigend), W-Ort (absteigend).
SELECT
FROM
WHERE
ORDER BY
„
22
S.NAME, S.W-ORT
SCHAUSPIELER S, DARSTELLER D
S.PNR = D.PNR AND S.W-ORT = D.A-ORT
S.NAME ASC, S.W-ORT DESC;
Ohne Angabe der ORDER-BY-Klausel wird die Reihenfolge der Ausgabe
DISTINCT U-ORT
FROM
DRAMA
WHERE
COUNT(U-ORT)>2;
„
keine geschachtelte Nutzung von Funktionsreferenzen !
„
Aggregat-Funktionen in WHERE-Klausel unzulässig !
SELECT
DISTINCT U-ORT
FROM
DRAMA D
WHERE
2<
(SELECT COUNT(*)
FROM
durch das System bestimmt (Optimierung der Auswertung).
DRAMA X
WHERE X.U-ORT = D.U-ORT);
N. Ritter, DIS, SS 2005, Kapitel 5
20
N. Ritter, DIS, SS 2005, Kapitel 5
Anfragen (12)
„
Anfragen (15)
Aggregatfunktionen
„
aggregate-function-ref
::= COUNT(*)
| {AVG | MAX | MIN | SUM | COUNT}
([ALL | DISTINCT] scalar-exp)
„
„
23
Aggregatfunktionen (Forts.)
„
Standard-Funktionen: AVG, SUM, COUNT, MIN, MAX
„
Elimination von Duplikaten : DISTINCT
Welches Drama wurde zuerst aufgeführt ?
SELECT
TITEL, MIN(U-JAHR)
FROM
DRAMA;
SELECT
TITEL, U-JAHR
„
keine Elimination : ALL (Defaultwert)
FROM
DRAMA
„
Typverträglichkeit erforderlich
WHERE
U-JAHR = (SELECT MIN(U-JAHR)
FROM DRAMA X);
Bestimme das Durchschnittsgehalt der Schauspieler, die älter als 50 Jahre sind
(GEHALT und ALTER seien Attribute von SP).
SELECT AVG(GEHALT) AS Durchschnittsgehalt
FROM
SCHAUSPIELER
WHERE ALTER > 50;
N. Ritter, DIS, SS 2005, Kapitel 5
21
N. Ritter, DIS, SS 2005, Kapitel 5
24
4
Anfragen (16)
„
Anfragen (19)
Partitionierung
„
Hierarchische Beziehungen auf einer Relation (Forts.)
„
GROUP BY column-ref-commalist
Beispielschema: PERS (PNR, NAME, GEHALT, ALTER, ANR)
PRIMARY KEY (PNR)
PERS
Liste alle Abteilungen und das Durchschnittsgehalt ihrer Angestellten auf
(Monatsgehalt).
SELECT
FROM
GROUP BY
Erklärung der Auswertung der Formel
X.MNR = Y.PNR AND X.GEHALT > Y.GEHALT
in Anfrage B (siehe vorhergehende Folie) am Beispiel
ANR, AVG(GEHALT)
PERS
ANR;
PNR
25
406
Abel
50 K
829
123
Maier
60 K
829
123
Maier
60 K
829
829
Müller
55 K
574
829
Müller
55 K
574
574
May
50 K
999
574
May
50 K
999
„
Liste die Abteilungen zwischen K50 und K60 auf, bei denen das Durchschnittsalter
ihrer Angestellten kleiner als 30 ist.
PERS
„
WHERE ANR > K50 AND ANR < K60
GROUP BY ANR
„
HAVING AVG(ALTER) < 30;
Diskussion: Allgemeines Erklärungsmodell?
„
26
„
60 K
Müller
Müller
55 K
May
28
Qualifizierte Tupeln werden gemäß der GROUP-BY-Klausel in Gruppen
eingeteilt.
Gruppen werden ausgewählt, wenn sie die HAVING-Klausel erfüllen. Prädikat in
der HAVING-Klausel darf sich nur auf Gruppeneigenschaften beziehen
(Attribute der GROUP-BY-Klausel oder Anwendung von Aggregat-Funktionen).
Die Ausgabe wird durch die Auswertung der SELECT-Klausel abgeleitet. Wurde
eine GROUP-BY-Klausel spezifiziert, dürfen als SELECT-Elemente nur
Ausdrücke aufgeführt werden, die für die gesamte Gruppe genau einen Wert
ergeben (Attribute der GROUP-BY-Klausel oder Anwendung von AggregatFunktionen).
Die Ausgabereihenfolge wird gemäß der ORDER-BY-Klausel hergestellt. Wurde
keine ORDER-BY-Klausel angegeben, ist die Ausgabereihenfolge
systembestimmt (indeterministisch).
29
Erklärungsmodell – Beispiel
PERS (PNR, NAME, GEHALT, MNR)
PRIMARY KEY (PNR)
FOREIGN KEY MNR REFERENCES PERS
R
FROM R
Finde die Angestellten, die mehr als ihre (direkten) Manager
verdienen (Ausgabe: NAME, GEHALT, NAME des Managers).
SELECT X.NAME, X.GEHALT, Y.NAME
FROM
PERS X, PERS Y
WHERE X.MNR = Y.PNR AND
X.GEHALT > Y.GEHALT;
N. Ritter, DIS, SS 2005, Kapitel 5
Maier
Anfragen (21)
Hierarchische Beziehungen auf einer Relation
B:
Y.NAME
N. Ritter, DIS, SS 2005, Kapitel 5
Anfragen (18)
Beispielschema:
X.GEHALT
Auswertung von SELECT-Anweisungen – Erklärungsmodell
„
Die auszuwertenden Relationen werden durch die FROM-Klausel bestimmt.
Alias-Namen erlauben die mehrfache Verwendung derselben Relation.
„
Das Kartesische Produkt aller Relationen der FROM-Klausel wird gebildet.
„
Tupeln werden ausgewählt durch die WHERE-Klausel.
„
SELECT ANR
„
X.NAME
N. Ritter, DIS, SS 2005, Kapitel 5
HAVING cond-exp
N. Ritter, DIS, SS 2005, Kapitel 5
NAME GEH. MNR
829
Anfragen (20)
Partitionierung (Forts.)
FROM
PNR
50 K
AUSGABE
Anfragen (17)
„
PERS
Abel
Die GROUP-BY-Klausel wird immer zusammen mit einer Aggregat-Funktion benutzt.
Die Aggregat-Funktion wird jeweils auf die Tupeln einer Gruppe angewendet. Die
Ausgabe-Attribute müssen verträglich miteinander sein!
N. Ritter, DIS, SS 2005, Kapitel 5
NAME GEH. MNR
406
R‘
WHERE B <= 50
27
N. Ritter, DIS, SS 2005, Kapitel 5
A
B
C
Rot
Rot
Gelb
Rot
Gelb
Blau
Blau
Blau
10
20
10
10
80
10
80
20
10
10
50
20
180
10
10
200
A
B
C
Rot
Rot
Gelb
Rot
Gelb
Blau
Blau
Blau
10
20
10
10
80
10
80
20
10
10
50
20
180
10
10
200
30
5
Anfragen (22)
„
Anfragen (25)
Erklärungsmodell – Beispiel (Forts.)
R‘‘
GROUP BY A
R‘‘
HAVING MAX(C)>100
R‘‘‘‘
SELECT A, SUM(B), 12
R‘‘‘‘‘
ORDER BY A
A
B
C
Rot
Rot
Rot
Gelb
Blau
Blau
10
20
10
10
10
20
10
10
20
50
10
200
A
B
„
PNR
ANR
GEH
BONUS
ALTER
0815
4711
K45
K45
80K
30K
0
1
52
42
1111
K45
50K
2
43
C
1234
K56
40K
3
31
7777
0007
K56
K56
80K
20K
3
3
45
41
Rot
Rot
Rot
Gelb
Blau
Blau
10
20
10
10
10
20
10
10
20
50
10
200
A
SUM(B)
12
Blau
30
12
A
SUM(B)
12
Blau
30
12
N. Ritter, DIS, SS 2005, Kapitel 5
PERS
Die Summe der Gehälter pro Abteilung, in der mindestens ein Mitarbeiter 40 Jahre
oder älter ist, soll berechnet werden:
SELECT
FROM
WHERE
GROUP BY
HAVING
31
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
„
BONUS
ALTER
PNR
ANR
GEH
BONUS
ALTER
0815
4711
K45
K45
80K
30K
0
1
52
42
0815
4711
K45
K45
80K
30K
0
1
52
42
1111
K45
50K
2
43
1111
K45
50K
2
43
1234
K56
40K
3
31
1234
K56
40K
3
31
7777
0007
K56
K56
80K
20K
3
3
45
41
7777
0007
K56
K56
80K
20K
3
3
45
41
PERS
Die Summe der Gehälter pro Abteilung, in der mindestens ein Mitarbeiter 40 Jahre
oder älter ist, soll berechnet werden:
ANR, SUM(GEH)
PERS
BONUS <> 0
ANR
(COUNT(*) > 1)
ANR DESC
ANR
SUM(GEH)
K56
K45
SELECT
FROM
GROUP BY
HAVING
140K
80K
32
ANR, SUM(GEH)
PERS
ANR
(MAX(ALTER) >= 40)
ANR
SUM(GEH)
K45
K56
160K
140K
N. Ritter, DIS, SS 2005, Kapitel 5
35
Anfragen (27)
„
Suchbedingungen
„
PNR
ANR
GEH
BONUS
ALTER
0815
4711
K45
K45
80K
30K
0
1
52
42
1111
K45
50K
2
43
1234
K56
40K
3
31
„
7777
0007
K56
K56
80K
20K
3
3
45
41
„
„
„
„
„
„
ANR, SUM(GEH)
PERS
BONUS <> 0
ANR
(COUNT(DISTINCT BONUS) > 1)
ANR DESC
ANR
K45
„
SUM(GEH)
„
80K
Vergleichsprädikate
BETWEEN-Prädikate
IN-Prädikate
Ähnlichkeitssuche
Prädikate über Nullwerten
comparison-cond
::=
row-constructor
::=
row-constructor
Θ row-constructor
scalar-exp |
(scalar-exp-commalist) |
(table-exp)
Quantifizierte Prädikate mit Hilfe von ALL, ANY, EXISTS
Weitere Prädikate
„
„
33
Sammlung (elementarer) Prädikate
Verknüpfung mit AND, OR, NOT
Ggf. Bestimmung der Auswertungsreihenfolge durch Klammerung
Nicht-quantifizierte Prädikate
„
N. Ritter, DIS, SS 2005, Kapitel 5
160K
100K
Erklärungsmodell – weitere Beispiele
GEH
Erklärungsmodell – weitere Beispiele
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
SUM(GEH)
34
ANR
Anfragen (24)
PERS
K45
K56
PNR
N. Ritter, DIS, SS 2005, Kapitel 5
„
ANR
Anfragen (26)
Erklärungsmodell – weitere Beispiele
PERS
ANR, SUM(GEHALT)
PERS
ALTER >= 40
ANR
(COUNT(*) >= 1)
N. Ritter, DIS, SS 2005, Kapitel 5
Anfragen (23)
„
Erklärungsmodell – weitere Beispiele
MATCH-Prädikat
UNIQUE-Prädikat
N. Ritter, DIS, SS 2005, Kapitel 5
Beispiel: GEHALT BETWEEN 80K AND 100K
36
6
Anfragen (28)
„
IN-Prädikate
Anfragen (31)
„
row-constr [NOT] IN (table-exp)
Prädikate über Nullwerten
„
„
x IN (a, b, . . ., z)
⇔ x = a OR x = b . . . OR x = z
„
row-constr IN (table-exp)
⇔ row-constr = ANY (table-exp)
„
x NOT IN erg
⇔ NOT (x IN erg)
„
Beispiel:
Attributspezifikation: Es kann für jedes Attribut festgelegt werden,
ob NULL-Werte zugelassen sind oder nicht
„
Verschiedene Bedeutungen von Nullwerten:
„
Auswertung von boolschen Ausdrücken anhand 3-wertiger Logik
„
„
Datenwert ist momentan nicht bekannt
Attributwert existiert nicht für ein Tupel
Finde die Namen der Schauspieler, die den Faust gespielt haben.
SELECT S.NAME
SCHAUSPIELER S
FROM
WHERE ’Faust’ IN
(SELECT D.FIGUR
DARSTELLER D
FROM
WHERE D.PNR = S.PNR)
SELECT S.NAME
FROM SCHAUSPIELER S
WHERE S.PNR IN
(SELECT D.PNR
DARSTELLER D
FROM
WHERE D.FIGUR = ’Faust’)
NOT
T
F
?
SELECT S.NAME
SCHAUSPIELER S,
FROM
DARSTELLER D
WHERE S.PNR = D.PNR AND
D.FIGUR = ‘Faust”
N. Ritter, DIS, SS 2005, Kapitel 5
„
„
37
„
„
„
„
Syntaktische Ähnlichkeitssuche (siehe LIKE-Prädikat)
„
Phonetische Ähnlichkeit (spezielle DBS)
„
Semantische Ähnlichkeit (benutzerdefinierte Funktionen)
„
„
„
„
Das LIKE-Prädikat ist TRUE, wenn der entsprechende Datenwert der Maske
mit zulässigen Substitutionen von Zeichen für % und _ entspricht
38
„
NAME NOT LIKE ’%-%’ wird erfüllt von allen Namen ohne Bindestrich
„
Suche nach ‘%’ und ‘_’ durch Voranstellen eines Escape-Zeichens möglich:
wird erfüllt von STRING-Werten mit Unterstrich
erlaubt die Nutzung von regulären Ausdrücken zum Maskenaufbau
„
Beispiel: NAME SIMILAR TO ‘(SQL-(86 | 89 | 92 | 99)) | (SQL(1 | 2 | 3))’
N. Ritter, DIS, SS 2005, Kapitel 5
Verbund
„
Achtung
„
39
SELECT PNR, GEH + PROV
FROM PERS:
0815: ?,
4711: 80K,
...
„
„
SIMILAR-Prädikat in SQL:1999
„
row-constr IS [NOT] NULL
SELECT PNR, PNAME
FROM
PERS
WHERE GEHALT IS NULL;
41
PERS
STRING LIKE ’%\_%’ ESCAPE ’\’
„
Beispiel:
Eine arithmetische Operation (+, -, *, /) mit einem NULL-Wert
führt auf einen NULL-Wert
„
„
PROV
50K
100K
Weiteres zu Nullwerten
NAME LIKE ’%SCHMI%’ wird z. B. erfüllt von
‘H.-W. SCHMITT’, ‘SCHMITT, H.-W.’, ‘BAUSCHMIED’, ‘SCHMITZ’
ANR LIKE ’_7%’ wird erfüllt von Abteilungen mit einer 7 als zweitem Zeichen
GEH
80K
30K
20K
80K
N. Ritter, DIS, SS 2005, Kapitel 5
„
LIKE-Prädikat (Forts.) – Beispiele
„
ANR
K45
K45
K45
K56
K56
Anfragen (33)
Ähnlichkeitssuche (Forts.)
„
PNR
0815
4711
1111
1234
7777
GEH > PROV:
0815: ?, 1111: ?, 1234: ?
GEH > 70K AND PROV > 50K: 0815: ?, 1111: F, 1234: ?
GEH > 70K OR PROV > 50K: 0815: T, 1111: ?, 1234: ?
Test auf Nullwert
Unscharfe Suche: LIKE-Prädikat vergleicht einen Datenwert mit einem
„Muster“ bzw. einer „Maske“
Anfragen (30)
„
40
Beispiele
„
[ NOT ] LIKE char-string-exp
[ ESCAPE char-string-exp ]
N. Ritter, DIS, SS 2005, Kapitel 5
„
nach vollständiger Auswertung einer WHERE-Klausel wird das Ergebnis ?
wie FALSE behandelt
PERS
„
„
T T T
T F ?
T ? ?
Elementares Prädikat wird zu UNKNOWN (?) ausgewertet, falls Nullwert
vorliegt
Klassen
char-string-exp
T F ?
T
F
?
Prädikate über Nullwerten (Forts.)
„
Unterstützung der Suche nach Objekten, von denen nur Teile des Inhalts
bekannt sind oder die einem vorgegebenen Suchkriterium möglichst nahe
kommen.
LIKE-Prädikat
OR
T F ?
F F F
? F ?
Anfragen (32)
Ähnlichkeitssuche
„
T
F
?
N. Ritter, DIS, SS 2005, Kapitel 5
Anfragen (29)
„
AND T F ?
F
T
?
PNR
0815
4711
1111
1234
7777
ANR
K45
K45
K45
K56
K56
GEH
80K
30K
20K
80K
PROV
50K
100K
Tupel mit NULL-Werten im Verbundattribut nehmen nicht am Verbund teil
Im allgemeinen ist AVG (GEH) <> SUM (GEH) / COUNT (PNR)
N. Ritter, DIS, SS 2005, Kapitel 5
42
7
Anfragen (34)
„
Anfragen (37)
Quantifizierung
„
„
„
„
„
ALL-or-ANY-Prädikate
„
Quantifizierung (Forts.)
„
Θ ALL: Prädikat wird zu „true“ ausgewertet, wenn der Θ-Vergleich für alle
Ergebniswerte von table-exp „true“ ist
Beispiele (Forts.)
„
Finde die Namen aller Schauspieler, die alle Rollen gespielt haben.
SELECT S.NAME
FROM
SCHAUSPIELER S
WHERE NOT EXISTS
(SELECT *
FROM
ROLLE R
WHERE NOT EXISTS
(SELECT *
FROM
DARSTELLER D
WHERE D.PNR = S.PNR
AND D.FIGUR = R.FIGUR))
Θ ANY / Θ SOME: analog, wenn der Θ-Vergleich für einen Ergebniswert
„true“ ist
Existenztests
„
row-constr Θ { ALL | ANY | SOME} (table-exp)
[NOT] EXISTS (table-exp)
Das Prädikat wird zu „false“ ausgewertet, wenn table-exp auf die leere
Menge führt, sonst zu „true“
Im EXISTS-Kontext darf table-exp mit (SELECT * ...) spezifiziert werden
(Normalfall)
Andere Formulierung: Finde die Namen der Schauspieler, so dass keine Rolle
„existiert“, die sie nicht gespielt haben.
N. Ritter, DIS, SS 2005, Kapitel 5
43
N. Ritter, DIS, SS 2005, Kapitel 5
Anfragen (35)
„
Anfragen (38)
„
Quantifizierung (Forts.)
„
„
„
„
x Θ ANY (SELECT y FROM T WHERE p) ⇔
EXISTS (SELECT * FROM T WHERE (p) AND x Θ T.y)
„
Schema: station (snr, name, ...); wettert (datum, snr, mintemp, ...)
„
Anfrage: Finde die Messstation mit der niedrigsten gemessenen Temperatur
Gute Lösung: (Aggregat-Funktion in Subquery)
SELECT s.name FROM station s, wettert w
WHERE s.snr=w.snr AND w.mintemp=
(SELECT MIN(ww.mintemp) FROM wettert ww);
x Θ ALL (SELECT y FROM T WHERE p) ⇔
NOT EXISTS (SELECT * FROM T WHERE (p) AND NOT (x Θ T.y))
Schlechte Lösung: Keine Joins
SELECT name FROM station WHERE snr=(
SELECT DISTINCT snr FROM wettert WHERE mintemp=(
SELECT MIN(mintemp) FROM wettert));
Finde die Manager, die mehr verdienen als alle ihre direkten
Untergebenen
SELECT
FROM
WHERE
M.PNR
PERS M
M.GEHALT > ALL
N. Ritter, DIS, SS 2005, Kapitel 5
(SELECT P.GEHALT
FROM
PERS P
WHERE P.MNR = M.PNR)
Naja, worst case?!: Keine Aggregat-Funktion
SELECT DISTINCT name FROM station
WHERE snr IN ( SELECT W1.snr FROM wettert W1
WHERE NOT EXISTS (SELECT * FROM wettert W2
WHERE W2.mintemp < W1.mintemp));
44
N. Ritter, DIS, SS 2005, Kapitel 5
Anfragen (36)
„
Einfügen von Tupeln
Beispiele (Forts.)
„
Finde die Namen der Schauspieler, die mindestens einmal gespielt
haben (... nie gespielt haben)
SELECT
FROM
WHERE
„
Beispiel:
INSERT INTO table [ (column-commalist) ]
{ VALUES row-constr.-commalist |
table-exp |
DEFAULT VALUES }
Füge den Schauspieler Garfield mit der PNR 4711 ein.
SP.NAME
SCHAUSPIELER SP
(NOT) EXISTS
(SELECT *
FROM
DARSTELLER DA
WHERE DA.PNR = SP.PNR)
INSERT INTO SP
(PNR, NAME, W-ORT)
VALUES (4711, „Garfield“, DEFAULT);
„
Anmerkungen (zu satzweises Einfügen)
„
„
„
N. Ritter, DIS, SS 2005, Kapitel 5
47
Datenmanipulation (1)
Quantifizierung (Forts.)
„
Beispiel
Beispiele
„
„
Es gibt meist viele Möglichkeiten
Semantik
„
46
45
Alle nicht angesprochenen Attribute erhalten Nullwerte.
Falls alle Werte in der richtigen Reihenfolge versorgt werden, kann
die Attributliste weggelassen werden.
Mengenorientiertes Einfügen ist möglich, wenn die einzufügenden Tupel
aus einer anderen Relation mit Hilfe einer SELECT-Anweisung ausgewählt
werden können.
N. Ritter, DIS, SS 2005, Kapitel 5
48
8
Datenmanipulation (2)
„
Datendefinition (1)
Einfügen von Tupeln (Forts.)
„
„
„
möglichst große Unabhängigkeit der DB-Anwendungen von speziellen DBS
Füge die Schauspieler aus KL in die Relation TEMP ein.
„
einheitliche Sprachschnittstelle genügt nicht!
INSERT INTO TEMP
„
Anmerkungen (zu mengenorientiertes Einfügen)
„
„
„
Im Beispiel sei eine (leere) Relation TEMP sei vorhanden. Die Datentypen
ihrer Attribute müssen kompatibel zu den Datentypen der ausgewählten
Attribute sein.
49
Informationsschema
„
Definitionsschema
N. Ritter, DIS, SS 2005, Kapitel 5
searched-delete
::=
„
Definitionsschema
REFERENTIAL_
CONSTRAINTS
DELETE FROM table [WHERE cond-exp]
Aufbau der WHERE-Klausel entsprecht dem der SELECT-Anweisung
Beispiele
Refs PK /
unique
Lösche den Schauspieler mit der PNR 4711.
DELETE
FROM
SCHAUSPIELER
WHERE PNR = 4711;
„
50
OR
DOMAIN_
CONSTRAINTS
DOMAINS
KEY_COLUMN_
USAGE
CHECK_TABLE_
USAGE
CHECK_COLUMN_
USAGE
DATA_TYPE_
DESCRIPTOR
>0
COLUMNS
OR
COLLATIONS
N. Ritter, DIS, SS 2005, Kapitel 5
53
Datendefinition (3)
„
Definitionsschema (Forts.)
UPDATE table SET update-assignment-commalist
[WHERE cond-exp]
>0
TABLES
COLUMNS
COLLATIONS
CHARACTER_
USAGE
Beispiel
Gib den Schauspielern, die am Pfalztheater spielen, eine Gehaltserhöhung von
5% (Annahme: GEHALT in Schauspieler).
Default
collation
VIEW_TABLE_
USAGE
VIEW
VIEW_COLUMN_
USAGE
TABLE_
PRIVILEGES
COLUMN_
PRIVILEGES
USAGE_
PRIVILEGES
UPDATE SCHAUSPIELER S
SET
S.GEHALT = S.GEHALT * 1.05
WHERE EXISTS (SELECT *
FROM DARSTELLER D
WHERE D.PNR = S.PNR AND D.THEATER = ‘Pfalz’);
target
grantor
„
SCHEMATA
Default
char set
TABLES
Ändern von Tupeln mit Hilfe von Suchklauseln
searched-update
::=
owner
Char set
Datenmanipulation (4)
„
ASSERTIONS
check
CHECK_
CONSTRAINTS
FROM
SCHAUSPIELER S
WHERE NOT EXISTS
(SELECT *
FROM DARSTELLER D
WHERE D.PNR = S.PNR);
N. Ritter, DIS, SS 2005, Kapitel 5
FK
Is FK
PK /
unique
XOR
TABLE_
CONSTRAINTS
Lösche alle Schauspieler, die nie gespielt haben.
DELETE
52
Datendefinition (2)
Löschen von Tupeln mit Hilfe von Suchklauseln
„
„
Die kopierten Tupel sind unabhängig von ihren Ursprungstupeln.
Datenmanipulation (3)
„
Zweischichtiges Definitionsmodell für die Beschreibung der Daten
Ein mengenorientiertes Einfügen wählt die spezifizierte Tupelmenge aus
und kopiert sie in die Zielrelation.
N. Ritter, DIS, SS 2005, Kapitel 5
„
Beschreibung der gespeicherten Daten und ihrer Eigenschaften nach
einheitlichen und verbindlichen Richtlinien ist genauso wichtig
„
(SELECT *
FROM
SP
WHERE W-ORT=„KL“);
„
Ziel der SQL-Normierung
Beispiel:
grantee
grantee
Einschränkung:
Innerhalb der WHERE-Klausel in einer Lösch- oder Änderungsanweisung
darf die Zielrelation in einer FROM-Klausel nicht referenziert werden.
N. Ritter, DIS, SS 2005, Kapitel 5
grantor
USERS
51
N. Ritter, DIS, SS 2005, Kapitel 5
OR
source
TRANSLATIONS
grantor
grantee
SQL_
LANGUAGES
54
9
Datendefinition (4)
„
Datendefinition (7)
Definition von Schemata
„
„
Jedes Schema ist einem Benutzer (user) zugeordnet, z.B. DBA
„
Schema erhält Benutzernamen, falls keine explizite Namensangabe erfolgt
„
„
Definition von Attributen
column-def
: : = column { data-type | domain }
[ DEFAULT { literal | niladic-function-ref | NULL} ]
[ column-constraint-def-list ]
CREATE SCHEMA [schema] [AUTHORIZATION user]
[DEFAULT CHARACTER SET char-set]
[schema-element-list]
„
Definition aller Definitionsbereiche, Basisrelationen, Sichten (Views),
Integritätsbedingungen und Zugriffsrechte
Beispiel
„
Spezifikation von
„
Attributname
„
Datentyp bzw. Domain
„
Defaultwert sowie Constraints
Beispiele:
PNAME CHAR (30)
CREATE SCHEMA Beispiel-DB AUTHORIZATION DB-Admin
PALTER ALTER (siehe Definition von Domain ALTER)
N. Ritter, DIS, SS 2005, Kapitel 5
55
N. Ritter, DIS, SS 2005, Kapitel 5
Datendefinition (5)
„
Datendefinition (8)
Datentypen
„
„
CHARACTER [ ( length ) ]
(Abkürzung: CHAR)
„
CHARACTER VARYING [ ( length ) ]
(Abkürzung: VARCHAR)
„
„
„
„
NUMERIC [ ( precision [ , scale] ) ]
„
INTEGER
„
REAL
„
...
„
DATE
„
TIME
„
...
(Abkürzung: DEC)
„
(Abkürzung: INT)
56
Eindeutigkeit (UNIQUE bzw. PRIMARY KEY)
„
FOREIGN-KEY-Klausel
„
CHECK-Bedingungen
Vorteile der Vergabe von Constraint-Namen
„
Diagnosehilfe bei Fehlern
„
gezieltes Ansprechen bei SET oder DROP des Constraints
N. Ritter, DIS, SS 2005, Kapitel 5
„
Definition von Attributen (Forts.)
„
[ [CONSTRAINT constraint] CHECK (cond-exp) [deferrability]]
Spezifikationsmöglichkeiten
Optionale Angabe von Default-Werten
„
Wertebereichseingrenzung durch benamte CHECK-Bedingung möglich
Beispiel:
Verkaufs_Preis DECIMAL (9, 2),
CONSTRAINT Ausverkauf
CHECK ( Verkaufs_Preis
<= (SELECT MIN (Preis) FROM Konkurrenz_Preise))
[DEFAULT { literal | niladic-function-ref | NULL} ]
„
59
Datendefinition (9)
CREATE DOMAIN domain [AS] data type
„
Verbot von Nullwerten (NOT NULL)
„
| references-def | CHECK (cond-exp) } [deferrability]
Definition von Domains
„
„
{ NOT NULL | { PRIMARY KEY | UNIQUE }
Datendefinition (6)
„
Als Constraints können definiert werden
column-constraint-def : : = [CONSTRAINT constraint]
N. Ritter, DIS, SS 2005, Kapitel 5
„
Definition von Attributen (Forts.)
...
DECIMAL [ ( precision [ , scale ] ) ]
58
„
Überprüfungszeitpunkt
„
CHECK-Bedingungen können Relationen der DB referenzieren;
SQL-Domänen sind also dynamisch!
„
Jeder Constraint bzgl. einer SQL2-Transaktion ist zu jedem Zeitpunkt
in einem von zwei Modi: „immediate“ oder „deferred“
Der Default-Modus ist „immediate“
Beispiele:
deferrability
CREATE DOMAIN ABTNR AS CHAR (6)
: : = INITIALLY { DEFERRED | IMMEDIATE }
CREATE DOMAIN ALTER AS INT DEFAULT NULL
CONSTRAINT ALTERSBEGRENZUNG
CHECK (VALUE=NULL OR (VALUE > 18 AND VALUE < 70))
N. Ritter, DIS, SS 2005, Kapitel 5
[ NOT ] DEFERRABLE
57
N. Ritter, DIS, SS 2005, Kapitel 5
60
10
Datendefinition (10)
„
Beziehungen (1)
Definition von Attributen (Forts.)
„
„
Aufbau der FOREIGN-KEY-Klausel
(1:n)-Beziehung
„
Beispiel (ERM):
[0,n]
ABT
references-def : : =
ist_
beschäftigt_
in
[0,1]
PERS
REFERENCES base-table [ (column-commalist)]
[ON DELETE
referential-action]
[ON UPDATE
referential-action]
„
Abbildung
ABT ( ABTNR ...,
referential-action
PERS (
ANR ...,
PRIMARY KEY (ABTNR))
PRIMARY KEY (PNR),
: : = NO ACTION | CASCADE | RESTRICT | SET DEFAULT | SET NULL
FOREIGN KEY (ANR) REFERENCES ABT)
„
„
Fremdschlüssel kann auch auf Schlüsselkandidat definiert sein
„
Referentielle Aktionen werden später behandelt
PNR ...,
...
Referenzgraph:
ABT
ANR
referenzierte
PERS
referenzierende
Relation
N. Ritter, DIS, SS 2005, Kapitel 5
61
N. Ritter, DIS, SS 2005, Kapitel 5
Datendefinition (11)
„
Beziehungen (2)
Erzeugung von Basisrelationen
„
CREATE TABLE base-table (base-table-element-commalist)
(1:n)-Beziehung (Forts.)
„
base-table-element
Mögliche zusätzliche Regeln:
„
„
Definition aller zugehörigen Attribute mit Typfestlegung
„
Spezifikation aller Integritätsbedingungen (Constraints)
„
PRIMARY KEY,
ANAME
CHAR (30)
NOT NULL,
ANZAHL-ANGEST
INT
NOT NULL,
N. Ritter, DIS, SS 2005, Kapitel 5
nicht einschränken (außer [0,1]).
62
„
Beispiel (Forts.):
TABLE PERS
INT
CHAR (30),
CHAR (30)
ALTER,
INT
ABTNR
CHAR (25)
DEC (9,2)
Vorschlag: PENDANT-Klausel, mit der der Fall [1,n] abgedeckt werden kann.
„
Bei der Erstellung müssen solche Beziehungen verzögert überprüft werden.
65
Beziehungen (3)
Erzeugung von Basisrelationen (Forts.)
CREATE
( PNR
BERUF
PNAME
PALTER
MGR
ANR
W-ORT
GEHALT
„
N. Ritter, DIS, SS 2005, Kapitel 5
Datendefinition (12)
„
In SQL2 kann (im Rahmen der Erzeugung von Relationen) nicht spezifiziert werden,
dass ein Vater einen Sohn haben muss, z. B. [1,n]; die Anzahl der Söhne lässt sich
. . .)
„
Bemerkung:
„
CREATE TABLE ABT
ABTNR
Jede Abteilung (ABT: [0,1]) darf höchstens einen Angestellten beschäftigen:
PERS.ANR ... UNIQUE
„
Beispiel: Definition der Relationen ABT und PERS
(ANR
Jeder Angestellte (PERS) muss in einer Abteilung beschäftigt sein ([1,1]):
PERS.ANR ... NOT NULL
::= column-def | base-table-constraint-def
„
64
(1:n)-Beziehung (Forts.)
„
Beispiel (ERM):
[0,n]
PRIMARY KEY,
hat_
Büro_
von
[1,1]
ABT
NOT NULL,
(* siehe Domaindefinition *)
REFERENCES PERS,
NOT NULL, (* Domaindef. *)
DEFAULT ’ ’,
DEFAULT 0,00
CHECK (GEHALT < 120.000,00)
PERS
[0,n]
„
[0,1]
Abbildung
ABT (ABTNR ...,
...
FOREIGN KEY (ANR) REFERENCES ABT )
arbeitet_
für
PRIMARY KEY (ABTNR))
PERS (PNR ...,
ANRA ...,
ANRB... NOT NULL,
PRIMARY KEY (PNR),
FOREIGN KEY (ANRA) REFERENCES ABT,
N. Ritter, DIS, SS 2005, Kapitel 5
63
N. Ritter, DIS, SS 2005, Kapitel 5
FOREIGN KEY (ANRB) REFERENCES ABT)
66
11
Beziehungen (4)
„
Beziehungen (7)
(1:n)-Beziehung (Forts.)
„
„
Referenzgraph (zu obigem Beispiel)
Symmetrische (1:1)-Beziehung
„
Beispiel (ERM)
„
Abbildung
ANRB
ABT
ABT
PERS
ANRA
„
ABT (ANR ...,
MNR ... UNIQUE NOT NULL,
...
PRIMARY KEY (ANR),
FOREIGN KEY (MNR)
REFERENCES MGR)
Bemerkung:
„
Für jede FS-Beziehung benötigt man einen separaten FS.
„
Mehrere FS können auf denselben PS/SK verweisen.
„
„
N. Ritter, DIS, SS 2005, Kapitel 5
67
„
hat_
Mgr
[0,1]
leitet_
Abt
[0,1]
Variation über Schlüsselkandidaten
MGR (SVNR ...,
MNR ... UNIQUE,
...
...
PRIMARY KEY (ANR),
PRIMARY KEY (SVNR)
FOREIGN KEY (MNR)
FOREIGN KEY (MNR)
„
„
REFERENCES ABT(MNR))
Es sind alternative Lösungen möglich
Die Nutzung von Schlüsselkandidaten mit der Option NOT NULL
erlaubt die Darstellung des Falles ([1,1] , [1,1])
Alle Kombinationen mit [0,1] und [1,1] sind möglich
Alternative Lösungen möglich!
N. Ritter, DIS, SS 2005, Kapitel 5
68
N. Ritter, DIS, SS 2005, Kapitel 5
Beziehungen (6)
71
Beziehungen (9)
(1:1)-Beziehung (Forts.)
„
70
REFERENCES MGR(MNR)
MGR (MNR ...,
ANR ... UNIQUE,
...
PRIMARY KEY (MNR),
FOREIGN KEY (ANR)
REFERENCES ABT)
„
„
MGR
MNR
MNR ... UNIQUE,
Abbildung
ABT (ANR ...,
MNR ... UNIQUE,
...
PRIMARY KEY (ANR),
FOREIGN KEY (MNR)
REFERENCES MGR)
„
ABT
Fall ([0,1] , [0,1]) so nicht darstellbar
ABT (ANR ...,
MGR
[0,1]
„
MNR
Nutzung des MNR-Attributes für
beide FS-Beziehungen gewährleistet
Einhaltung der (1:1)-Beziehung
Symmetrische (1:1)-Beziehung (Forts.)
„
[0,1]
ABT
„
MGR (MNR ...,
...
PRIMARY KEY (MNR),
FOREIGN KEY (MNR)
REFERENCES ABT(MNR))
Beziehungen (8)
(1:1)-Beziehung
Beispiel (ERM):
MGR
N. Ritter, DIS, SS 2005, Kapitel 5
Beziehungen (5)
„
[1,1]
leitet
Referenzgraph
„
„
[1,1]
„
Mögliche zusätzliche Regeln zu obigem Beispiel:
(Symmetrische) (1:1)-Beziehung (Forts.)
„
„
Jede Abteilung hat einen Manager → ABT.MNR ... UNIQUE NOT NULL
„
Jeder Manager leitet eine Abteilung → MGR.ANR ... UNIQUE NOT NULL
Diskussion der verschiedenen Ansätze (siehe Folien oben) am Beispiel
Referenzgraph
MNR
ABT
MGR
ABT
MGR
a1
1
a2
2
a3
3
a4
4
ANR
„
Frage:
„
Kann durch die beiden (n:1)-Beziehungen eine symmetrische (1:1)-Beziehung
ausgedrückt werden?
N. Ritter, DIS, SS 2005, Kapitel 5
69
1. Ansatz:
ABT (ANR, MNR, ...)
PERS (MNR, ANR, ...)
a1
1
1
a2
a2
2
2
a3
a3
3
3
a1
a4
-
4
-
N. Ritter, DIS, SS 2005, Kapitel 5
72
12
Beziehungen (10)
„
Beziehungen (13)
(Symmetrische) (1:1)-Beziehung (Forts.)
„
„
Diskussion der verschiedenen Ansätze (siehe Folien oben) am Beispiel
„
ABT
MGR
a1
1
a2
2
a3
3
a4
4
„
„
2. Ansatz:
„
ABT (ANR, MNR, ...)
a1
1
1
a2
2
2
a3
3
3
?
?
N. Ritter, DIS, SS 2005, Kapitel 5
„
ABT
MGR
a1
1
a2
2
a3
3
a4
4
Reflexive (1:n)-Beziehung
„
„
hat_
Mgr
Abbildung
MNR ...,
...
PRIMARY KEY (PNR),
PERS (SVNR, MNR, ...)
1
x
1
a2
2
y
2
a3
3
z
3
a4
-
w
-
FOREIGN KEY (MNR) REFERENCES PERS (PNR))
„
74
„
bearbeitet
[0,m]
Reflexive (1:n)-Beziehung (Forts.)
PROJ
„
PERS (PNR ...,
...
PRIMARY KEY (PNR))
77
Beziehungen (15)
(n:m)-Beziehung
[0,n]
MNR
N. Ritter, DIS, SS 2005, Kapitel 5
Beziehungen (12)
PERS
Referenzgraph
PERS
N. Ritter, DIS, SS 2005, Kapitel 5
Abbildung
[0,1]
PERS (PNR ...,
a1
„
[0,n]
Beispiel (ERM)
PERS
3. Ansatz:
Beispiel (ERM)
76
Beziehungen (14)
Diskussion der verschiedenen Ansätze (siehe Folien oben) am Beispiel
„
PROJ
JNR
MITARBEIT
73
ABT (ANR, MNR, ...)
„
Zugehöriger Referenzgraph
PNR
(Symmetrische) (1:1)-Beziehung (Forts.)
„
Ist die Realisierung von [1,n] oder [1,m] bei der Abbildung der (n:m)Beziehung möglich?
PERS
Beziehungen (11)
„
Diese Standardlösung (siehe vorangegangene Folie) erzwingt eine
„Existenzabhängigkeit“ von MITARBEIT; soll dies vermieden werden, dürfen
die Fremdschlüssel von MITARBEIT nicht als Teil des Primärschlüssels
spezifiziert werden.
PERS (MNR, ...)
N. Ritter, DIS, SS 2005, Kapitel 5
„
(n:m)-Beziehung (Forts.)
PROJ (JNR ...,
...
PRIMARY KEY (JNR))
„
MITARBEIT (PNR ...,
JNR ...,
„
PRIMARY KEY (PNR, JNR),
Mit Hilfe dieser Lösung (siehe vorangegangene Folie) kann die PersonalHierarchie eines Unternehmens dargestellt werden;
die referentielle Beziehung stellt hier eine partielle Funktion dar, da die
„obersten“ Manager einer Hierarchie keinen Manager haben
MNR ... NOT NULL lässt sich nur realisieren, wenn die „obersten“ Manager als
ihre eigenen Manager interpretiert werden;
dadurch treten jedoch Referenzzyklen auf, was die Frageauswertung und die
Konsistenzprüfung erschwert
Welche Beziehungsstruktur erzeugt MNR ... UNIQUE NOT NULL?
FOREIGN KEY (PNR) REFERENCES PERS,
FOREIGN KEY (JNR) REFERENCES PROJ)
N. Ritter, DIS, SS 2005, Kapitel 5
75
N. Ritter, DIS, SS 2005, Kapitel 5
78
13
Beziehungen (16)
„
Datendefinition (14)
Abbildung von Beziehungen - Zusammenfassung
„
„
„
Relationenmodell ‚hat‘ wertbasierte Beziehungen
„
„
Alle Beziehungen (FS ↔ PS/SK) sind binär und symmetrisch
„
Auflösung einer Beziehung geschieht durch Suche
„
Es sind i. allg. k (1:n)-Beziehungen zwischen zwei Relationen möglich
„
Objektorientierte Datenmodelle haben referenzbasierte Beziehungen!
„
Spezifikationsmöglichkeiten in SQL
SK
FS
FBNR
PNR PNAME FBNR FACHGEBIET
PRUEFUNG
79
Abbildung von Beziehungen – Zusammenfassung (Forts.)
„
82
Beispiel (Forts.)
„
Spezifikationsmöglichkeiten in SQL (Forts.)
Fremdschlüsseldeklaration in S:
S
0,n
0,1
FS ...
0,n
1,1
FS ...
NOT NULL
0,1
0,1
FS ...
UNIQUE
0,1
1,1
FS ...
UNIQUE NOT NULL
80
Datendefinition - Wertebereiche:
CREATE DOMAIN
FACHBEREICHSNUMMER
AS
CHAR
CREATE DOMAIN
FACHBEREICHSNAME
AS
VARCHAR
(20)
CREATE DOMAIN
FACHBEZEICHNUNG
AS
VARCHAR
(20)
CREATE DOMAIN
NAMEN
AS
VARCHAR
(30)
CREATE DOMAIN
PERSONALNUMMER
AS
CHAR
CREATE DOMAIN
MATRIKELNUMMER
AS
INT
CREATE DOMAIN
NOTEN
AS
SMALLINT
CREATE DOMAIN
DATUM
AS
DATE
N. Ritter, DIS, SS 2005, Kapitel 5
Datendefinition (13)
(4)
(4)
83
Datendefinition (16)
Beispiel
„
PNR MATNR FACH PDATUM NOTE
N. Ritter, DIS, SS 2005, Kapitel 5
Datendefinition (15)
N. Ritter, DIS, SS 2005, Kapitel 5
„
DEKAN
PROF
PRIMARY KEY
(implizit: UNIQUE NOT NULL)
UNIQUE [NOT NULL]
[UNIQUE] [NOT NULL]
V
FBNAME
MATNR SNAME FBNR STUDBEG
Beziehungen (17)
„
FB
STUDENT
N. Ritter, DIS, SS 2005, Kapitel 5
„
Illustration des DB-Schemas
Fremdschlüssel (FS) und zugehöriger Primärschlüssel/Schlüsselkandidat
(PS/SK) repräsentieren eine Beziehung (gleiche Wertebereiche!)
PS
„
Beispiel (Forts.)
„
Miniwelt (ER-Diagramm)
Beispiel (Forts.)
„
Datendefinition - Relationen:
CREATE TABLE FB (
Fachbereich
0,N
0,N
1,1
ist-Dekanvon
0,1
gehört-zu
isteingeschr.in
FBNR
FACHBEREICHSNUMMER
PRIMARY KEY,
FBNAME
FACHBEREICHSNAME
UNIQUE,
DEKAN
PERSONALNUMMER
UNIQUE NOT NULL,
CONSTRAINT FFK FOREIGN KEY (DEKAN)
REFERENCES PROF (PNR)
1,1
1,1
ON UPDATE CASCADE
ON DELETE RESTRICT)
Prof
N. Ritter, DIS, SS 2005, Kapitel 5
0,N
Prüfung
0,M
Student
81
N. Ritter, DIS, SS 2005, Kapitel 5
84
14
Datendefinition (17)
„
Datendefinition (20)
Beispiel (Forts.)
„
Beispiel (Forts.)
„
Datendefinition – Relationen (Forts.):
„
Ausprägungen
CREATE TABLE PROF (
FB
PNR
PERSONALNUMMER
PRIMARY KEY,
PNAME
NAMEN
NOT NULL,
FBNR
FACHBEREICHSNUMMER
NOT NULL,
FACHGEBIET
FACHBEZEICHNUNG,
PROF PNR
1234
5678
4711
6780
2223
PNAME
FBNR
FACHGEBIET
HÄRDER
WEDEKIND
MÜLLER
NEHMER
RICHTER
FB 5
FB 9
FB 9
FB 5
FB 5
DATENBANKSYSTEME
INFORMATIONSSYSTEME
OPERATIONS RESEARCH
BETRIEBSSYSTEME
EXPERTENSYSTEME
CONSTRAINT PFK1 FOREIGN KEY (FBNR)
REFERENCES FB (FBNR)
„
STUDENT
Es wird darauf verzichtet, die Rückwärtsrichtung der „ist-Dekan-von“-Beziehung
explizit als Fremdschlüsselbeziehung zu spezifizieren. Damit fällt auch die mögliche
Spezifikation von referentiellen Aktionen weg.
N. Ritter, DIS, SS 2005, Kapitel 5
85
4711
2223
MATNR
FACH
PDATUM NOTE
5678
4711
1234
1234
6780
1234
6780
123 766
123 766
654 711
123 766
654 711
196 481
196 481
BWL
OR
DV
DV
SP
DV
BS
22.10.97
16. 1.98
17. 4.97
17. 4.97
19. 9.97
15.10.97
23.12.97
MATNR
SNAME
FBNR
STUDBEG
123 766
225 332
654 711
226 302
196 481
130 680
COY
MÜLLER
ABEL
SCHULZE
MAIER
SCHMID
FB 9
FB 5
FB 5
FB 9
FB 5
FB 9
1.10.95
15. 4.87
15.10.94
1.10.95
23.10.95
1. 4.97
„
„
Primärschlüsselbedingung: Eindeutigkeit, keine Nullwerte!
CREATE TABLE STUDENT (
„
Fremdschlüsselbedingung: Zugehöriger PS (SK) muss existieren
MATRIKELNUMMER
88
Relationale Invarianten / referentielle Integrität:
Datendefinition – Relationen (Forts.):
MATNR
4
3
2
4
2
1
3
Wartung von Beziehungen (1)
Beispiel (Forts.)
„
DEKAN
WIRTSCHAFTSWISS
INFORMATIK
N. Ritter, DIS, SS 2005, Kapitel 5
Datendefinition (18)
„
FBNAME
PRÜFUNG PNR
ON UPDATE CASCADE
ON DELETE SET DEFAULT)
FBNR
FB 9
FB 5
PRIMARY KEY,
SNAME
NAMEN
NOT NULL,
FBNR
FACHBEREICHSNUMMER
NOT NULL,
„
Potentielle Gefährdung
„
STUDBEG DATUM,
Operationen in der Sohn-Relation
„
Einfügen eines Sohn-Tupels
„
Ändern des FS in einem Sohn-Tupel
„
Löschen eines Sohn-Tupels
„
Welche Maßnahmen sind erforderlich?
CONSTRAINT SFK FOREIGN KEY (FBNR)
REFERENCES FB (FBNR)
ON UPDATE CASCADE
ON DELETE RESTRICT)
„
Beim Einfügen erfolgt eine Prüfung, ob in einem Vater-Tupel ein
PS/SK-Wert gleich dem FS-Wert des einzufügenden Tupels existiert
„
N. Ritter, DIS, SS 2005, Kapitel 5
86
N. Ritter, DIS, SS 2005, Kapitel 5
Datendefinition (19)
„
„
Datendefinition – Relationen (Forts.):
Potentielle Gefährdung (Forts.)
„
CREATE TABLE PRUEFUNG (
Operationen in der Vater-Relation
PNR
PERSONALNUMMER,
„
Löschen eines Vater-Tupels
MATNR
MATRIKELNUMMER,
„
Ändern des PS/SK in einem Vater-Tupel
FACH
FACHBEZEICHNUNG,
„
Einfügen eines Vater-Tupels
PDATUM
DATUM
NOT NULL,
„
Welche Reaktion ist wann möglich/sinnvoll?
NOTE
NOTEN
NOT NULL,
PRIMARY KEY (PNR, MATNR),
„
Verbiete Operation
„
Lösche/ändere rekursiv Tupel mit zugehörigen FS-Werten
„
CONSTRAINT PR1FK FOREIGN KEY (PNR)
REFERENCES PROF (PNR)
„
ON UPDATE CASCADE
ON DELETE CASCADE,
CONSTRAINT PR2FK FOREIGN KEY (MATNR)
REFERENCES STUDENT (MATNR)
ON UPDATE CASCADE
N. Ritter, DIS, SS 2005, Kapitel 5
ON DELETE CASCADE)
89
Wartung von Beziehungen (2)
Beispiel (Forts.)
„
Beim Ändern eines FS-Wertes erfolgt eine analoge Prüfung
87
Falls Sohn-Tupel erhalten bleiben soll (nicht immer möglich, z.B.
bei Existenzabhängigkeit), setze FS-Wert zu NULL oder Default
Wie geht man mit NULL-Werten um?
„
Spezielle Semantiken von NULL-Werten
„
Dreiwertige Logik verwirrend: T, F, ?
„
Setzung: NULL ≠ NULL (z. B. beim Verbund)
„
bei Operationen: Ignorieren von NULL-Werten
N. Ritter, DIS, SS 2005, Kapitel 5
90
15
Wartung von Beziehungen (3)
„
„
Wartung von Beziehungen (6)
SQL2-Standard führt „referential actions“ ein
„
Sind „Nullen“ verboten ?
„
Löschregel für Zielrelation (referenzierte Relation)
„
„
NOT NULL
„
ON DELETE
{CASCADE | RESTRICT | SET NULL | SET DEFAULT | NO ACTION}
„
ON UPDATE
{CASCADE | RESTRICT | SET NULL | SET DEFAULT | NO ACTION}
„
Die Option RESTRICT wird hier explizit aufgeführt; sie entspricht dem Fall,
dass die gesamte Klausel weggelassen wird.
N. Ritter, DIS, SS 2005, Kapitel 5
„
91
FBNR
PNR
PNAME
123766
COY
FB9
1234
HAERDER
654711
ABEL
FB5
4711
„
USN, DSN →
Schlüsselverletzung
USD, DSD →
ggf. Mehrdeutigkeit
UNA, DNA →
Wirkung identisch mit UR, DR
CASCADE: Operation „kaskadiert“ zu allen zugehörigen Sätzen
„
SET NULL: FS wird in zugehörigen Sätzen zu „Null“ gesetzt
„
SET DEFAULT: FS wird in den zugehörigen Sätzen auf einen benutzer-
OR
654711
DV
1234
123766
DV
4711
654711
OR
DC
DC
FBNR
FBNR
PNR
MATNR
STUDENT
DC
DC
PRUEFUNG
„
unterschiedlichen Optionen) betroffen sein; am Ende aller zugehörigen
referentiellen Aktionen wird die Einhaltung der referentiellen Integrität geprüft
„
N. Ritter, DIS, SS 2005, Kapitel 5
92
STUDENT
FBNR
Eindeutigkeit: Ergebnis der Operation ist reihenfolge-unabhängig
→ sicheres Schema!
95
Wartung von Beziehungen (8)
Diskussion der Auswirkungen referentieller Aktionen am Beispiel
1. Isolierte Betrachtung von STUDENT-FB
Lösche FB (mit FBNR „FB9“)
‘ erst links’:
‘erst rechts’:
- Löschen in FB
- Löschen in FB
- Löschen in PROF
- Löschen in STUDENT
- Löschen in PRUEFUNG
- Löschen in PRUEFUNG
- Löschen in STUDENT
- Löschen in PROF
- Löschen in PRUEFUNG
- Löschen in PRUEFUNG
N. Ritter, DIS, SS 2005, Kapitel 5
Wartung von Beziehungen (5)
„
Diskussion der Auswirkungen referentieller Aktionen am Beispiel (Forts.)
3. Vollständiges Beispiel –
Modifiziertes Schema
FB
FB
DC
DC
Beispiel-DB
MATRNR
SNAME
FBNR
FBNR
FBNAME
123766
COY
FB9
FB9
WIRTSCHAFTSWISS
225332
MÜLLER
FB5
FB5
INFORMATIK
654711
ABEL
FB5
226302
SCHULZE
FB9
„
Operationen
„
Referentielle Aktionen
FB
„
Lösche FB (mit FBNR „FB5“)
„
Ändere FB (FBNR=„FB9“ → FBNR=„FB10“)
„
DC, DSN, DSD, DR, DNA
„
UC, USN, USD, UR, UNA
N. Ritter, DIS, SS 2005, Kapitel 5
123766
1234
94
PROF
ausgeführt. Durch eine DB-Operation können jedoch mehrere Referenzen (mit
STUDENT
4711
FB
NO ACTION: Für die spezifizierte Referenz wird keine referentielle Aktion
„
MUELLER
MATRNR FACH
Diskussion der Auswirkungen referentieller Aktionen am Beispiel (Forts.)
definierten Default-Wert gesetzt
„
PRUEFUNG PNR
„
Unabhängigkeit von Beziehungen hinsichtlich referentieller Aktionen?
3. Vollständiges Beispiel
RESTRICT: Operation wird nur ausgeführt, wenn keine zugehörigen
Sätze (FS-Werte) vorhanden sind
„
„
PROF
Wartung von Beziehungen (7)
Genauere Spezifikation der referentiellen Aktionen (Forts.)
„
SNAME
N. Ritter, DIS, SS 2005, Kapitel 5
Wartung von Beziehungen (4)
„
PRUEFUNG
MATRNR
Einsatz von
„
„
MATNR
Beispiel-DB
STUDENT
Änderungsregel für Ziel-Primärschlüssel (PS oder SK)
„
STUDENT
PROF
PNR
„
„
Diskussion der Auswirkungen referentieller Aktionen am Beispiel (Forts.)
2. Isolierte Betrachtung von STUDENT-PRUEFUNG-PROF
Genauere Spezifikation der referentiellen Aktionen für jeden
Fremdschlüssel (FS)
STUDENT
PROF
DC
DR
PRUEFUNG
„
93
Lösche FB (mit FBNR „FB9“)
‘ erst links’:
- Löschen in FB
- Löschen in PROF
- Löschen in PRUEFUNG
- Löschen in STUDENT
- Zugriff auf PRUEFUNG
Wenn ein Student bei einem
FB-fremden Professor geprüft wurde
→ Rücksetzen
N. Ritter, DIS, SS 2005, Kapitel 5
‘erst rechts’:
- Löschen in FB
- Löschen in STUDENT
- Zugriff auf PRUEFUNG
Wenn ein gerade gelöschter Student
eine Prüfung abgelegt hatte
→ Rücksetzen
sonst:
- Löschen in PROF
- Löschen in PRUEFUNG
96
16
Wartung von Beziehungen (9)
„
Wartung von Beziehungen (12)
Diskussion der Auswirkungen referentieller Aktionen am Beispiel (Forts.)
3. Vollständiges Beispiel –
Modifiziertes Schema (Forts.)
„
DC
DC
STUDENT
PROF
DC
DR
„
PRUEFUNG
„
Es können reihenfolgenabhängige Ergebnisse auftreten!
„
Die Reihenfolgenabhängigkeit ist hier wertabhängig
97
„
DC
bei wertabhängigen Konflikten zu restriktiv (konfliktträchtige Schemata)
Dynamische Überwachung der Modifikationsoperationen
hoher Laufzeitaufwand
Maßnahmen zur Verhinderung von Mehrdeutigkeiten - Vorgehensweisen
DNA
PRUEFUNG
„
sie werden verboten, oder
„
sie werden erlaubt und
„
‘erst rechts’:
- Löschen FB
- Löschen STUDENT
- Löschen PROF
- Löschen PRUEFUNG
Test, ob es noch offene
Referenzen in PRUEFUNG
auf gelöschte Studenten gibt;
wenn ja → Rücksetzen
„
„
98
falls ein Konflikt erkannt wird, wird die Operation zurückgesetzt
„
Durchführung der referentiellen Aktionen (RA)
„
FB
Zyklische Referenzpfade
FS1
DC
DC
STUDENT
PROF
DC
ABT
FS2
„
Bei der NA-Option wird der explizite Test der referenzierenden Relation
ans Ende der Operation verschoben. Eine Verletzung der referentiellen
Beziehung führt zum Rücksetzen → Schema ist immer sicher
N. Ritter, DIS, SS 2005, Kapitel 5
MGR
DNA
PRUEFUNG
„
101
Wartung von Beziehungen (14)
Diskussion der Auswirkungen referentieller Aktionen am Beispiel (Forts.)
3. Vollständiges Beispiel –
Nochmalig modifiziertes
Schema (Forts.)
die referentiellen Aktionen werden bei jeder Operation dynamisch
überwacht
N. Ritter, DIS, SS 2005, Kapitel 5
Wartung von Beziehungen (11)
„
100
2. Alternative Möglichkeiten zur Behandlung konfliktträchtiger Schemata, nach
dem die statische Schemaanalyse die Sicherheit des Schemas nicht feststellen
konnte
STUDENT
PROF
Lösche FB (mit FBNR „FB9“)
‘ erst links’:
- Löschen FB
- Löschen PROF
- Löschen PRUEFUNG
- Löschen STUDENT
Test, ob es noch offene
Referenzen in PRUEFUNG
auf gelöschte Studenten gibt;
wenn ja → Rücksetzen
N. Ritter, DIS, SS 2005, Kapitel 5
hohe Komplexität der Analysealgorithmen
„
1. Falls Sicherheit eines Schemas festgestellt werden kann, ist keine Laufzeitüberwachung erforderlich
FB
DC
nur bei einfach strukturierten Schemata effektiv
„
Wartung von Beziehungen (13)
Diskussion der Auswirkungen referentieller Aktionen am Beispiel (Forts.)
DC
„
N. Ritter, DIS, SS 2005, Kapitel 5
Wartung von Beziehungen (10)
3. Vollständiges Beispiel –
Nochmalig modifiziertes
Schema
Statische Schemaanalyse zur Feststellung sicherer DB-Schemata
„
N. Ritter, DIS, SS 2005, Kapitel 5
„
Maßnahmen zur Verhinderung von Mehrdeutigkeiten
„
FB
„
99
wenigstens ein Fremdschlüssel im Zyklus muss „NULL“ erlauben
oder
Prüfung der referentiellen Integrität muss verzögert (DEFERRED)
werden (z. B. bei COMMIT)
N. Ritter, DIS, SS 2005, Kapitel 5
102
17
Wartung von Beziehungen (15)
„
Schemaevolution (3)
Durchführung der referentiellen Aktionen (Forts.)
„
„
Verarbeitungsmodell
Dynamische Änderung von Tabellen - Beispiele:
„
„
Benutzeroperationen (Op) sind in SQL immer atomar
„
mengenorientiertes oder tupelorientiertes Verarbeitungsmodell
ALTER TABLE Pers ADD Svnr INT UNIQUE
ALTER TABLE Abt ADD Geh-Summe INT
Op
Op
„
t1
t1
Erweiterung der Tabellen Abt und Pers um neue Spalten
t2
tn
RA
RA
Verkürzung der Tabelle Pers um eine Spalte
ALTER TABLE Pers DROP COLUMN Alter RESTRICT
...
t2 ... tn
RA
RA‘s
„
„
„
IMMEDIATE-Bedingungen müssen erfüllt sein an Anweisungsgrenzen
(→ mengenorientierte Änderung)
N. Ritter, DIS, SS 2005, Kapitel 5
„
103
„
„
Erzeugen/Löschen von Tabellen (und Sichten)
„
Hinzufügen, Ändern und Löschen von Spalten
„
Anlegen/Ändern von referentiellen Beziehungen
„
Hinzufügen, Modifikation, Wegfall von Integritätsbedingungen
„
„
Zusätzliche Änderungen im DB-Schema durch veränderte Anforderungen
bei der DB-Nutzung
Dynamisches Anlegen von Zugriffspfaden
„
Aktualisierung der Zugriffskontrollbedingungen
N. Ritter, DIS, SS 2005, Kapitel 5
„
„
104
{TABLE base-table ⎢ VIEW view |
DOMAIN domain | SCHEMA schema }
{RESTRICT | CASCADE}
Falls Objekte (Tabellen, Sichten, ...) nicht mehr benötigt werden, können sie
durch die DROP-Anweisung aus dem System entfernt werden.
Mit der CASCADE-Option können ’abhängige’ Objekte (z.B. Sichten auf
Tabellen oder anderen Sichten) mitentfernt werden
RESTRICT verhindert Löschen, wenn die zu löschende Tabelle noch durch
Sichten oder Integritätsbedingungen referenziert wird
N. Ritter, DIS, SS 2005, Kapitel 5
Schemaevolution (2)
„
106
Löschen von Schemaelementen
DROP
Hoher Grad an logischer Datenunabhängigkeit ist sehr wichtig!
„
CASCADE dagegen erzwingt die Folgelöschung aller Sichten und Check-Klauseln, die
von der Spalte abhängen.
Schemaevolution (4)
Wachsender oder sich ändernder Informationsbedarf
„
Da RESTRICT spezifiziert ist, wird die Operation zurückgewiesen, wenn die Spalte in
einer Sicht oder einer Integritätsbedingung (Check) referenziert wird.
N. Ritter, DIS, SS 2005, Kapitel 5
Schemaevolution (1)
„
Wenn die Spalte die einzige der Tabelle ist, wird die Operation zurückgewiesen.
107
Schemaevolution (5)
Dynamische Änderung von Tabellen
„
Löschen von Schemaelementen - Beipiele
„
ALTER TABLE base-table
{ ADD [COLUMN] column-def
| ALTER [COLUMN] column
{SET default-def | DROP DEFAULT}
| DROP [COLUMN] column {RESTRICT | CASCADE}
| ADD base-table-constraint-def
| DROP CONSTRAINT constraint {RESTRICT | CASCADE}}
Löschen von Tabelle Pers
DROP TABLE Pers RESTRICT
„
PersConstraint sei definiert auf Pers
ALTER TABLE Pers
DROP CONSTRAINT PersConstraint CASCADE
DROP TABLE Pers RESTRICT
„
Durchführung der Schemaevolution
„
„
N. Ritter, DIS, SS 2005, Kapitel 5
105
Aktualisierung von Tabellenzeilen des SQL-Definitionsschemas
“tabellengetriebene” Verarbeitung der Metadaten durch das DBS
N. Ritter, DIS, SS 2005, Kapitel 5
108
18
Indexierung (1)
„
„
Indexierung (4)
Einsatz von Indexstrukturen
„
„
Beschleunigung der Suche: Zugriff über Spalten (Schlüsselattribute)
„
Kontrolle von Integritätsbedingungen (relationale Invarianten)
„
Zeilenzugriff in der logischen Ordnung der Schlüsselwerte
„
Gewährleistung der Clustereigenschaft für Tabellen
„
Aber auch: erhöhter Aktualisierungsaufwand und Speicherplatzbedarf
IPers(Anr)
8
„
„
61
33
45
Wurzelseite
77
85
Zwischenseiten
Datenunabhängigkeit des Relationenmodells erlaubt ein Hinzufügen und Löschen
Blattseiten
jederzeit möglich, um z. B. bei veränderten Benutzerprofilen das Leistungsverhalten zu
optimieren
“beliebig” viele Indexstrukturen pro Tabelle und mit unterschiedlichen
Spaltenkombinationen als Schlüssel möglich
„
Steuerung der Eindeutigkeit der Schlüsselwerte, der Clusterbildung
„
Freiplatzanteil (PCTFREE) in jeder Indexseite beim Anlegen erleichtert das Wachstum
„
Spezifikation: DBA oder Benutzer
N. Ritter, DIS, SS 2005, Kapitel 5
Datenseiten
109
N. Ritter, DIS, SS 2005, Kapitel 5
Indexierung (2)
Im SQL-Standard keine Anweisung vorgesehen, jedoch in realen
Systemen (z. B. IBM DB2):
„
Beispiele
„
Erzeugung einer Indexstruktur mit Clusterbildung auf der Spalte Anr
von Abt
CREATE UNIQUE INDEX Persind1 ON Abt (Anr) CLUSTER
„
Nutzung eines vorhandenen Index
„
112
Indexierung (5)
CREATE [UNIQUE] INDEX index
ON base-table (column [ORDER] [,column[ORDER]] ...)
[CLUSTER] [PCTFREE]
„
13
25
Einrichtung von Indexstrukturen
„
„
Index ohne Clusterbildung
Entscheidung durch DBS-Optimizer
„
Realisierung z. B. durch B*-Baum
(oder Hashing, mit verminderter Funktionalität)
„
UNIQUE: keine Schlüsselduplikate im Index
„
CLUSTER: zeitoptimale sortiert-sequentielle Verarbeitung (Scan-Operation)
Erzeugung einer Indexstruktur auf den Spalten Anr
(absteigend) und Gehalt (aufsteigend) von Pers.
CREATE INDEX Persind2 ON Pers (Anr DESC, Gehalt ASC)
N. Ritter, DIS, SS 2005, Kapitel 5
110
N. Ritter, DIS, SS 2005, Kapitel 5
Indexierung (3)
„
Indexierung (6)
Index mit Clusterbildung
IAbt(Anr)
8
13
„
25
33
61
45
Wurzelseite
77
85
Typische Implementierung eines Index: B*-Baum
(wird von allen DBS angeboten!)
„
dynamische Reorganisation durch Aufteilen (Split) und Mischen von Seiten
„
Wesentliche Funktionen
„
Zwischenseiten
„
Blattseiten
„
Datenseiten
N. Ritter, DIS, SS 2005, Kapitel 5
113
111
direkter Schlüsselzugriff auf einen indexierten Satz
sortiert sequentieller Zugriff auf alle Sätze
(unterstützt Bereichsanfragen, Verbundoperation usw.)
Balancierte Struktur
„
unabhängig von Schlüsselmenge
„
unabhängig von Einfügereihenfolge
N. Ritter, DIS, SS 2005, Kapitel 5
114
19
Indexierung (6)
„
Sichten (3)
Typische Implementierung eines Index: B*-Baum (Forts.)
„
ES = SL/EL = max. # Einträge/Seite
„
hB = Baumhöhe
„
NT = #Zeilenverweise im B*-Baum
„
NB = #Blattseiten im B*-Baum
„
NTmin = 2 (ES/2)
„
Realistische Größenverhältnisse: hB = 3 und EL= 20 B
„
Sichten zur Gewährleistung von Datenunabhängigkeit
Benutzer
hb-1
hb
≤ NT ≤ ES
Sicht 1
= NTmax
Tabelle 1
Seitenformat
im B*-Baum
Sicht 2
Sicht 3
Tabelle 2
Tabelle 3
S L = 8 KB
Key | Ptr
.. .
EL ≈ 20 B
N. Ritter, DIS, SS 2005, Kapitel 5
115
N. Ritter, DIS, SS 2005, Kapitel 5
Sichten (1)
„
„
„
Sichten (4)
Ziel: Festlegung
„
Eigenschaften von Sichten
„
welche Daten Benutzer sehen wollen (Vereinfachung, leichtere Benutzung)
„
Sicht kann wie eine Tabelle behandelt werden
„
welche Daten sie nicht sehen dürfen (Datenschutz)
„
Sichtsemantik: „dynamisches Fenster“ auf zugrundeliegende Tabellen
„
einer zusätzlichen Abbildung (erhöhte Datenunabhängigkeit)
„
Sichten auf Sichten sind möglich
„
eingeschränkte Änderungen: aktualisierbare und nicht-aktualisierbare Sichten
Sicht (View)
„
„
118
mit Namen bezeichnete, aus Tabellen abgeleitete, virtuelle Tabelle (Anfrage)
Korrespondenz zum externen Schema bei ANSI/SPARC
(Benutzer sieht jedoch i. allg. mehrere Sichten (Views) und Tabellen)
Syntax
CREATE VIEW view [ (column-commalist ) ]
AS table-exp
[WITH [ CASCADED | LOCAL] CHECK OPTION]
N. Ritter, DIS, SS 2005, Kapitel 5
116
N. Ritter, DIS, SS 2005, Kapitel 5
Sichten (2)
„
Sichten (5)
Beispiele
„
„
Semantik von Sichten – ‚dynamisches Fenster‘
Sicht, die alle Programmierer mit einem Gehalt < 30.000 umfasst.
CREATE VIEW
Arme_Programmierer (Pnr, Name, Beruf, Gehalt, Anr)
AS
SELECT Pnr, Name, Beruf, Gehalt, Anr
FROM Pers
WHERE Beruf = ’Programmierer’ AND Gehalt < 30 000
„
119
Sicht V als dynamisches Fenster
Tabelle R ( A1,
A2,
A3,
A4,
A5 )
t1:
a11
a12
a13
a14
a15
t4:
a41
a42
a43
a44
a45
Sicht für den Datenschutz
CREATE VIEW Statistik (Beruf, Gehalt)
AS
SELECT Beruf, Gehalt
FROM Pers
N. Ritter, DIS, SS 2005, Kapitel 5
117
N. Ritter, DIS, SS 2005, Kapitel 5
120
20
Sichten (6)
„
Sichten (9)
Sichtbarkeit von Änderungen
„
„
Wann werden welche Datenänderungen in der Tabelle/Sicht für die anderen
Benutzer sichtbar? (Beachte Beispiel auf vorangegangener Folie)
Abbildung von Sicht-Operationen auf Tabellen
„
Abbildungsprozess auch über mehrere Stufen durchführbar
„
Vor BOT
von T1, T2
Insert t2
B1 sieht R = {t1, t4}
T1
B2 sieht V = {t1‘}
T2
Select t4
R=
Sichtendefinitionen
CREATE VIEW V AS SELECT ... FROM R WHERE P
Nach EOT
von T1, T2
CREATE VIEW W AS SELECT ... FROM V WHERE Q
?
„
Anfrage
SELECT ... FROM W WHERE C
Insert t3‘
Select t2‘
V=
?
„
Ersetzung durch
SELECT ... FROM V WHERE Q AND C
SELECT ... FROM R WHERE Q AND P AND C
N. Ritter, DIS, SS 2005, Kapitel 5
121
N. Ritter, DIS, SS 2005, Kapitel 5
Sichten (7)
„
Sichten (10)
Sichtbarkeit von Änderungen
„
„
Wann werden welche Datenänderungen in der Tabelle/Sicht für die anderen
Benutzer sichtbar? (Forts.)
„
„
A2,
A3,
A4,
A5 )
a12
a13
a14
a15
a24
a25
t1:
a11
t2:
a21
a22
a23
t3:
≡
a32
a33
a34
≡
t4:
a41
a42
a43
a44
a45
Einschränkungen der Abbildungsmächtigkeit
„
Sicht V als dynamisches Fenster
Tabelle R ( A1,
N. Ritter, DIS, SS 2005, Kapitel 5
„
„
Anfrage
SELECT AVG (Gsumme) FROM Abtinfo
Ersetzung durch (bei naiver Vorgehensweise)
SELECT ?
FROM Pers
GROUP BY Anr
122
N. Ritter, DIS, SS 2005, Kapitel 5
125
Sichten (11)
Abbildung von Sicht-Operationen auf Tabellen
„
Sichtendefinition
CREATE VIEW Abtinfo (Anr, Gsumme) AS
SELECT Anr, SUM (Gehalt)
FROM Pers
GROUP BY Anr
Sichten (8)
„
keine Schachtelung von Aggregat-Funktionen und Gruppenbildung (GROUP-BY)
keine Aggregat-Funktionen in WHERE-Klausel möglich
Beispiel
„
„
124
„
Sichten werden i. allg. nicht explizit und permanent gespeichert, sondern SichtOperationen werden in äquivalente Operationen auf Tabellen umgesetzt
Umsetzung ist für Leseoperationen meist unproblematisch
Löschen von Sichten:
„
Beispiel
DROP VIEW Arme_Programmierer CASCADE
„
Anfrage (Sichtreferenz):
SELECT Name, Gehalt
FROM
Arme_Programmierer
WHERE Anr = ‘K55’
„
Alle referenzierenden Sichtdefinitionen und Integritätsbedingungen
werden mitgelöscht
RESTRICT würde eine Löschung zurückweisen, wenn die Sicht in
weiteren Sichtdefinitionen oder CHECK-Constraints referenziert werden
würde.
Ersetzung durch:
SELECT Name, Gehalt
FROM
PERS
WHERE Anr = ‘K55’
AND Beruf = ’Programmierer’ AND Gehalt < 30 000
N. Ritter, DIS, SS 2005, Kapitel 5
123
N. Ritter, DIS, SS 2005, Kapitel 5
126
21
Sichten (12)
„
Sichten (15)
Änderbarkeit von Sichten
„
WITH CHECK OPTION (Forts.)
alle Sichten
Sichtdef.
Prädikat
SA
theoretisch änderbare Sichten
CHECKOption
VA
___
VN
___
VI
CASCADED
SN
in SQL änderbare Sichten
•••
SI
„
Änderbarkeit in SQL
S I-1
„
nur eine Tabelle (Basisrelation oder Sicht)
„
Schlüssel muss vorhanden sein
„
keine Aggregatfunktionen, Gruppierung und Duplikateliminierung
V I-1
R
N. Ritter, DIS, SS 2005, Kapitel 5
127
N. Ritter, DIS, SS 2005, Kapitel 5
Sichten (13)
„
„
Sichten über mehrere Tabellen sind im Allg. nicht änderbar
WITH CHECK OPTION (Forts.)
„
Annahmen
„
W = ΠA2,A3,B1,B2 (R
S)
A3 = B1
„
Not Null ?
W
„
R(
A1,
A2,
A3)
B1,
B2,
B3)
a11
a21
a31
S(
a31
b21
b31
a12
a22
a31
a32
b22
b32
a13
a23
a32
„
„
„
„
Ändern?
N. Ritter, DIS, SS 2005, Kapitel 5
128
„
Einfügungen und Änderungen müssen das die Sicht definierende Prädikat
erfüllen, sonst Zurückweisung
„
Spezifikationsmöglichkeiten
Weglassen der CHECK-Option
„
WITH CASCADED CHECK OPTION oder äquivalent WITH CHECK OPTION
„
WITH LOCAL CHECK OPTION
N. Ritter, DIS, SS 2005, Kapitel 5
erscheint irgendeine aktualisierte Zeile von SA nicht in SI, so wird die
Operation zurückgesetzt
Es ist möglich, dass Zeilen aufgrund von gültigen Einfüge- oder
Änderungsoperationen aus SA verschwinden
131
Aktualisierte Sicht besitzt WITH CHECK OPTION
„
nur auf aktualisierbaren Sichten definierbar
„
als Prüfbedingung wird von SI aus an SA “vererbt”:
V = VI ∧ VI-1 ∧ . . . ∧ V1
WITH CHECK OPTION (Forts.)
„
„
Oberhalb von SI tritt keine LOCAL-Bedingung auf
Sichten (17)
WITH CHECK OPTION
„
SI ist die höchste Sicht im Abstammungspfad von SA, die die Option
CASCADED besitzt
N. Ritter, DIS, SS 2005, Kapitel 5
Sichten (14)
„
Sicht SA mit dem die Sicht definierenden Prädikat VA wird aktualisiert
Aktualisierung von SA
Einfügen ?
„
130
Sichten (16)
Änderbarkeit von Sichten (Forts.)
„
LOCAL/CASCADED/___
•••
„
„
129
Default ist CASCADED
Als Prüfbedingung bei Aktualisierungen ergibt sich
V = VA ∧ V N ∧ . . . ∧ V I ∧ . . . ∧ V 1
Zeilen können jetzt aufgrund von gültigen Einfüge- oder
Änderungsoperationen nicht aus SA verschwinden
LOCAL hat eine undurchsichtige Semantik
„
wird hier nicht diskutiert
„
Empfehlung: nur Verwendung von CASCADED
N. Ritter, DIS, SS 2005, Kapitel 5
132
22
Sichten (18)
„
Zusammenfassung (1)
WITH CHECK OPTION (Forts.)
„
R
SQL-Anfragen
„
Mengenorientierte Spezifikation, verschiedene Typen von Anfragen
„
Vielfalt an Suchprädikaten
„
Auswahlmächtigkeit von SQL ist höher als die der Relationenalgebra.
Sichtenhierarchie:
S1
S2 mit V1 Λ V2
S1 mit V1 und CASCADED
S2
U1
R
„
I1
„
„
I1 und U1 erfüllen das S2-definierende Prädikat V1 ∧ V2
„
I2 und U2 erfüllen das S1-definierende Prädikat V1
„
I3 und U3 erfüllen das S1-definierende Prädikat V1 nicht
N. Ritter, DIS, SS 2005, Kapitel 5
133
Mengenorientierte Datenmanipulation
„
Datendefinition
„
SQL erlaubt nur die Spezifikation von binären Beziehungen.
Referentielle Integrität von FS --> PS/SK wird stets gewährleistet.
Sicht1 auf Pers: AP1, mit Beruf = ‘Progr’ AND Gehalt < ‘30K’
„
Rolle von PRIMARY KEY, UNIQUE, NOT NULL
Sicht2 auf AP1: AP2, mit Gehalt > ‘20K’
„
Tabelle Pers
„
„
Sichtdef.
Prädikat
1
___
CHECK-Optionen
2
3
4
___
CASC CASC
___
___
„
AP1
< ‘30K’
CASC
CASC
N. Ritter, DIS, SS 2005, Kapitel 5
134
Es sind stets sichere Schemata anzustreben
Schemaevolution
„
Indexstrukturen als B*-Bäume
„
Operationen
1
2
3
4
„
INSERT INTO AP2 (PNR, BERUF, GEHALT, ANR)
„
VALUES ( 1234, ‘Progr’ , ‘25K’, ‘K55’)
INSERT INTO AP2 (PNR, BERUF, GEHALT, ANR)
VALUES ( 4711, ‘Progr’ , ‘15K’, ‘K55’)
UPDATE AP2
137
WHERE ANR = ‘K55’
AP2: > 20K
-
AP1: < 30K
-
CASC
CASC
CASC
-
CASC
135
Änderung/Erweiterung von Spalten, Tabellen, Integritätsbedingungen, ...
mit und ohne Clusterbildung spezifizierbar
Balancierte Struktur unabhängig von Schlüsselmenge und
Einfügereihenfolge
„
dynamische Reorganisation durch Aufteilen (Split) und Mischen von Seiten
„
direkter Schlüsselzugriff auf einen indexierten Satz
„
SET Gehalt = Gehalt + ‘10K’
N. Ritter, DIS, SS 2005, Kapitel 5
Falls eine statische Schemaanalyse zu restriktiv für die Zulässigkeit
eines Schemas ist, muss für das gewünschte Schema eine
Laufzeitüberwachung der referentiellen Aktionen erfolgen.
„
Beispiel (Forts.)
3.
SQL2/3 bietet reichhaltige Optionen für referentielle Aktionen
„
Zusammenfassung (3)
WITH CHECK OPTION (Forts.)
2.
„
N. Ritter, DIS, SS 2005, Kapitel 5
Sichten (20)
1.
Es ist nur eine eingeschränkte Nachbildung von Kardinalitätsrestriktionen
möglich; insbesondere kann nicht spezifiziert werden, dass „ein Vater Söhne
haben muss“.
Wartung der referentiellen Integrität
„
PERS
„
136
Kontrolle von Beziehungen
„
„
> ‘20K’
„
Spezifikation des Überprüfungszeitpunktes
„
Beispiel
AP2
„
CHECK-Bedingungen für Wertebereiche, Attribute und Relationen
„
Zusammenfassung (2)
WITH CHECK OPTION (Forts.)
„
„
N. Ritter, DIS, SS 2005, Kapitel 5
Sichten (19)
„
Optimierung der Anfrageauswertung durch das DBS
„
Aktualisierungsoperationen in S2 (welche sind erlaubt?)
„
Erklärungsmodell für die Anfrageauswertung: Festlegung der Semantik
von Anfragen mit Hilfe von Grundoperationen
sortiert sequentieller Zugriff auf alle Sätze
(unterstützt Bereichsanfragen, Verbundoperation usw.
N. Ritter, DIS, SS 2005, Kapitel 5
138
23
Zusammenfassung (4)
„
Sichtenkonzept
„
Erhöhung der Benutzerfreundlichkeit
„
Flexibler Datenschutz
„
Erhöhte Datenunabhängigkeit
„
Rekursive Anwendbarkeit
„
Eingeschränkte Aktualisierungsmöglichkeiten
N. Ritter, DIS, SS 2005, Kapitel 5
139
24
Herunterladen