Intelligentes Datenmanagement

Werbung
Intelligentes Datenmanagement
Peter Becker
FH Bonn-Rhein-Sieg
Fachbereich Angewandte Informatik
!"$#
Vorlesung Sommersemester 2003
Vorbemerkungen
Allgemeines zur Vorlesung
% Es gibt eine Homepage zur Vorlesung:
&('*))+++,-./"0&/&!10#)23
,45)6#4)
% Die Vorlesung wird folienbasiert gehalten.
% Die Folien zur Vorlesung (Skript) stehen auf der Homepage vor der
Vorlesung zur Verfügung.
% Format: PDF, zwei- und vierseitig
% Sie können also die ausgedruckten Folien mit in die Vorlesung bringen und dort mit schriftlichen Bemerkungen versehen.
% Benutzen Sie zum Drucken bitte die vierseitige Version des Skriptes.
Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03
1
Vorbemerkungen
Übungen/Praktikum/TB
% Die Vorlesung wird durch Übung und Praktikum ergänzt.
% Selbständige Bearbeitung von praxisorientierten Aufgaben, hierbei
Nutzung des Datenbanksystems DB2.
% Für das Praktikum erhalten Sie Zugang zum Labor.
% Weiterhin erhalten Sie eine Kopie des Datenbanksystems IBM DB2
für eine Installation auf Ihrem privaten Rechner.
% Bearbeitungszeit: abhängig vom Umfang der Aufgaben, i.d.R. zwei
oder mehr Wochen
% Abschluß: Teilnahmebescheinigung
Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03
2
Vorbemerkungen
Inhalt (geplant)
1. Datenbank-Programmierung
2. Erweiterbarkeit von Datenbanksystemen
3. Zugriffsstrukturen für spezielle Anwendungen
4. Aktive Daten, Trigger
5. Datenverteilung, Replikation, Subskriptionssysteme
6. KI-Techniken für das Datenmanagement
Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03
3
Vorbemerkungen
Literatur
G. Saake, A. Heuer, Datenbanken: Implementierungstechniken, MITP,
1999.
D. Chamberlain, DB2 Universal Database – Der unentbehrliche Begleiter, Addison-Wesley, 1999.
J. Hartwig, PostgreSQL – Professionell und praxisnah, Addison-Wesley,
2001.
W. Panny, A. Taudes, Einführung in den Sprachkern von SQL-99, Springer, 2000.
R. Elmasri, S. B. Navathe, Fundamentals of Database Systemes, Bejamin/Cummings, 2002.
G. F. Luger, Künstliche Intelligenz, Pearson Studium, 2001.
Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03
1. Datenbank-Programmierung
4
Ansätze der Datenbank-Programmierung
1 Datenbank-Programmierung
% SQL ist eingeschränkt bezüglich der algorithmischen Mächtigkeit
(z.B. Berechnung einer transitiven Hülle ist nicht möglich).
% Die Einschränkung ist von Bedeutung für die Terminierung, Endlichkeit von Ergebnissen und Optimierbarkeit.
% Für Datenbank-Anwendungen braucht man oft die vollständige
Mächtigkeit von Programmiersprachen. Ansätze hierfür:
– Einbettung von SQL in eine Wirtssprache
– Erweiterung von SQL um Kontrollstrukturen
– Erweiterung existierender Programmiersprachen zu persistenten
Programmiersprachen
Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03
5
1. Datenbank-Programmierung
Einbettung von SQL
Einbettungstechniken für SQL
% prozedurale Schnittstelle / call-Schnittstelle
Dem Programmierer wird eine Bibliothek von Prozeduren zur
Verfügung gestellt, die den Zugriff und die Manipulation der Datenbank gewährleisten.
Eine eigenständige Datenbanksprache wird nicht direkt eingesetzt.
ODBC, JDBC, SQL/CLI (call level interface)
% Einbettung in eine Wirtssprache
SQL wird als eigenständige Sprache in eine existierende Sprache
(Wirtssprache, z.B. C) eingebettet und somit direkt eingesetzt.
Die Syntax und der Compiler der Wirtssprache wird nicht modifiziert.
Embedded SQL, SQLJ
Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03
1. Datenbank-Programmierung
% Spracherweiterungen / Sprachentwicklungen
6
Einbettung von SQL
Existierende Programmiersprachen werden um Datenbankfunktionalität erweitert bzw. es werden neue dedizierte Sprachen entwickelt.
Im folgenden untersuchen wir den Ansatz der Einbettung von SQL in
eine Wirtssprache.
Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03
7
1. Datenbank-Programmierung
Einbettung von SQL
Statische Einbettung
% SQL-Anweisungen werden in den Programmtext eingestreut und
syntaktisch gekennzeichnet.
% Ein Precompiler ersetzt die SQL-Anweisungen in Anweisungen für
eine prozedurale Schnittstelle der Wirtssprache.
% Das vom Precompiler generierte Programm kann von einem
gewöhnlichen Compiler für die Wirtssprache übersetzt werden.
☞ Die SQL-Anweisungen müssen zur Übersetzungszeit feststehen.
☞ Nur Werte in Ausdrücken der Where-Klausel sind variabel.
Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03
1. Datenbank-Programmierung
8
Einbettung von SQL
Dynamische Einbettung
% SQL-Anweisungen können zur Laufzeit konstruiert werden.
% Aus Sicht der Wirtssprache werden die SQL-Anweisungen in Form
von Zeichenketten zur Verfügung gestellt.
% Eine syntaktische und semantische Analyse der SQL-Anweisung findet ebenfalls erst zur Laufzeit statt.
% Vom Datenbanksystem werden spezifische Prozeduren für die Behandlung variabler Ergebnisrelationen bereitgestellt.
Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03
9
1. Datenbank-Programmierung
Einbettung von SQL
Cursor-Konzept
% Gewöhnliche Programmiersprachen bieten zwar Strukturen aber keine Mengen als Datentyp an.
% Eine Ergebnisrelation in SQL ist aber eine Menge von Tupeln.
☞ Das Ergebnis einer SQL-Anfrage kann nicht direkt in einen Wert eines Datentyps der Wirtssprache abgebildet werden (impedance mismatch).
% Das Konzept des Cursors bietet eine abstrakte Sichtweise auf eine
Ergebnisrelation.
Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03
1. Datenbank-Programmierung
☞ Ein Cursor stellt eine Art
Zeiger auf die Zeilen einer Ergebnisrelation dar.
Einbettung von SQL
Anwendungsprogramm
Datenbank
SQL−Anfrage
C++
☞ Ein gutes Bild ist es, sich
den Cursor als einzeiliges Fenster auf die Ergebnisrelation vorzustellen.
10
Cursor
Ergebnisrelation
☞ Dieses Fenster wird
schrittweise über die
Ergebnisrelation geschoben.
Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03
11
1. Datenbank-Programmierung
Einbettung von SQL
% declare: Mit einer Cursordeklaration wird der Name des Cursors und
die zugehörige Cursortabelle (Ergebnisrelation) definiert.
#7&8&97 9## :7;7 8 /:<45=7#?>@94
4 /:<45
+A9##7CB DFE9677#?D
% open: Berechnung der Ergebnisrelation
% fetch: Realisiert das Weitersetzen des Cursors und die Übertragung
eines Tupels der Ergebnisrelation in Variablen der Wirtssprache.
% close: Freigabe der Ergebnisrelation
Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03
1. Datenbank-Programmierung
12
Embedded SQL
Embedded SQL
% Syntaktische Auszeichnung von SQL-Anweisungen
Alle eingebetteten SQL-Anweisungen müssen mit dem Schlüsselwort exec sql beginnen, um vom Precompiler erkannt zu werden.
% Weiterhin müssen die SQL-Anweisungen mit einem Semikolon abgeschlossen werden.
Beispiel: Cursor-Deklaration
G77A6H8I#7897 9## :7A
8&7 :J4=6#K>L945
74 :J4
+&7A9##7MB D.E977#?DN
Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03
13
1. Datenbank-Programmierung
Embedded SQL
% Deklaration von Host-Variablen
Variablen, die sowohl in SQL-Anweisungen als auch in der Wirtssprache verwendet werden, heißen Host-Variablen (host variables).
Sie müssen in einem separaten Deklarationsblock (declare section)
deklariert werden.
G77A6H8M
! #7897 1N
8&6! :J4=6#?N
G77A6H8A#A#7897 N
% Verwendung von Host-Variablen
Host-Variablen können in SQL-Anweisungen wie Konstanten benutzt
werden. Sie werden durch einen vorangestellten Doppelpunkt gekennzeichnet:
Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03
14
1. Datenbank-Programmierung
G77A6H8I#8&
74 :J4
+&7 :J45=7#OB
Embedded SQL
'P/:<45=7#?N
Die den SQL-Datentypen entsprechenden ProgrammiersprachenDatentypen hängen von der jeweiligen Wirtssprache ab.
% Behandlung von Ergebnisrelationen
Ist garantiert, daß eine Anfrage höchstens ein Tupel liefert, so kann
die into-Klausel benutzt werden, um das Ergebnis der Anfrage in
Host-Variablen abzulegen.
Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03
15
1. Datenbank-Programmierung
G77A6H8 8&7O945Q>R9##7
/ 'S94T> '*9##7
74 :J4
+&7 :J45=7#OB 'P/:<45=7#?N
Embedded SQL
% Zur Behandlung von Nullwerten können Indikator-Variablen verwendet werden.
Indikator-Variablen sind Host-Variablen vom Datentyp int oder short.
In der SQL-Anweisung werden sie direkt hinter der Host-Variablen
für die Aufnahme des Wertes angegeben.
Ist die Indikator-Variable mit einem negativen Wert belegt, wird dadurch ein Nullwert angezeigt.
Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03
1. Datenbank-Programmierung
16
Embedded SQL
Beispiel: Nicht gespeicherte Adressen erkennen:
G77A6H8 8&7O945Q>R9##7
/ 'S94T> '*9##7T'U9##V
+&7 :J45=7#OB 'P/:<45=7#?N
Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03
17
1. Datenbank-Programmierung
Embedded SQL
% Cursor
Das Öffnen eines Cursors erfolgt mit einer open-Anweisung:
G77A6H8A 9##KN
Für die Übertragung der Tupelwerte in die Hostvariablen dient die
fetch-Anweisung:
G77A6H8I 9## '.6#K> '945QN
Bei Bedarf sind Indikatorvariablen zu verwenden.
Mit der close-Anweisung wird ein Cursor geschlossen:
G77A6H8 8 9##?N
Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03
1. Datenbank-Programmierung
18
Embedded SQL
% Fehlerbehandlung
Um Fehlersituationen zu erkennen, wird die sogenannte SQL Communication Area (SQLCA) in ein Anwendungsprogramm eingebunden:
G77A6H8 /<8:7#7 6H89QN
In der SQLCA ist u.a. die Variable 6H8#7 definiert, die den Status
der letzten Ausführung eines SQL-Befehls angibt:
6H8#
0
W 0
100
X 0, Z Y 100
Bedeutung
OK
Fehler
Kein Tupel gefunden
Warnung
Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03
19
1. Datenbank-Programmierung
Embedded SQL
Die whenever-Anweisung ermöglicht eine flexible Reaktion auf Fehler:
G77A6H8C+&VI[<\]^_`ba_`
Als Bedingungen sind definiert: cdJe^7f3_gN
7:7#K>hH78+9J!->iH78
Die Aktion ist entweder 65/: oder !7
jk7l\j .
Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03
1. Datenbank-Programmierung
% Öffnen und Schließen einer Datenbank-Verbindung
20
Embedded SQL
Dieser Aspekt ist nicht standardisiert. Üblicherweise werden hierzu
die Befehle:
G77A6H8 6;m5ke\3_nlk_7doN
und
G77A6H8I#7Om5ke\3_pl&k_dqN
verwendet.
Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03
21
1. Datenbank-Programmierung
Embedded SQL
% Transaktionssteuerung
Zum Commit einer Transaktion benutzt man:
G77A6H8 44b;+"N
Das Zurücksetzen einer Transaktion geschieht mit:
G77A6H8I88
97;+N
Weiterhin können Transaktionsattribute (Zugriffsart, Isolationsstufe)
gesetzt werden:
G77A6H8 A79<9756 8&9 8&V8 986r79
58&QN
Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03
22
1. Datenbank-Programmierung
Embedded SQL
meinprog.sqc
Quelldatei
Schritte zur Erstellung eines Anwendungsprogramms bei
der Verwendung von
Embedded SQL:
Precompiler
sqlprep meinprog.sqc datenbank
meinprog.c
C−Datei
C−Compiler
cc −c −I/usr/IBMdb2/V7.1/include meinprog.c
1. Precompiler
meinprog.o
Objekt−Datei
2. Compiler
Bibliotheken
Linker
cc −o meinprog −L/usr/IBMdb2/V7.1/lib meinprog.o −ldb2
3. Linker
Programm
Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03
meinprog
23
1. Datenbank-Programmierung
% Diese Schritte sind rein prinzipieller Natur.
Embedded SQL
% Die Erstellung von Anwendungsprogrammen bei der Verwendung
von Embedded SQL ist in keinster Weise standardisiert!
% Je nach Datenbanksystem gibt es Unterschiede in
–
–
–
–
der Einbindung zusätzlicher include-Dateien,
den Namen und den Option des Precompilers,
den verwendeten Fehlercodes,
der Verbindung der übersetzten SQL-Statements mit einer Datenbank,
– den einzubindenden Bibliotheken,
– etc.
% Darüberhinaus gibt es deutliche Unterschiede zwischen den SQLDialekten.
Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03
1. Datenbank-Programmierung
24
Embedded SQL
Wieviele Tupel enthält die Tabelle +# in einer Datenbank? (DB2)
s6t$uvxw*yz|{~}/F€3z6tP‚„ƒ6…
s6t$uvxw*yz|{~}/F€3†6t$u‡‚ˆƒ6…
s6t$uvxw*yz|{~}/P‰/wŠ{.u/‹5‚ˆƒ6…
Œ3xŒ/Ž~3’‘”“*•/ŽŠ‘P–3—3Œ˜3Š‘|ŽŠ™š
©
t$u/€œ›t0užot$u3€ŸŠ†Š‡v ¡v¢ƒ6Š†¤£@Š†x‡Š‹<¥§¦Ÿ¨
Œ3xŒŽ~3Š‘@ªxŒ/«6“U•@—3Œ/Žx‘x™x¬xŒ ’ŒŽ’­“P®’•š
v¢ƒ6Š†~z.¯°¥²±x¦7š
wŠFu‡Lu|³Š†|zš
Œ3xŒŽ~3Š‘LŒ3•Š—´—3ŒŽx‘Š™x¬|ŒµPŒŽŠ­“.®’•š
›6{F›P{’€ž¶z.¯5 ¶· ¸/t*¹3{3Šºž»zP¯¼¨~¨&š¡F€/†v¢½¾ž¶z.¯5 ¿’†x‡x‹<¥SÀU¦Ÿ¨&š
Œ3xŒŽ~3Š‘~Ž3®’•|•ŠŒŽŠ­´­/®ÂÁ²z.¯5š
tFºMž¸P‰w|vŠ‚Ã.‰w3vŠ’z3{CħÅÆ·Ÿ¨
Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03
25
©
1. Datenbank-Programmierung
Ñ
Embedded SQL
º.½†6t$u3€/º7žÇ*€/z3{x†x† ÉÈ$z.¯ÊÁÌË͞ÃËxz6¨PÎFuÈ ÇP‰/w3vŠ‚ÏP‰wŠ{Š†|†.›v ¿P‰w3v’‚ÃP‰/w3vŠŠz|{µ¨&š
{’ÐtU€žqÀ´¨&š
Œ3xŒŽ~3Š‘~’Œ/‘ŠŒ/ŽŠ­Ÿv’Fy|u/€žÒ£/¨´“*•x­®CÁ„u3³Š†xzÔÓx¬®PÕ´³Š†|zš
tFºMž¸P‰w|vŠ‚Ã.‰w3vŠ’z3{CħÅÆ·Ÿ¨
º.½†6t$u3€/º7žÇ*€/z3{x†x† ÉÈ$z.¯ÊÁÌË͞ÃËxz6¨PÎFuÈ ÇP‰/w3vŠ‚ÏP‰wŠ{Š†|†.›v ¿P‰w3v’‚ÃP‰/w3vŠŠz|{µ¨&š
{/w3’{
½†6t$u/€3º7žÖÈ$Ë/w’z/ÎFuÈ ×u3³Š†|zƨ&š
Ñ
Œ3xŒŽ~3Š‘œ—“.|Ž|®’•|•xŒ/ŽŠ­ØÁ²z.¯5š
Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03
1. Datenbank-Programmierung
Das Programmtext liege in der Datei 6Ù.H .
26
Embedded SQL
Erzeugen und Ausführen des Programms:
Ú . ‰w*½†|{.½µº6t*†F€J‚ÏP‰vɀ/{F€/z.¯
‚|‚|‚
‘6“*•ŠŒ
Õ|ŒxŠ™3«ŠŒ/LÓ®P¬Æº6tF†*€J‚ÃP‰v
Û|Û|ÛxÛ|Û|Û Û|Û|ÛxÛ|Û|Û|ÛxÛ|Û|Û|ÛxÛ|Û|Û|ÛxÛ|Û|Û|ÛxÛ|Û|Û|ÛxÛ|Û|Û|ÛxÛ|Û|Û|ÛxÛ|Û|Û|ÛxÛxÛ|Û|Û|ÛxÛxÛ|Û|ÛxÛ|ÛxÛ|Û|ÛxÛ|Û|ÛxÛ|ÛxÛ|Û|Û|ۊÛ|Û|Û|ÛxÛxÛ|Û|Û|ÛxÛ
3Š‘|·|·|Ü|·.Ý ­’ƒ{ÞÈ¢ŽÈ¿½†3{v’*›3½tPwŠ{x†Ÿt’µt$u´½†/P‡3†3{x7‚
3Š‘|·|·|±ÀÒÝ ß/†|{vŠ*›|½t’wx.€tPFu¤’†L¯t0uz6t$u/‡L³/L{.uz|{xzœ³tU€’ƒàÈ¢·È
{x†x†/Š†LFuzhÈ$·ÈdzŠ†Put0u‡7‚
Ú vxv Û vœº6tF†F€J‚Ãv Û “PáFyP†/á“UªxÕ/zP¯Ê3áPâã‚ÒÀFát0uvxw*yz3{
Ú vxv Û @º6tF†F€ Û ‘3Fá yP†3á“*ªxÕ3zP¯Ê3á.âã‚ÒÀ*á3wt$¯~º6t*†F€J‚ä Û wPzP¯Ê
Ú ºtF†F€´€{*€/zP¯
å/æŠå ·|ã
Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03
27
1. Datenbank-Programmierung
Embedded SQL
Dynamic SQL
% Bisher müssen alle SQL-Anweisungen vor der Compilierung feststehen. Nur die Belegung der Host-Variablen ist modifizierbar.
% Somit ist es beispielsweise nicht möglich, die Bedingungen im where-Teil der Anfrage erst zur Laufzeit festzulegen.
% Um derartiges zur Laufzeit zu ermöglichen wurde Dynamic SQL entwickelt.
% In Dynamic SQL werden SQL-Anfragen als Zeichenketten in HostVariablen abgelegt.
Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03
1. Datenbank-Programmierung
28
Embedded SQL
% Spezielle SQL-Variablen enthalten die übersetze und optimierte Anfrage.
% Die Struktur der Tupel einer Resultatsmenge kann mit einer SQL Descriptor Area (SQLDA) ermittelt werden.
% Dynamic SQL ist in keinster Weise standardisiert.
% Aufgaben by Dynamic SQL:
–
–
–
–
Vorbereiten einer SQL-Anweisung
Erhalten einer Beschreibung der Struktur der Ergebnistupel
Ausführen einer vorbereiteten SQL-Anweisung
zeilenweises Lesen der Ergebnismenge
Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03
29
1. Datenbank-Programmierung
Embedded SQL
% prepare Erzeugung eines Zugriffsplans für eine SQL-Anweisung und
Übersetzung dieser Anweisung in eine ausführbare Form:
G77A6H8M7797 7çà74
G77A6H8M7797ØHJçà74
'*9+7:7!KN
'*979!QN
% describe Ermitteln einer Beschreibung der Datentypen der Ergebnismenge:
G77A6H8I#7
ØHJçI
'.H78#9TN
% execute Ausführen einer vorbereiteten SQL-Anweisung;
nur möglich, wenn die Anweisung keine Resultatsmenge liefert
G77A6H8AG: 7ç<N
Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03
30
1. Datenbank-Programmierung
Embedded SQL
% Dynamische Cursor-Deklaration Deklaration eines Cursors für eine Anfrage
G77A6H8I#7897 7çI/:A7AH<çJN
% Dynamisches Open Öffnen des dynamischen Cursors
G77A6H8A çJN
% Dynamisches Fetch Ablegen eines Ergebnistupels in der SQL Descriptor Area
G77A6H8I ç¼:J/7!è#7
Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03
'.6H8#79QN
31
Herunterladen