1 Kapitel 8: Datenintegrität. 2 Datenintegrität Statische Bedingung (jeder Zustand) Dynamische...

21
1 Kapitel 8: Datenintegrität

Transcript of 1 Kapitel 8: Datenintegrität. 2 Datenintegrität Statische Bedingung (jeder Zustand) Dynamische...

Page 1: 1 Kapitel 8: Datenintegrität. 2 Datenintegrität Statische Bedingung (jeder Zustand) Dynamische Bedingung (bei Zustandsänderung) Bisher: Definition eines.

1

Kapitel 8:Datenintegrität

Page 2: 1 Kapitel 8: Datenintegrität. 2 Datenintegrität Statische Bedingung (jeder Zustand) Dynamische Bedingung (bei Zustandsänderung) Bisher: Definition eines.

2

Datenintegrität

Statische Bedingung (jeder Zustand)Dynamische Bedingung (bei Zustandsänderung)

Bisher:• Definition eines Schlüssels• 1:N - Beziehung• Angabe einer Domäne

Jetzt:• Check-Klauseln• Referentielle Integrität• Trigger

Page 3: 1 Kapitel 8: Datenintegrität. 2 Datenintegrität Statische Bedingung (jeder Zustand) Dynamische Bedingung (bei Zustandsänderung) Bisher: Definition eines.

3

Check-Klauseln

create table Professoren (

Name varchar(20) not null,

Rang char(2) check (Rang in ('C2','C3','C4')),

Raum int unique check (Raum between 100 and 200)

)

Page 4: 1 Kapitel 8: Datenintegrität. 2 Datenintegrität Statische Bedingung (jeder Zustand) Dynamische Bedingung (bei Zustandsänderung) Bisher: Definition eines.

4

Referentielle Integrität

R, S zwei Relationen mit Schemata R,S

Primärschlüssel von R

S heißt Fremdschlüssel :

• s. nur null oder nur ungleich null• s. ungleich null r R mit r. = s.

Page 5: 1 Kapitel 8: Datenintegrität. 2 Datenintegrität Statische Bedingung (jeder Zustand) Dynamische Bedingung (bei Zustandsänderung) Bisher: Definition eines.

5

Erlaubte Änderungen

Einfügen in S Fremdschlüssel verweist auf Tupel in R

Ändern in S neuer Fremdschlüssel verweist auf Tupel in R

Ändern des Primärschlüssels in R kein Fremdschlüssel aus S hatte auf ihn verwiesen

Löschen des Primärschlüssels in R kein Fremdschlüssel aus S hatte auf ihn verwiesen

Page 6: 1 Kapitel 8: Datenintegrität. 2 Datenintegrität Statische Bedingung (jeder Zustand) Dynamische Bedingung (bei Zustandsänderung) Bisher: Definition eines.

6

Referentielle Integrität in SQL

Unique Schlüsselkandidat

primary key Schlüssel (not null)

foreign key Fremdschlüssel (kann auch null sein)

boss int references Professoren

on update cascade

on delete cascade

on update set null

on delete set null

Page 7: 1 Kapitel 8: Datenintegrität. 2 Datenintegrität Statische Bedingung (jeder Zustand) Dynamische Bedingung (bei Zustandsänderung) Bisher: Definition eines.

7

on delete cascadecreate table hoeren (

vorlnr int references Vorlesungen on delete cascade...

)

create table Vorlesung (

gelesenvon int references Professoren on delete cascade...

)

Sokrates

Ethik

Mäeutik

Logik

Theophrastos

Schopenhauer

Page 8: 1 Kapitel 8: Datenintegrität. 2 Datenintegrität Statische Bedingung (jeder Zustand) Dynamische Bedingung (bei Zustandsänderung) Bisher: Definition eines.

8

Referentielle Integrität im Uni-Schema

Professor darf nicht geändert oder entfernt werden:

references Professoren

Vorlesung darf geändert werden,

Vorlesung darf nicht entfernt werden:

references Vorlesung on update cascade

Student darf geändert und entfernt werden:

references Student on update cascade on delete cascade

Page 9: 1 Kapitel 8: Datenintegrität. 2 Datenintegrität Statische Bedingung (jeder Zustand) Dynamische Bedingung (bei Zustandsänderung) Bisher: Definition eines.

9

Studenten

CREATE TABLE Studenten(

MatrNr INTEGER PRIMARY KEY,

Name VARCHAR(20) NOT NULL,

Semester INTEGER,

GebDatum DATETIME

)

Page 10: 1 Kapitel 8: Datenintegrität. 2 Datenintegrität Statische Bedingung (jeder Zustand) Dynamische Bedingung (bei Zustandsänderung) Bisher: Definition eines.

10

Professoren

CREATE TABLE Professoren(

PersNr INTEGER PRIMARY KEY,

Name VARCHAR(20) NOT NULL,

Rang CHAR(2) CHECK (Rang in ('C2','C3','C4')),

Raum INTEGER UNIQUE,

Gebdatum DATETIME

)

Page 11: 1 Kapitel 8: Datenintegrität. 2 Datenintegrität Statische Bedingung (jeder Zustand) Dynamische Bedingung (bei Zustandsänderung) Bisher: Definition eines.

11

Assistenten

CREATE TABLE Assistenten (

PersNr INTEGER PRIMARY KEY,

Name VARCHAR(20) NOT NULL,

Fachgebiet VARCHAR(20),

Boss INTEGER REFERENCES Professoren,

GebDatum DATETIME

)

Page 12: 1 Kapitel 8: Datenintegrität. 2 Datenintegrität Statische Bedingung (jeder Zustand) Dynamische Bedingung (bei Zustandsänderung) Bisher: Definition eines.

12

Vorlesungen

CREATE TABLE Vorlesungen (

VorlNr INTEGER PRIMARY KEY,

Titel VARCHAR(20),

SWS INTEGER,

gelesenVon INTEGER REFERENCES Professoren

)

Page 13: 1 Kapitel 8: Datenintegrität. 2 Datenintegrität Statische Bedingung (jeder Zustand) Dynamische Bedingung (bei Zustandsänderung) Bisher: Definition eines.

13

hoeren

CREATE TABLE hoeren (

MatrNr INTEGER REFERENCES Studenten ON UPDATE CASCADE

ON DELETE CASCADE,

VorlNr INTEGER REFERENCES Vorlesungen ON UPDATE CASCADE,

PRIMARY KEY (MatrNr, VorlNr)

)

Page 14: 1 Kapitel 8: Datenintegrität. 2 Datenintegrität Statische Bedingung (jeder Zustand) Dynamische Bedingung (bei Zustandsänderung) Bisher: Definition eines.

14

voraussetzen

CREATE TABLE voraussetzen (

Vorgaenger INTEGER REFERENCES Vorlesungen

ON UPDATE CASCADE,

Nachfolger INTEGER REFERENCES Vorlesungen

ON UPDATE CASCADE,

PRIMARY KEY (Vorgaenger, Nachfolger)

)

Page 15: 1 Kapitel 8: Datenintegrität. 2 Datenintegrität Statische Bedingung (jeder Zustand) Dynamische Bedingung (bei Zustandsänderung) Bisher: Definition eines.

15

pruefen

CREATE TABLE pruefen (

MatrNr INTEGER REFERENCES Studenten

ON UPDATE CASCADE

ON DELETE CASCADE,

VorlNr INTEGER REFERENCES Vorlesungen

ON UPDATE CASCADE,

PersNr INTEGER REFERENCES Professoren,

Note NUMERIC(3,1) CHECK (Note between 0.7 and 5.0),

PRIMARY KEY (MatrNr, VorlNr)

)

Page 16: 1 Kapitel 8: Datenintegrität. 2 Datenintegrität Statische Bedingung (jeder Zustand) Dynamische Bedingung (bei Zustandsänderung) Bisher: Definition eines.

16

Trigger

Einer Tabelle zugeordnet:

after {update | delete | insert}

Einer Tabelle oder Sicht zugeordnet:

instead of {update | delete | insert}

Temporäre Tabellen deleted und inserted

Page 17: 1 Kapitel 8: Datenintegrität. 2 Datenintegrität Statische Bedingung (jeder Zustand) Dynamische Bedingung (bei Zustandsänderung) Bisher: Definition eines.

17

Trigger korrigieredegradierung

create trigger korrigieredegradierung

on Professoren after update as

if update(Rang)

begin

update professoren

set rang = d.rang

from professoren p, deleted d

where p.persnr = d.persnr

and p.rang < d.rang

end

Page 18: 1 Kapitel 8: Datenintegrität. 2 Datenintegrität Statische Bedingung (jeder Zustand) Dynamische Bedingung (bei Zustandsänderung) Bisher: Definition eines.

18

Trigger verhinderedegradierung

create trigger verhinderedegradierung

on Professoren instead of update

as

update professoren

set rang = i.rang

from deleted d, inserted i

where professoren.persnr = d.persnr

and d.persnr = i.persnr

and (d.rang=null or d.rang < i.rang)

Page 19: 1 Kapitel 8: Datenintegrität. 2 Datenintegrität Statische Bedingung (jeder Zustand) Dynamische Bedingung (bei Zustandsänderung) Bisher: Definition eines.

19

Trigger befoerderung

create trigger befoerderung

on hoeren after insert, update

as

update professoren set rang='C4'

where persnr in

(select persnr

from professoren p,

vorlesungen v,

hoeren h

where p.persnr = v.gelesenvon

and v.vorlnr = h.vorlnr

group by p.persnr

having count(*) > 10)

Page 20: 1 Kapitel 8: Datenintegrität. 2 Datenintegrität Statische Bedingung (jeder Zustand) Dynamische Bedingung (bei Zustandsänderung) Bisher: Definition eines.

20

View Geburtstagsliste

create view Geburtstagsliste

as

select Name,

datediff(year,gebdatum,getdate()) as Jahre

from Person

Page 21: 1 Kapitel 8: Datenintegrität. 2 Datenintegrität Statische Bedingung (jeder Zustand) Dynamische Bedingung (bei Zustandsänderung) Bisher: Definition eines.

21

Trigger Geburtstag

create trigger Geburtstag

on Geburtstagsliste

instead of insert

as

insert into Person (name,gebdatum)

select i.name,

dateadd(year, -i.jahre, getdate())

from inserted i