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|{~}/F3z6tP6 s6t$uvxw*yz|{~}/F36t$u6 s6t$uvxw*yz|{~}/P/w{.u/56 3x/~3*/P333| © t$u/t0uot$u3v ¡v¢6¤£@x<¥§¦¨ 3x~3@ªx/«6U@3/xxx¬x ­P® v¢6~z.¯°¥²±x¦7 wFuLu|³|z 3x~3L3´3xx¬|µP­.® 6{FP{¶z.¯5 ¶· ¸/t*¹3{3º»zP¯¼¨~¨&¡F/v¢½¾¶z.¯5 ¿xx<¥SÀU¦¨& 3x~3~3®|­´­/®ÂÁ²z.¯5 tFºM¸Pw|vÃ.w3vz3{CħÅÆ·¨ Intelligentes Datenmanagement — FH Bonn-Rhein-Sieg, SS 03 25 © 1. Datenbank-Programmierung Ñ Embedded SQL º.½6t$u3/º7Ç*/z3{xx ÉÈ$z.¯ÊÁÌËÍÃËxz6¨PÎFuÈ ÇP/w3vÏPw{|.v ¿Pw3vÃP/w3vz|{µ¨& {ÐtUqÀ´¨& 3x~3~//­vFy|u/Ò£/¨´*x­®CÁu3³xzÔÓx¬®PÕ´³|z tFºM¸Pw|vÃ.w3vz3{CħÅÆ·¨ º.½6t$u3/º7Ç*/z3{xx ÉÈ$z.¯ÊÁÌËÍÃËxz6¨PÎFuÈ ÇP/w3vÏPw{|.v ¿Pw3vÃP/w3vz|{µ¨& {/w3{ ½6t$u/3º7ÖÈ$Ë/wz/ÎFuÈ ×u3³|zƨ& Ñ 3x~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*FJÏPvÉ/{F/z.¯ || 6* Õ|x3«/LÓ®P¬Æº6tF*JÃPv Û|Û|Û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{xtµt$u´½/P33{x7 3|·|·|±ÀÒÝ ß/|{v*|½twx.tPFu¤L¯t0uz6t$u/L³/L{.uz|{xz³tUàÈ¢·È {xx/LFuzhÈ$·ÈdzPut0u7 Ú vxv Û vº6tFFJÃv Û PáFyP/áUªxÕ/zP¯Ê3áPâãÒÀFát0uvxw*yz3{ Ú vxv Û @º6tFF Û 3Fá yP3á*ªxÕ3zP¯Ê3á.âãÒÀ*á3wt$¯~º6t*FJä Û wPzP¯Ê Ú ºtFF´{*/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