32
WS 2007/08 Datenbanksysteme Mi 17:00 – 18:30 R 1.007 Vorlesung #8 Wiederholung: Referentielle Integrität/ Embedded SQL

Vorlesung #8 Wiederholung: Referentielle Integrität/ Embedded SQL

  • Upload
    xiu

  • View
    42

  • Download
    0

Embed Size (px)

DESCRIPTION

Vorlesung #8 Wiederholung: Referentielle Integrität/ Embedded SQL. „Fahrplan“. Wiederholung Beziehungstypen 1:1, 1:n, n:m Primärschlüssel, Fremdschlüssel, referentielle Integrität Dynamische Intergritätsbedingungen - „Trigger“-Konzept von Oracle Prozedurale Erweiterungen (Embedded SQL) - PowerPoint PPT Presentation

Citation preview

Page 1: Vorlesung #8 Wiederholung: Referentielle Integrität/ Embedded SQL

WS 2007/08Datenbanksysteme

Mi 17:00 – 18:30R 1.007

Vorlesung #8

Wiederholung: Referentielle Integrität/

Embedded SQL

Page 2: Vorlesung #8 Wiederholung: Referentielle Integrität/ Embedded SQL

© Bojan Milijaš, 28.11.2007 Vorlesung #8 - Wiederholung Referentielle Integrität / Embedded SQL

2

WS 2007/08Datenbanksysteme

Mi 17:00 – 18:30R 1.007

„Fahrplan“ Wiederholung

Beziehungstypen 1:1, 1:n, n:m Primärschlüssel, Fremdschlüssel, referentielle Integrität

Dynamische Intergritätsbedingungen - „Trigger“-Konzept von Oracle

Prozedurale Erweiterungen (Embedded SQL) Beispiel Oracle PL/SQL Einbettung von SQL in Wirtssprachen, C, C++ ODBC – Open Database Connectivity JDBC – Java Database Connectivity SQLJ – Einbettung von SQL in Java

QBE – Query by Example Fazit und Ausblick Vorlesung #9

Page 3: Vorlesung #8 Wiederholung: Referentielle Integrität/ Embedded SQL

© Bojan Milijaš, 28.11.2007 Vorlesung #8 - Wiederholung Referentielle Integrität / Embedded SQL

3

WS 2007/08Datenbanksysteme

Mi 17:00 – 18:30R 1.007

Relationales Modell

... besteht aus Relationen bzw. Tabellen, die zueinander in Relation stehen

Relation = Beziehung Relation:

Synonym für Tabelle und Synonym für Beziehung

umgangssprachlich: Tabellen stehen in einer Beziehung zu einander (Relationen stehein in Relation zu einander )

Das relationale Modell beschreibt die Beziehung zwischen zwei Tabellen (Relationen) mittels referentieller Integrität

Page 4: Vorlesung #8 Wiederholung: Referentielle Integrität/ Embedded SQL

© Bojan Milijaš, 28.11.2007 Vorlesung #8 - Wiederholung Referentielle Integrität / Embedded SQL

4

WS 2007/08Datenbanksysteme

Mi 17:00 – 18:30R 1.007

Beziehungstypen

Zwei Tabellen T1, T2. Beziehungstypen 1:1, 1:n, n:m m:1 entfällt, da analog zu 1:n 1:1 Ehemann <-> Ehefrau, 1:n Mannschaft <-> Spieler n:m Studenten <-> Vorlesungen (* Notation Prof. Kemper, die meiste Literatur)

T1/T2 1 n

1 1:1 1:n

m m:1 n:m

Page 5: Vorlesung #8 Wiederholung: Referentielle Integrität/ Embedded SQL

© Bojan Milijaš, 28.11.2007 Vorlesung #8 - Wiederholung Referentielle Integrität / Embedded SQL

5

WS 2007/08Datenbanksysteme

Mi 17:00 – 18:30R 1.007

Beziehungstypen (fortgesetzt)

Notation Prof. Schwenkert

c steht für „conditional“, d.h „ein“ oder „kein“ Eigentlich 10 statt 16 Funktionalitäten, da Einträge

oberhalb der Diagonale analog zu Einträgen unterhalb der Diagonale ist

T1/T2 1 c m mc

1 1:1 1:c 1:m 1:mc

c c:1 c:c c:m c:mc

n n:1 n:c n:m n:mc

nc nc:1 nc:m nc:m nc:mc

Page 6: Vorlesung #8 Wiederholung: Referentielle Integrität/ Embedded SQL

© Bojan Milijaš, 28.11.2007 Vorlesung #8 - Wiederholung Referentielle Integrität / Embedded SQL

6

WS 2007/08Datenbanksysteme

Mi 17:00 – 18:30R 1.007

Schlüsselbegriff Primary Key – PK – Primärschlüssel

identifiziert eindeutig eine Relation kann aus mehreren Attributen (Spalten) bestehen

zusammengesetzter Primärschlüssen Beispiel: Relation Personen

Personal_ID - einfacher PK (Vorname, Nachname, Geburtsort und Geburtsuhrzeit) –

zusammengesetzter PK

Foreign Key – FK - Fremdschlüssel zeigt auf die Primärschlüsselspalte in der

Referenztabelle sorgt für referentielle Integrität

Page 7: Vorlesung #8 Wiederholung: Referentielle Integrität/ Embedded SQL

© Bojan Milijaš, 28.11.2007 Vorlesung #8 - Wiederholung Referentielle Integrität / Embedded SQL

7

WS 2007/08Datenbanksysteme

Mi 17:00 – 18:30R 1.007

1:1 Beziehungen Beispiele:

Ehemann <-> Ehefrau Fußballverein <-> Trainer (*an einem Spieltag)

können in eine einzige Relation bzw. Tabelle zusammengefasst werden

Stufe 1 (3 Tabellen) Männer <-> Ehen <-> Frauen FK zusammengesetzter PK FK

Stufe 2 (2 Tabellen): Männer <-> Ehefrauen FK PK

Stufe 3 (1 Tabelle): Eheleute Zusammengesetzter PK

Page 8: Vorlesung #8 Wiederholung: Referentielle Integrität/ Embedded SQL

© Bojan Milijaš, 28.11.2007 Vorlesung #8 - Wiederholung Referentielle Integrität / Embedded SQL

8

WS 2007/08Datenbanksysteme

Mi 17:00 – 18:30R 1.007

1:n Beziehungen

Beispiele: Mutter <-> Kinder Fußballverein <-> Spieler

können in zwei sinnvolle Relationen (sinnvoll = ohne Redundanz) bzw. Tabellen zusammengefasst werden

Stufe 1 (3 Tabellen): Mütter <-> Mutter_Kind <-> Kinder FK zusammengesetzter PK FK

Stufe 2 (2 Tabellen): Mütter <-> Kinder PK FK

Stufe 3 (1 Tabelle): Kinder (Redundanz – sämtliche Informationen über Mutter wiederholt sich pro Kind!!!)

Page 9: Vorlesung #8 Wiederholung: Referentielle Integrität/ Embedded SQL

© Bojan Milijaš, 28.11.2007 Vorlesung #8 - Wiederholung Referentielle Integrität / Embedded SQL

9

WS 2007/08Datenbanksysteme

Mi 17:00 – 18:30R 1.007

n:m Beziehungen

Beispiele: Menschen <-> befreundet_mit <-> Menschen

(rekursiv, Self-Join) Fußballvereine <-> spielen_in <-> Gaststadien

können nicht sinnvoll zusammengefasst werden, man braucht immer eine Zuordnungsrelation

Fußballvereine <-> spielen_in <-> Gaststadien

FK zusammengesetzter PK FK

Page 10: Vorlesung #8 Wiederholung: Referentielle Integrität/ Embedded SQL

© Bojan Milijaš, 28.11.2007 Vorlesung #8 - Wiederholung Referentielle Integrität / Embedded SQL

10

WS 2007/08Datenbanksysteme

Mi 17:00 – 18:30R 1.007

Dynamische Integritätsbedingungen Statische Integritätsbedingungen: PRIMARY KEY,

FOREIGN KEY, CHECK, UNIQUE etc. Dynamische Integritätsbedingungen: Bedingungen an

Zustandsänderungen bzw. Datenänderungen werden mittels Trigger überprüft. Man kann mit Triggern auch nachträgliche bzw. zusätzliche Berechnungen durchführen. CREATE TRIGGER – eigenständiger Datenbankobjekt der

einer Tabelle zugeordnet wird, d.h. auf eine Tabelle „aufpasst“

Auslöser wird definiert (before update, for each row) Bedingungen gefolgt von Anweisungen

Page 11: Vorlesung #8 Wiederholung: Referentielle Integrität/ Embedded SQL

© Bojan Milijaš, 28.11.2007 Vorlesung #8 - Wiederholung Referentielle Integrität / Embedded SQL

11

WS 2007/08Datenbanksysteme

Mi 17:00 – 18:30R 1.007

Trigger in Oracle Syntax

create or replace trigger keineDegradierungbefore update on Professorenfor each rowwhen (old.Rang is not null)begin

if :old.Rang = 'C3' and :new.Rang = 'C2' then:new.Rang := 'C3';

end if;if :old.Rang = 'C4' then

:new.Rang := 'C4'; end if; if :new.Rang is null then

:new.Rang := :old.Rang; end if;end;

Page 12: Vorlesung #8 Wiederholung: Referentielle Integrität/ Embedded SQL

© Bojan Milijaš, 28.11.2007 Vorlesung #8 - Wiederholung Referentielle Integrität / Embedded SQL

12

WS 2007/08Datenbanksysteme

Mi 17:00 – 18:30R 1.007

Trigger in Oracle Syntax (2)

CREATE [OR REPLACE] TRIGGER [schema .] trigger { BEFORE | AFTER | INSTEAD OF } { DELETE | INSERT | UPDATE [OF column [, column]...] } [FOR EACH ROW] [WHEN ( condition ) ] { pl/sql_block | call_procedure_statement }

Vereinfacht – nur DML Events, man kann auch DDL abfangenVereinfacht – nur DML Events, man kann auch DDL abfangen

Page 13: Vorlesung #8 Wiederholung: Referentielle Integrität/ Embedded SQL

© Bojan Milijaš, 28.11.2007 Vorlesung #8 - Wiederholung Referentielle Integrität / Embedded SQL

13

WS 2007/08Datenbanksysteme

Mi 17:00 – 18:30R 1.007

Trigger in DB2 Syntax

Page 14: Vorlesung #8 Wiederholung: Referentielle Integrität/ Embedded SQL

© Bojan Milijaš, 28.11.2007 Vorlesung #8 - Wiederholung Referentielle Integrität / Embedded SQL

14

WS 2007/08Datenbanksysteme

Mi 17:00 – 18:30R 1.007

Prozedurale Erweiterung von SQL – Oracle PL/SQL Trigger waren bzw. sind bereits prozedural! Prozedurale Erweiterung ist notwendig

Aus theoretischer Sicht – um Touring-Vollständigkeit zu erreichen

Aus praktischer Sicht - manche Probleme des Alltags, lassen sich einfacher prozedural statt deklarativ lösen

Hauptbegriff: Datenbank Cursor Dynamisches SQL in PL/SQL – würde hier

den Rahmen sprengen

Page 15: Vorlesung #8 Wiederholung: Referentielle Integrität/ Embedded SQL

© Bojan Milijaš, 28.11.2007 Vorlesung #8 - Wiederholung Referentielle Integrität / Embedded SQL

15

WS 2007/08Datenbanksysteme

Mi 17:00 – 18:30R 1.007

Oracle PL/SQL Prozedurale Erweiterung von SQL Beispiel: Funktion Summe - rekursiv

CREATE FUNCTION Summe1 (n INTEGER)RETURN INTEGERISBEGIN

IF n = 0 THEN return 0;

ELSIF n = 1 THEN return 1; ELSIF n > 1 THEN return n + Summe1(n - 1);

END IF;END;

Page 16: Vorlesung #8 Wiederholung: Referentielle Integrität/ Embedded SQL

© Bojan Milijaš, 28.11.2007 Vorlesung #8 - Wiederholung Referentielle Integrität / Embedded SQL

16

WS 2007/08Datenbanksysteme

Mi 17:00 – 18:30R 1.007

Oracle PL/SQL (2) nicht rekursiv

FUNCTION Summe2(n INTEGER)RETURN INTEGERISresult INTEGER DEFAULT 0;v_n INTEGER DEFAULT n;BEGIN WHILE v_n >= 0 LOOP result := result + v_n; v_n := v_n - 1; END LOOP; return result;END;

nicht rekursiv, schlau

FUNCTION Summe3(n INTEGER)RETURN INTEGERISBEGIN RETURN (n*(n+1))/2;END;

Page 17: Vorlesung #8 Wiederholung: Referentielle Integrität/ Embedded SQL

© Bojan Milijaš, 28.11.2007 Vorlesung #8 - Wiederholung Referentielle Integrität / Embedded SQL

17

WS 2007/08Datenbanksysteme

Mi 17:00 – 18:30R 1.007

Page 18: Vorlesung #8 Wiederholung: Referentielle Integrität/ Embedded SQL

© Bojan Milijaš, 28.11.2007 Vorlesung #8 - Wiederholung Referentielle Integrität / Embedded SQL

18

WS 2007/08Datenbanksysteme

Mi 17:00 – 18:30R 1.007

Oracle PL/SQL Beispiel

man verfügt über eine Tabelle (oder eine View), die zu jeder Spiel-Saison einen oder mehreren Trainer eines Vereins beinhaltet

Man möchte für jeden Trainer Saison-Intervale bestimmen In SQL sehr umständlich, mit vielen „unsauberen“

Hilfskonstrukten Besser mit einer einfachen Schleife, die sich

Zustandsübergänge merkt Wie bringt aber man aber Daten aus einer

Tabelle in eine prozedurale Sprache hinein?

Page 19: Vorlesung #8 Wiederholung: Referentielle Integrität/ Embedded SQL

© Bojan Milijaš, 28.11.2007 Vorlesung #8 - Wiederholung Referentielle Integrität / Embedded SQL

19

WS 2007/08Datenbanksysteme

Mi 17:00 – 18:30R 1.007

Deklarativ vs. Prozedural (2)

Page 20: Vorlesung #8 Wiederholung: Referentielle Integrität/ Embedded SQL

© Bojan Milijaš, 28.11.2007 Vorlesung #8 - Wiederholung Referentielle Integrität / Embedded SQL

20

WS 2007/08Datenbanksysteme

Mi 17:00 – 18:30R 1.007

Deklarativ vs. Prozedural (3)

Zeitintervall jedes Trainers Idee

Sortiere nach der Saison Merke den Trainer Bei jeder weiteren Saison überprüfe, ob sich der

Trainer geändert hat, d.h. vergleich den aktuellen Trainer mit dem Trainer der Vorsaison Wenn ja, dokumentiere die Änderung

Wiederhole bis zur aktuellen Saison Cursor-FOR oder Cursor-WHILE Schleife

vorgestellt in der Vorlesung

Page 21: Vorlesung #8 Wiederholung: Referentielle Integrität/ Embedded SQL

© Bojan Milijaš, 28.11.2007 Vorlesung #8 - Wiederholung Referentielle Integrität / Embedded SQL

21

WS 2007/08Datenbanksysteme

Mi 17:00 – 18:30R 1.007

Cursor Beispiel (3)

...CURSOR c_club_trainer_saisonIS SELECT saison, trainer, verein FROM club_trainer_saisonORDER BY saison;...BEGINFOR curvar IN c_club_trainer_saisonLOOP ... v_trainer := curvar.trainer; ...END LOOP;...* Vollständiger Code wird Online gestellt

Page 22: Vorlesung #8 Wiederholung: Referentielle Integrität/ Embedded SQL

© Bojan Milijaš, 28.11.2007 Vorlesung #8 - Wiederholung Referentielle Integrität / Embedded SQL

22

WS 2007/08Datenbanksysteme

Mi 17:00 – 18:30R 1.007

Page 23: Vorlesung #8 Wiederholung: Referentielle Integrität/ Embedded SQL

© Bojan Milijaš, 28.11.2007 Vorlesung #8 - Wiederholung Referentielle Integrität / Embedded SQL

23

WS 2007/08Datenbanksysteme

Mi 17:00 – 18:30R 1.007

Einbettung in Wirtssprachen „Embedded SQL“Mit Hilfe eines Präcompilers!!!

#include <stdio.h>

exec sql begin declare section;

varchar user_passwd[30];

int exMatrNr;

exec sql end declare section;

exec sql include SQLCA;

main()

{

printf("Name/Password:");

scanf("%", user_passwd.arr);

Page 24: Vorlesung #8 Wiederholung: Referentielle Integrität/ Embedded SQL

© Bojan Milijaš, 28.11.2007 Vorlesung #8 - Wiederholung Referentielle Integrität / Embedded SQL

24

WS 2007/08Datenbanksysteme

Mi 17:00 – 18:30R 1.007

Einbettung in Wirtssprachen „Embedded SQL“ (2)user_passwd.len=strlen(user_passwd.arr);

exec sql wheneversqlerror goto error;

exec sql connect :user_passwd;

while (1) {

printf("Matrikelnummer (0 zum beenden):");

scanf("%d", &ecMatrNr);

if (!exMatrNr) break;

exec sql delete from Studenten

where MatrNr= :exMatrNr;

}

exec sql commit work release;

exit(0);

Page 25: Vorlesung #8 Wiederholung: Referentielle Integrität/ Embedded SQL

© Bojan Milijaš, 28.11.2007 Vorlesung #8 - Wiederholung Referentielle Integrität / Embedded SQL

25

WS 2007/08Datenbanksysteme

Mi 17:00 – 18:30R 1.007

Einbettung in Wirtssprachen „Embedded SQL“ (3)error:

exec sql whenever sqlerror continue;exec sql rollback work release;printf("fehler aufgetreten!\n");exit(-1);}

Page 26: Vorlesung #8 Wiederholung: Referentielle Integrität/ Embedded SQL

© Bojan Milijaš, 28.11.2007 Vorlesung #8 - Wiederholung Referentielle Integrität / Embedded SQL

26

WS 2007/08Datenbanksysteme

Mi 17:00 – 18:30R 1.007

Datenbankanbindungen

ODBC (Open Database Connecticity) Anbindung von Windows-Programmen Beispiel –Excel Zugriff auf Oracle

JDBC (Java Database Connectivity) Eigentlich ein CLI Call-Level Interface

SQLJ Echte Einbettung von SQL in Java, wie C, C++

Wichtig bei allen Schnittstellen: immer an die Voreinstellungen denken was passiert bei einem Fehler gibt es automatisch einen COMMIT oder ROLLBACK

Page 27: Vorlesung #8 Wiederholung: Referentielle Integrität/ Embedded SQL

© Bojan Milijaš, 28.11.2007 Vorlesung #8 - Wiederholung Referentielle Integrität / Embedded SQL

27

WS 2007/08Datenbanksysteme

Mi 17:00 – 18:30R 1.007

Page 28: Vorlesung #8 Wiederholung: Referentielle Integrität/ Embedded SQL

© Bojan Milijaš, 28.11.2007 Vorlesung #8 - Wiederholung Referentielle Integrität / Embedded SQL

28

WS 2007/08Datenbanksysteme

Mi 17:00 – 18:30R 1.007

Page 29: Vorlesung #8 Wiederholung: Referentielle Integrität/ Embedded SQL

© Bojan Milijaš, 28.11.2007 Vorlesung #8 - Wiederholung Referentielle Integrität / Embedded SQL

29

WS 2007/08Datenbanksysteme

Mi 17:00 – 18:30R 1.007

Page 30: Vorlesung #8 Wiederholung: Referentielle Integrität/ Embedded SQL

© Bojan Milijaš, 28.11.2007 Vorlesung #8 - Wiederholung Referentielle Integrität / Embedded SQL

30

WS 2007/08Datenbanksysteme

Mi 17:00 – 18:30R 1.007

Page 31: Vorlesung #8 Wiederholung: Referentielle Integrität/ Embedded SQL

© Bojan Milijaš, 28.11.2007 Vorlesung #8 - Wiederholung Referentielle Integrität / Embedded SQL

31

WS 2007/08Datenbanksysteme

Mi 17:00 – 18:30R 1.007

Page 32: Vorlesung #8 Wiederholung: Referentielle Integrität/ Embedded SQL

WS 2007/08Datenbanksysteme

Mi 17:00 – 18:30R 1.007

Vorlesung #8

Ende