1 Rückblick Abbildung E/R-Modell auf Relationales Modell (Tabellenmodell) –ENTITY-TYPES...
-
Upload
friederike-henschen -
Category
Documents
-
view
105 -
download
1
Transcript of 1 Rückblick Abbildung E/R-Modell auf Relationales Modell (Tabellenmodell) –ENTITY-TYPES...
1
Rückblick
• Abbildung E/R-Modell auf Relationales Modell (Tabellenmodell)– ENTITY-TYPES
– RELATIONSHIP-TYPES (1:N / N:M / 1:1)
– Generalisierungshierarchie
• SQL-Anweisungen Überblick– CREATE TABLE
– CREATE DOMAIN [AS] Datentyp [CHECK]
– SELECT ... FROM ... WHERE ...
– UPDATE, INSERT INTO, DELETE FROM,
– Datentypen, Vergleichsoperatoren, Aggregationsfunktionen
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
2
Offene Fragen
schreibweise Datentyp Date:
• Date'1995-06-22'
• Hochkomma: '
• Bei Strings: ' ' wird Gross-Kleinschreibung unterschieden,
• ansonsten (Schlüsselwörter, Tabellennamen, Attributnamen) wird Gross-Kleinschreibung nicht unterschieden .
• INSERT INTO : Zuweisung erfolgt über Position; bei Textfeldern müssen die Werte in Hochkomma eingefasst werden.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
3
Ausblick heute
• Relationale Algebra (theoretische Basis)
• SQL detaillierter / systematischer / vollständiger– CREATE TABLE
– SELECT ... FROM ... WHERE ...
• JOIN (Verbund)
• NULL-Werte 3wertige Logik / Semantik
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
Relationale Algebra
(Relationenalgebra)
5
Relationale Algebra
Die relationale Algebra (Relationenalgebra)
bildet den formalen Rahmen für die
relationalen Datenbanksprachen.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
6
Relationale Algebra
Relationale Datenbanksprachen, die die Operationen der Relationenalgebra sinngemäss umsetzen, heissen
relational vollständige Sprachen.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
7
Relationale Algebra
Die relationale Algebra (Relationenalgebra) setzt Relationen (Tabellen) in der
ersten Normalform voraus.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
8
Relationale Algebra
Man unterscheidet:
• Mengenorientierte Operatoren
• Relationenorientierte Operatoren
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
9
Relationale Algebra
Alle Operatoren der Relationenalgebra
bilden eine oder zwei Tabellen auf eine neue Tabelle ab.
Tabelle1 Tabelle2
Tabelle1, Tabelle2 Tabelle3
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
10
Relationale Algebra
Mengenorientierte Operatoren:
• Vereinigung R S
• Durchschnitt R S
• Differenz R \ S
• Kartesisches Produkt R x S
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
11
Relationale Algebra
Vorraussetzung für die Anwendung der mengenorientierten OperatorenR S, R S, R \ S
ist das Verträglichkeitskriterium
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
12
Verträglichkeitskriterium
Die in die Operationen (R S, R S, R \ S) involvierten Tabellen R und S weisen die gleiche Anzahl Attribute auf und die Domänen / Datenformate der korres-pondierenden Attribute sind identisch.Die Ergebnistabelle hat dann auch die gleiche Anzahl Attribute mit den gleichen Domänen.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
13
Relationale Algebra
Ansonsten können die Operatoren der Relationenalgebra weitgehend ohne Einschränkung miteinander kombiniert werden.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
14
Mengenorientierte Operatoren
R
S
R S
R
S
R
S
R S
R \ S
R
S
R x S
Kartesisches Produkt:={(x,y): R(x) S(y)}
{t| t R or t S} {t| t R and t S} {t| t R and t S}
Vereinigung Duchschnitt Differenz
15
Relationale AlgebraVereinigung (R S):• Die Vereinigungstabelle enthält alle
Datensätze, die in R oder in S enthalten sind.
• Da es sich um die mengentheoretische Vereinigung handelt, werden Duplikate dabei eliminiert.
• Zur Anwendung der Vereinigung müssen R und S gleiche Stelligkeit und verträgliche Domänen haben.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
16
Relationale AlgebraDurchschnitt (R S):• Die Durchschnittstabelle von R und S
enthält alle Datensätze (Tupel), die in R und in S enthalten sind.
• Alle Datensätze (Tupel) sind nur einmal enthalten.
• Zur Anwendung des Durchschnitts müssen R und S gleiche Stelligkeit und verträgliche Domänen haben.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
17
Relationale AlgebraDifferenz (R \ S):• Die Ergebnistabelle der Differenzoperation
zwischen R und S enthält alle Datensätze (Tupel) , die in R und nicht in S enthalten sind.
• Zur Anwendung des Durchschnitts müssen R und S gleiche Stelligkeit und verträgliche Domänen haben.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
18
Relationale AlgebraKartesisches Produkt (R S):• Das Kartesische Produktes R S zwischen
R und S ist die Menge aller möglichen Kombinationen (x,y), die sich aus den Tupeln x aus R und y aus S bilden lassen.
• Zur Anwendung des Kartesischen Produktes muss das Verträglichkeitskriterium nicht gelten, d.h. die Attribute der beteiligten Relationen müssen nicht gleiche Stelligkeit und verträgliche Domänen haben.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
19
Relationale AlgebraKartesisches Produkt: R x S
Beispiel
Gegeben seien die Relationen
R = {(1,Julia), (2,Michael)}
und
S = {(1,Julia), (3,Toni)}
R x S = {(1,Julia,1,Julia), (1,Julia,3,Toni), (2, Michael, 1,Julia), (2,Michael,
3,Toni)}Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
20
Beispieltabelle
M# Name Strasse Ort A#-Unt
M1 Meier Lindstrasse Liestal A3
M7 Huber Mattenweg Basel A5
M19 Schweizer Hauptstrasse Zürich A6
M4 Becker Wasserweg Liestal A6
Mitarbeiter
21
Beispieltabelle
M# Name Strasse Ort
M1 Meier Lindstrasse Liestal
M7 Huber Mattenweg Basel
M19 Schweizer Hauptstrasse Zürich
Sportclub
22
Beispieltabelle
M# Mitglied Strasse Ort
M4 Becker Wasserweg Liestal
M7 Huber Mattenweg Basel
Fotoclub
23
Beispieltabelle
M# Name Strasse Ort
M1 Meier Lindstrasse Liestal
M7 Huber Mattenweg Basel
M19 Schweizer Hauptstrasse Zürich
M4 Becker Wasserweg Liestal
Clubmitglieder = Sportclub Fotoclub
24
Beispieltabelle
M# Name Strasse Ort
M7 Huber Mattenweg Basel
Clubmitglieder = Sportclub Fotoclub
25
Beispieltabelle
M# Name Strasse Ort
M1 Meier Lindstrasse Liestal
M19 Schweizer Hauptstrasse Zürich
Clubmitglieder = Sportclub \ Fotoclub
26
Relationale AlgebraRelationenorientierte Operatoren:• Projektion der Tabelle R auf eine Menge von
Merkmalen M: M (R)
• Selektion von Zeilen aus einer Tabelle R mittels einer Formel F: F (R)
• Verbund zweier Tabellen R und S durch Prädikat P: R |X|P S
• Division der Tabelle R durch die Teiltabelle S: R S
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
27
Relationenorientierte Operatoren
R
S
Verbund von R und S durch Prädikat P
R |X|P S
M (R)
R
R
R
F (R)
Projektionvon R auf M
Selektionvon R mittels F
28
Relationenorientierte Operatoren
R
Divison der Tabelle Rdurch die Teiltabelle S
R S
S
29
Relationale Algebra
Projektion: Wir setzen hier voraus, daß M eine
Teilmenge aller Attribute von R (A1,..., An)
ist.
Die Projektion entsteht aus R durch Weglassen aller Attribute von R, die nicht in M aufgeführt sind. Dabei auftretende Duplikate (Datensätze) müssen entfernt werden.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
30
Relationale Algebra
Projektion:
Beispiel
R = {(42,18,Maria), (99,42,Max), (42,30,Maria)}
Projektion(R,1.Stelle, 3.Stelle) = {(42,Maria), (99, Max)}
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
31
Beispiel - Projektion
Ort
Liestal
Basel
Zürich
Ort (Mitarbeiter)
32
Beispiel 2 Projektion
A#-Unt Name
A3 Meier
A5 Huber
A6 Schweizer
A6 Becker
A#-Unt,Name (Mitarbeiter)
33
BeispieltabelleKartesisches Produkt:Wettkampfpaarungen: (Sportclub \ Fotoclub) x Fotoclub
MitgliedM# M#Name Strasse StrasseOrt Ort
M1M1M19M19
M4M7M4M7
MeierMeierSchweizerSchweizer
LindstrasseLindstrasseHauptstrasseHauptstrasse
LiestalLiestalZürichZürich
BeckerHuberBeckerHuber
WasserwegMattenwegWasserwegMattenweg
LiestalBaselLiestalBasel
34
Relationale AlgebraDivision: R S
Setzt voraus, dass S in R enthalten ist!!!
R S berechnet eine Teiltabelle R´von R mit der Eigenschaft, dass R´ x S R.
R´muss dabei maximal sein.
R´ enthält genau die Attribute von R, die nicht in S vorkommen.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
35
M# PROJ#
M1M1M1M2M2M4M4
P1P2P4P1P2P2P4
PROJ#
P2P4
M#
M1M4
RTabelle der den Projekten zugeordneten Mitarbeiter
Beispiel Division
SR´
Mitarbeiter, die gleichzeitig an ProjektenP2 und P4 arbeiten
R´´= R´ x S
36
Beispiel Verbund: Ausgangstabellen
M# UntOrtStrasseNameM19M1M7M4
SchweizerMeierHuberBecker
HauptstrasseLindstrasseMattenwegWasserweg
ZürichLiestalBaselLiestal
A6A3A5A6
Mitarbeiter
A# BezeichnungA3A5A6
InformatikPersonalFinanz
Abteilung
37
Beispiel Verbund
M# UntOrtStrasseNameM19M1M7M4
SchweizerMeierHuberBecker
HauptstrasseLindstrasseMattenwegWasserweg
ZürichLiestalBaselLiestal
A6A3A5A6
Mitarbeiter ||Unt=A# Abteilung
A# BezeichnungA6A3A5A6
FinanzInformatikPersonalFinanz
38
Verbund
Es gilt folgende Formel:
R ||P S = P R S
Dies bedeutet, dass der Verbund von R und S mittels P durch das Kartesische Produkt von R und S plus anschliessender Selektion mittels P definiert werden kann.
39
Relationale Algebra• Vereinigung• Differenz• Kartesisches Produkt• Projektion• Selektion
sind die kleinst mögliche Menge von Operatoren der Relationenalgebra. Alle anderen können dadurch definiert werden.
Beispiel: R S := R \ (R \ S)
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
SQL DDL
41
SQL DDL
CREATE TABLEALTER TABLEDROP TABLE
CREATE DOMAINALTER DOMAINDROP DOMAIN
CREATE VIEWDROP VIEW
CREATE INDEXALTER INDEXDROP INDEX
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
Konzeptuelle Ebene
Konzeptuelle Ebene / SQL 92
Externe Ebene
Interne Ebene
42
CREATE TABLE
Allgemein:
CREATE TABLE table_name(spaltendefinitionsliste[,tabellenintegritätsregelliste]);
spaltendefinition ::=spaltenname typangabe [default-Klausel]
[spaltenintegritätsregelliste]
tabellenintegritätsregel ::=
check-klausel | primary_key-klausel |
unique-klausel | foreign-key-klausel
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
43
CREATE TABLE
Der Tabellenname muss innerhalb der Datenbank eindeutig sein!
Innerhalb einer Tabellendefinition müssen die Attributnamen ebenfalls eindeutig sein!
Integritätsregeln können als Spalten- oder als Tabellenintegritätsregeln formuliert werden.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
44
DDL CREATE TABLE
Mögliche Integritätsregeln:• Primärschlüssel
• weitere Schlüssel (Schlüsselkandidaten)
• Fremdschlüssel mit Bezugstabelle
• Einschränkungen für die Wertebereiche der Spalten
• Verbot von Nullmarken in Spalten
• Spaltenübergreifende Integritätsbedingungen
• tabellenübergreifende Integritätsbedingungen
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
45
Spaltendefinition
Allgemein:
spaltendefinition ::=spaltenname typangabe [default-Klausel]
[spaltenintegritätsregelliste]
„typangabe“ ist ein Datentyp oder eine in der Datenbank definierte Domäne.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
46
Spaltendefinition
DEFAULT-Klausel:default-klausel ::=
DEFAULT NULL | DEFAULT systemvariable | DEFAULT literal
NULL: Standardmässig wird eine Nullmarke eingesetzt.
Mögliche Systemvariable:
CURRENT_USER, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP
literal ist eine explizite Angabe des DEFAULT-Werts. Sie muss zu der Datentypdefinition bzw. der Domäne der Spalte passen.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
47
Spaltendefinition
DEFAULT-Klausel (Beispiel):
CREATE TABLE vorschlag (
vorschlagsnr INTEGER NOT NULL,
mitarbeitername CHAR(30) DEFAULT CURRENT_USER,
datum DATE DEFAULT CURRENT_DATE,
art vorschlagsart DEFAULT ‘informatik‘,
vorschlag VARCHAR(200)
);
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
48
Spaltendefinition
Domain-Definition
CREATE DOMAIN vorschlagsart AS char(30)
CHECK (VALUE IN ('informatik'‚ 'mathematik'));
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
49
Spaltendefinition
Spaltenintegritätsregel (Beispiel):
CREATE TABLE vorschlag (
vorschlagsnr INTEGER NOT NULL,
mitarbeitername CHAR(30) DEFAULT CURRENT_USER,
datum DATE DEFAULT CURRENT_DATE,
art vorschlagsart DEFAULT ‘informatik‘,
vorschlag VARCHAR(200)
);
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
50
Spaltendefinition
Spaltenintegritätsregel (Beispiel):CREATE TABLE Kunde (kundennr INTEGER NOT NULL,status CHAR(1) NOT NULL
CHECK (status IN (‘W‘, ‘G‘, ‘S‘)),Name CHAR(30) NOT NULL,zahlungsart CHAR(1) NOT NULL DEFAULT ‘N‘
CHECK (zahlungsart IN (‘R‘, ‘B‘, ‘N‘,‘V‘,‘K‘)),Ort CHAR (39) NOT NULL,PRIMARY KEY (kundennr));
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
51
Spalten- Tabellenintegrität
Falls sich eine Tabellenintegritätsregel nur auf eine Spalte (ein Attribut) bezieht unterscheidet sie sich inhaltlich (semantisch) und von der Form her nicht von der sinngleichen Spaltenintegritätsregel.
Der Unterschied ergibt sich nur aus der Position in der DELETE TABLE Anweisung.
Um spaltenübergreifende Integritätsregeln zu formulieren muss eine Tabellenintegritätsregel verwendet werden.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
52
Spalten- Tabellenintegrität
Bei jeder Datenänderung wird sichergestellt, dass die in den Integritätsregeln formulierten Bedingungen nicht den Wert false annehmen können.
Der Wert unknown der dreiwertigen Logik, der durch NULL-Marken repräsentiert wird, ist allerdings zulässig
CHECK (liefermenge <= bestellmenge)
wird akzeptiert für liefermenge IS NULL
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
53
Tabellenintegritätsregel
CHECK-Klausel (allgemeine Form):
CHECK (bedingung)• „bedingung“ ist analog der WHERE-Klausel in der
SELECT-Anweisung definiert.
• Dabei sind auch Unterabfragen zulässig, die sich auf andere Tabellen in der gleichen DB beziehen.
• Bei jeder Datenänderung wird sichergestellt, dass „bedingung“ nicht den Wert „false“ annimmt, „unknown“ ist hingegen erlaubt.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
54
Tabellenintegritätsregel
CHECK-Klausel (Beispiel):CREATE TABLE Kunde (kundennr INTEGER NOT NULL,status CHAR(1) NOT NULL,Name CHAR(30) NOT NULL,zahlungsart CHAR(1) NOT NULL DEFAULT
‘N',Ort CHAR (39) NOT NULL,CHECK (status IN (‘W‘, ‘G‘, ‘S‘)),CHECK (zahlungsart IN (‘R‘, ‘B‘, ‘N‘,‘V‘,‘K‘)));
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
55
Tabellenintegritätsregel
PRIMARY KEY-Klausel (allgemeine Form):
PRIMARY KEY (spaltenliste)
Die PRIMARY KEY-Klausel ist nicht verbindlicher Bestandteil der CREATE TABLE-Anweisung.
Jede Relation muss allerdings einen Primary Key haben.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
56
Tabellenintegritätsregel
CHECK-Klausel ermöglicht:
• weitere Festlegungen bezüglich der erlaubten Spaltenwerte
• die Formulierung spaltenübergreifender Integritätsbedingungen
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
57
Tabellenintegritätsregel
CHECK-Klausel (Beispiel):
CREATE TABLE bestellung (
kundennr INTEGER NOT NULL,
liefermenge INTEGER,
bestellmenge INTEGER,
CHECK (liefermenge <= bestellmenge)
);
Es ist zulässig, dass eines der beiden Attribute einen Nullwert hat.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
58
Tabellenintegritätsregel
PRIMARY KEY-Klausel (Beispiel 1):
CREATE TABLE bestellung (
kundennr INTEGER NOT NULL,
liefermenge INTEGER,
bestellmenge INTEGER,
CHECK (liefermenge <= bestellmenge),
PRIMARY KEY (kundennr)
);
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
59
Tabellenintegritätsregel
PRIMARY KEY-Klausel (Beispiel 1):
CREATE TABLE bestellung (
kundennr INTEGER,
liefermenge INTEGER,
bestellmenge INTEGER,
CHECK (liefermenge <= bestellmenge),
PRIMARY KEY (kundennr)
);
Auf die Angabe „NOT NULL“ kann verzichtet werden:
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
60
Tabellenintegritätsregel
PRIMARY KEY-Klausel (Beispiel 2):
Bei einspaltigem Primärschlüssel ist auch folgende Festlegung möglich:
CREATE TABLE bestellung (
kundennr INTEGER PRIMARY KEY,
liefermenge INTEGER,
bestellmenge INTEGER,
CHECK (liefermenge <= bestellmenge)
);
Der Schlüssel bezieht sich dennoch auf die ganze Tabelle!
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
61
Tabellenintegritätsregel
Beispiel:CREATE TABLE Kunde (kundennr INTEGER NOT NULL,status CHAR(1) NOT NULL,Name CHAR(30) NOT NULL,zahlungsart CHAR(1) NOT NULL DEFAULT
‘N',Ort CHAR (39) NOT NULL,CHECK (status IN (‘W‘, ‘G‘, ‘S‘)),CHECK (zahlungsart IN (‘R‘, ‘B‘, ‘N‘,‘V‘,‘K‘)),PRIMARY KEY (kundennr));Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
62
Tabellenintegritätsregel
FOREIGN KEY-Klausel (allgemeine Form):
foreign_key-klausel ::=
FOREIGN KEY (spaltenliste)REFERENCES tabellenname [(spaltenliste)][ON DELETE änderungsaktion]ON UPDATE änderungsaktion]
Unterstützung der referentiellen Integrität!!!
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
63
Tabellenintegritätsregel
FOREIGN KEY-Klausel (Beispiel):CREATE TABLE bestellung (bestellnr INTEGER NOT NULL,kundennr INTEGER NOT NULL,bestelldatum DATE NOT NULL,lieferdatum DATE,rechnungsbetrag MONEY,PRIMARY KEY (bestellnr),FOREIGN KEY (kundennr) REFERENCES Kunde);
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
64
Tabellenintegritätsregel
FOREIGN KEY-Klausel (Beispiel-Kurzform):CREATE TABLE bestellung (bestellnr INTEGER NOT NULL,kundennr INTEGER NOT NULL
FOREIGN KEY REFERENCES Kunde,bestelldatum DATE NOT NULL,lieferdatum DATE,rechnungsbetrag MONEY,PRIMARY KEY (bestellnr));
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
65
FOREIGN KEY-Klausel
Aktionsregeln für referentielle Integrität:änderungsaktion ::=
NO ACTION | CASCADE | SET NULL | SET DEFAULT
Änderung am Primärschlüssel können – verboten werden (NO ACTION)– an Fremdschlüssel weitergeben werden (CASCADE)– Fremdschlüsselwert auf Null setzen (SET NULL)– Fremdschlüsselwert auf Defaultwert setzen (SET DEFAULT)
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
66
FOREIGN KEY-Klausel
NO ACTION
Jegliche Änderung an den referenzierten Schlüsselwerten ist untersagt, wenn es korrespondierende Fremdschlüsselwerte gibt.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
67
FOREIGN KEY-Klausel
CASCADE
Die per Fremdschlüsselwert korrespondierenden Zeilen in der abhängigen Tabelle werden entsprechend manipuliert, wenn der Schlüsselwert gelöscht oder geändert wird. Wird z.B. ein Kunde gelöscht, werden auch die zugehörigen Bestellungen gelöscht.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
68
FOREIGN KEY-Klausel
SET NULL
Korrespondierende Fremdschlüsselwerte werden auf NULL gesetzt, wenn der referentielle Schlüssel manipuliert wird.
Dies setzt voraus, dass für die Fremdschlüsselwerte Nullmarken zugelassen sind.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
69
FOREIGN KEY-Klausel
SET DEFAULT
Alle entsprechenden Fremdschlüsselwerte werden auf den bei der Tabellendefinition mit der DEFAULT-Klausel definierten Default-Wert gesetzt, wenn der Primärschlüssel verändert wird.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
70
Tabellenintegritätsregel
FOREIGN KEY-Klausel (Beispiel 2):CREATE TABLE position (bestellnr INTEGER NOT NULL,artikelnr INTEGER NOT NULL,bestellmenge INTEGER NOT NULL,liefermenge INTEGER,gesamtpreis MONEY,PRIMARY KEY (bestellnr, artikelnr),FOREIGN KEY (bestellnr) REFERENCES bestellungON UPDATE CASCADEON DELETE CASCADE);
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
71
Tabellenintegritätsregel
FOREIGN KEY-Klausel (Beispiel 3):
Bei vorliegen der Regel (in der Tabelle „bestellung“) FOREIGN KEY (kundennr) REFERENCES kunde
wird DROP TABLE kunde
nicht ausgeführt.
DROP TABLE kunde CASCADElöscht die ganze Integritätsdefinition aus der Tabelle „bestellung“.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
72
Tabellenintegritätsregel
UNIQUE-Klausel (allgemeine Form):
unique-klausel ::=
UNIQUE(spaltenliste)
dient dazu, Schlüsselkandidaten zu verwalten
Schlüsselkandidaten dürfen wie Primärschlüssel nicht mehrfach vorkommen.
NULL-Werte sind allerdings erlaubt, d.h. sie werden nicht automatisch ausgeschlossen.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
73
Tabellenintegritätsregel
UNIQUE-Klausel (Beispiel):CREATE TABLE Kunde (kundennr INTEGER NOT NULL,status CHAR(1) NOT NULL,Name CHAR(30) NOT NULL,zahlungsart CHAR(1) NOT NULL DEFAULT ‘N',Ort CHAR (39) NOT NULL,debitoren_kontonr INTEGER NOT NULL,UNIQUE (debitoren_kontonr),PRIMARY KEY (kundennr));
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
74
Tabellenintegritätsregel
UNIQUE-Klausel (Beispiel 2):CREATE TABLE Kunde (kundennr INTEGER NOT NULL,...debitoren_kontonr INTEGER NOT NULL UNIQUE,PRIMARY KEY (kundennr));
UNIQUE kann bei einspaltigem Kandidatenschlüssel auch in Kurzform als Bestandteil der Spaltendefinition verwendet werden
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
75
tabellenübergreifende Integritätsregeln
ASSERTION-Statement
CREATE ASSERTION assertion-nameCHECK (bedingung) [attributliste]
„bedingung“ formuliert die Bedingung, die nicht verletzt werden darf
Ist in vielen DBMS noch nicht realisiert.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
76
tabellenübergreifende Integritätsregeln
ASSERTION-Statement (Beispiel): CREATE ASSERTION kunde_zahlartCHECK (NOT EXISTS (
SELECT * FROM kunde kWHERE zahlungsart =‘B‘ AND NOT EXISTS(
SELECT * FROM girokonto gWHERE g.kundennr = k.kundennr
)));
Zahlungsart =„B“ nur dann, wenn Bankkonto bekannt!
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
77
ALTER TABLE
Schema-Evolution in SQL2: ALTER TABLE <relation> DROP COLUMN <attribute>;
ALTER TABLE <relation> ADD COLUMN <attribute> <domain>;
Keines der vorhandenen Applikationsprogramme sollte dadurch beeinträchtigt werden, es sei denn, es verwendet das zu löschende Attribut.
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
78
CAST-Funktion zur Typkonversion
Allgemein:CAST (Skalarer Ausdruck AS [datentyp | domäne])
Beispiel:
CAST(‘344‘ AS INTEGER)
Die Zeichenfolge ‘344‘ wird in die Zahl 344 umgeformt. (erfolgt i.a. Fall nur, wenn es möglich ist.)
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
79
Übungsaufgabe
Schemadefinition
Vertriebsdatenbank
(Web-Shop)
in SQL
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
80
Produkt Bestellung Kunde
Lieferant
Spediteur Mitarbeiter
Kategorie
Offerte
liefert beschreibt
liefertaus
Posten bestellt
bearbeitetofferiert
PNr BNr KuNr
LNr KaNr
SNr MNr ONrbearbeitet
Offerte
n m n 1
n
1
n
1
n
1
n
1
1 n
1
n
Anzahl BDatumPreis
LPreisLDATUM
OPosten
n
mAnzahlPreis
81
Tabellen Vertriebsdatenbank
Kunde(KuNr, Name, Adresse, Rabatt)Produkt(PNr, P-Name, KaNr, LNr, Preis, LPreis)Bestellung(BNr,KuNr,MNr,SNr,Bestelldatum,
Lieferdatum)Lieferant(LNr,Name, Adresse)Kategorie(KaNr,Name)Spediteur(SNr, Name, Adresse)Mitarbeiter(MNr,Name, Adresse)Offerte(Onr, KuNr, MNr)Posten(PNr,BNr,Anzahl)Oposten(PNr,ONr,Anzahl,Preis)
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
82
Lösungsbeispiel 1
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
CREATE TABLE Kunde (
KuNr integer PRIMARY KEY,
Name char(20) NOT NULL,
Adresse char(50),
Rabatt Decimal(3,1)
);
83
Lösungsbeispiel 2
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
CREATE TABLE Bestellung (BNr integer PRIMARY KEY,KuNr integer NOT NULL,MNr integer,SNr integer,Bestelldatum Date DEFAULT CURRENT_DATE,Lieferdatum Date,FOREIGN KEY (KuNr) REFERENCES Kunde ON DELETE NO
ACTION ON UPDATE CASCADE,FOREIGN KEY (MNr) REFERENCES Mitarbeiter ON DELETE
SET NULL ON UPDATE CASCADE,FOREIGN KEY (SNr) REFERENCES Spediteur ON DELETE
SET NULL ON UPDATE CASCADE);
84
Lösungsbeispiel 3
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
CREATE TABLE Posten (
BNr integer,
PNr integer,
Anzahl integer NOT NULL,
PRIMARY KEY (BNr, PNr),
FOREIGN KEY (BNr) REFERENCES Bestellung ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (PNr) REFERENCES Produkt ON DELETE NO ACTION ON UPDATE CASCADE
);
85
Aufgabe Bibliothek
Prof. Dr. Fabian Glasen, Datenbanken, Februar 2002
• Modellieren Sie eine Bibliothek (Bücher/ Ausleihe / Autoren / Benutzer (Ausleihende) / Vormerkungen) im E/R-Modell (möglichst redundanzfrei).Folgendes sollte dabei berücksichtigt werden:
• Ein Buch kann mehrere Autoren haben.• Ein Buch kann in verschiedenen Auflagen vorliegen.• Jede Auflage eines Buches kann in mehreren Exemplaren in
der Bibliothek vorhanden sein.• Bücher sollten nach explizit zugeordneten Schlagworten
gesucht werden können.• Übersetzen Sie das E/R-Modell möglichst redundanzfrei ins
relationale Modell (Datenbankschema in Tabellenform) • Geben Sie alle SQL-Kommandos an, die zur Anlage der
Tabellen notwendig sind (inklusive aller sinnvollen Integritätsregeln).