Erweiterungskonzepte für das aktive Datenbanksystem ARTA

Werbung
Rheinische Friedrich – Wilhelms – Universität Bonn
Institut für Informatik III
Erweiterungskonzepte für das aktive
Datenbanksystem ARTA
Diplomarbeit von
Vincenzo Calí
Kalker-Hauptstr.205
D – 51103 Köln
Email:[email protected]
Betreuer
Prof. Dr. Rainer Manthey
April 2004
II
Eidesstattliche Erklärung:
Ich erkläre hiermit wahrheitsgemäß, daß ich
-
die eingereichte Arbeit selbständig und ohne unerlaubte Hilfsmittel angefertigt,
-
nur die im Literaturverzeichnis aufgeführten Hilfsmittel benutzt und fremdes
Gedankengut als solches kenntlich gemacht,
-
alle Personen und Institutionen, die mich bei der Vorbereitung und Anfertigung
der Abhandlung unterstützt haben, genannt und
-
die Arbeit noch keiner anderen Stelle zur Prüfung vorgelegt habe
Ort, Datum
Unterschrift (Vor – und Zuname)
III
IV
Vorwort
Mein Dank gebührt Herrn Prof. Dr. Rainer Manthey für die Empfehlung, mich mit diesem interessanten Thema zu beschäftigen und die wissenschaftliche Betreuung der Arbeit. Seine zahlreichen Anregungen und wertvollen Kommentare haben wesentlich zur
Verbesserung der Arbeit beigetragen.
Außerdem möchte ich meiner Lebensgefährtin Rebecca, die gerade unser Kind austrägt,
für ihre tolle Unterstützung danken. Sie ist der treibende Motor in meinem Leben
DANKE!!!! ☺
V
VI
Inhaltsverzeichnis
Einleitung
Kapitel 1
1.1
1.2
1.3
Kapitel 2
2.1
2.2
2.3
Kapitel 3
3.1
3.2
3.3
3.4
Kapitel 4
4.1
4.2
4.3
4.4
Kapitel 5
5.1
5.2
5.3
Kapitel 6
6.1
6.2
6.3
6.4
Kapitel 7
7.1
7.2
7.3
7.4
Kapitel 8
8.1
8.2
8.3
8.4
1
Aktive Datenbanken
3
Motivierende Beispiele...................................................................................4
Regelparadigma..............................................................................................5
Regelspezifikation ..........................................................................................6
Microsoft Access
11
Architektur von Microsoft Access ...............................................................11
Komponenten einer Datenbankanwendung..................................................12
Datenzugriffsschnittstellen...........................................................................28
Microsoft Visual Basic
32
Visual Basic-Entwicklungsumgebung .........................................................32
Objekte, Eigenschaften und Module ............................................................34
Visual Basic-Grundlagen .............................................................................36
API................................................................................................................37
SQL:1999
39
Grundlagen von SQL....................................................................................39
SQL-Triggersprache.....................................................................................41
Syntax der SQL-Triggersprache...................................................................41
Semantik der SQL-Triggersprache...............................................................44
ARTA (Active Real Time Access DBS)
46
Namenskonvention.......................................................................................46
GUI von ARTA ............................................................................................46
Erweiterungen in ARTA II...........................................................................48
Erweiterungen der SQL-Triggersprache
49
Steuerungskomponenten ..............................................................................49
Zeitereignisse................................................................................................51
Syntax der ARTA II-Trigger........................................................................57
Semantik der ARTA II-Trigger....................................................................60
ARTA II
63
Schichtenarchitektur.....................................................................................64
Systemarchitektur.........................................................................................65
Time Event Manager ....................................................................................66
Trigger Execution.........................................................................................71
GUI
75
ARTA II-Menüstruktur ................................................................................75
Triggerübersichtsoberfläche.........................................................................77
Triggereditor.................................................................................................78
SQL-Statement Terminal .............................................................................82
Zusammenfassung
Literaturverzeichnis
Anhang
83
85
83
VII
VIII
Erweiterungskonzepte für das aktive DBMS ARTA
Einleitung
..
Einleitung
„A Trigger is like a genie that you can place inside the database, to wake up and do your bidding whenever a certain
event takes place“ [DCha98].
DB
DB
DB
In dieser Arbeit wird das System ARTA II vorgestellt, das als Präprozessor für das
Datenbankverwaltungssystem (DBMS) Microsoft Access dient. ARTA II wurde in
Visual Basic implementiert, basiert auf einem in früheren Diplomarbeiten entwickelten aktiven DBMS namens ARTA und steht für „Active Real Time Access Database System“. Das Microsoft Access-Datenbanksystem wurde um aktive Regeln
erweitert, die das passive in ein aktives Datenbanksystem überführen, um auf eintretende Situationen geeignet zu reagieren.
Die aktiven Regeln, die in ARTA II verwendet werden, funktionieren nach dem
Grundkonzept der ECA-Regeln und werden auch als Trigger bezeichnet. Als Trigger (deutsch: Auslöser) bezeichnet man in SQL eine Anweisungsfolge (eine Abfolge von Aktionen), die ausgeführt wird, wenn eine verändernde Anweisung auf einer bestimmten Tabelle ausgeführt werden soll. Sie dienen der automatischen, ereignisgesteuerten Ausführung von SQL-Befehlen. Diese werden vom DBMS ausgewertet bzw. überprüft, um dann automatisch zugehörige Aktionen auszuführen.
Trigger sind ein mächtiges und flexibles Programmierungskonzept. Durch aktive
Regeln, kann die Datenbank auf bestimmt eintretende Ereignisse reagieren. Die
Ereignisse, die eine aktive Regel auslösen können, sind z.B. Datenbankänderungen
(insert, delete oder update) oder das Eintreten eines bestimmten Zeitpunktes.
In SQL sind Trigger erstmals im SQL:1999-Standard eingeführt worden. Die Trigger in SQL werden durch die primitiven Datenmanipulationsereignisse insert, update und delete ausgelöst. Die ARTA II-Triggersprache hingegen erlaubt es, auch
auf Zeitereignisse zu reagieren. Dazu mußte das SQL-Triggerkonzept von
SQL:1999 beträchtlich erweitert werden. Außerdem ist eine Erweiterung der SQLTriggersprache um Steuerungselemente nötig. Die Steuerungselemente eines Triggers dienen z.B. der Angabe über den Zustand eines Triggers, also ob dieser aktiviert oder deaktiviert ist. Es kann ein Gültigkeitsintervall für einen Trigger angegeben werden, um festzulegen, wie lange dieser gültig ist. Bei Erstellen eines Triggers wird eine Priorität vergeben, die auch manuell verändert werden kann. Mit ihr
kann eine eindeutige Abarbeitungsreihenfolge festgelegt werden. In SQL:1999 ist
die Abarbeitungsreihenfolge durch das Erstellungsdatum des Triggers festgelegt
und somit nicht so flexibel zu handhaben wie in ARTA II.
Der Zeitereignisaspekt wurde bereits in verschiedenen Arbeiten untersucht, wie in
[Modic00] und [Löhr97] und in einigen objektorientierten Datenbankverwaltungssystemen wie z.B. HiPAC (High Performance Active Database System) oder
SAMOS (Swiß Active Mechanism Besed Object-Oriented Active Database Sys1
Erweiterungskonzepte für das aktive DBMS ARTA
Einleitung
tems) realisiert. Die periodischen Zeitereignisse, die in ARTA realisiert wurden
beruhten auf diese Studien. In ARTA II hingegen wurde ein neues Konzept zur
Realisierung der periodischen Zeitereignisse erstellt und umgesetzt.
Die Entwicklung eines aktiven DBMS stellt auch eine besondere Anforderung an
die grafische Benutzerschnittstelle (GUI). Mit der in ARTA II neu gestalteten
grafischen Benutzeroberfläche wird dem Anwender ein komfortables Werkzeug
zur Verfügung gestellt, um Trigger in der erweiterten SQL-Triggersprache zu erstellen. Schwerpunkt bei der Gestaltung und Implementierung der GUI war es, dem
Anwender bei der Erstellung eines SQL-basierten Triggers so zu helfen, daß dieser
keinerlei Fehleingaben bezüglich der Syntax tätigen kann. Ein weiterer Schwerpunkt war die Realisierung der Triggerverwaltung und -aktivierung mittels der
GUI, so daß der Anwender den Zustand der ARTA-Trigger abrufen und auch ändern kann. Der wichtigste Aspekt jedoch beruht auf der grafischen Realisierung für
die Eingabe und Anzeige der verschiedenen Ereignistypen.
Möchte man direkt SQL-Statements an die Datenbank absetzen, so kann dies über
eine Art Terminal realisiert werden. Auch hier soll eine komfortable Verwaltung
bereits gespeicherter SQL-Statements über der GUI das Arbeiten erleichtern.
Aufbau der Arbeit
In Kapitel 1 wird eine Einführung in aktive Datenbanken gegeben. Dieses, sowie
die folgenden drei Kapitel bilden den Grundlagenteil dieser Arbeit. In Kapitel 2
wird das Datenbankverwaltungssystem Microsoft Access vorgestellt in das ARTA
II implementiert wurde. Kapitel 3 stellt die Programmiersprache Microsoft Visual
Basic vor, in der ARTA II vollständig programmiert wurde. Die Entwicklungsumgebung, sowie wichtige Sprachkonstrukte werden hier behandelt. Anschließend
wird in Kapitel 4 SQL:1999 kurz vorgestellt. Die Syntax und die Semantik der
SQL-Triggersprache sind hier von relevanter Bedeutung, da diese die Basis der
ARTA II-Triggersprache bildet. In Kapitel 5 wird das alte ARTA-System vorgestellt. Anschließend werden die Erweiterungen zum neuen ARTA-System kurz
angesprochen, die dann in den folgenden Kapiteln genauer dargestellt werden. Kapitel 6 stellt die Erweiterung der ARTA II-Triggersprache vor. Dabei wird auf die
neue Syntax und die damit verbundenen semantischen Änderungen der Sprache
eingegangen. Kapitel 7 beschäftigt sich mit der ARTA II-System-architektur und
Kapitel 8 schließlich mit der Umsetzung der grafischen Benutzerschnittstelle
(GUI).
2
Erweiterungskonzepte für das aktive DBMS
Aktive Datenbanken
Kapitel 1 Aktive Datenbanken
Aktive Datenbanken
In diesem Abschnitt wird erläutert, was eine aktive Datenbank ist. Nach einer kurzen Motivation werden die aktiven (ECA)-Regeln eingeführt, welche das grundlegende Paradigma einer aktiven Datenbank bilden.
Programm 1
Programm 2
…
Programm n
DBMS (Datenbankverwaltungssystem)
DB 1
(Datenbank)
DB 2
(Datenbank)
DB n
(Datenbank)
DBS (Datenbanksystem)
Abbildung 1.1: Architektur eines Datenbanksystems
Datenbanksysteme (engl. Database Systems, abgek. DBS) ermöglichen eine integrierte Verwaltung aller Daten in einer Organisation. Ein Datenbanksystem besteht
aus einer Datenbank und einem Datenbankverwaltungssystem.
Eine Datenbank (engl. Database, abgek. DB) wird als eine Sammlung von Daten,
die aus der Sicht des Benutzers zusammen gehören, bezeichnet. Ein Datenbankverwaltungssystem (engl. Database Management Systems, abgek. DBMS) hat die
Aufgabe, die Daten der Datenbank so zu verwalten, daß logische und physische
Datenunabhängigkeit, Datenintegrität, Datensicherheit und weitestgehende Redundanzfreiheit bestehen. [NiJo92]
Eine Datenbank heißt aktive Datenbank, wenn sie, zusätzlich zu den Leistungen
passiver Datenbanksysteme, Ereignisse erkennen und automatisch mit vordefinierten Aktionen darauf reagieren kann. Dazu benötigt man aktive Regeln, die bei bestimmten Ereignissen ausgelöst werden. Die Ereignisse, auf die durch aktive Regeln reagiert werden kann, sind ein wichtiger Bestandteil dieses Kapitels.
Am folgenden vereinfachten Beispiel einer Sekretärin des Prüfungsamtes, die mit
Hilfe eines Datenbanksystems über den aktuellen Stand der Abgabefristen für Diplomarbeiten Buch führt, soll das aktive Datenbanksystem motiviert werden.
3
Erweiterungskonzepte für das aktive DBMS
Aktive Datenbanken
1.1 Motivierende Beispiele
Meldet ein Student seine Diplomarbeit an, so müssen zunächst eine große Anzahl
an Bedingungen überprüft werden, wie z.B.:
• hat dieser Student die Zulassung, um eine Diplomarbeit anzumelden? oder
• hat dieser Student schon eine Diplomarbeit angemeldet?
Das Datenbanksystem sollte solche Situationen erkennen und die passenden Regeln
auslösen, um mitzuteilen, ob eine Bedingung verletzt wurde. Dies setzt voraus, daß
das System automatisch bestimmte Ereignisse, wie das Anmelden einer Diplomarbeit, erkennen und darauf reagieren kann. Mit einem passiven Datenbanksystem
können Situationen dieser Art nicht erkannt werden, da ein solches System nicht
über aktive Regeln verfügt. D.h. es enthält keine Mechanismen, mit denen Situationen erkannt und entsprechende Reaktionen ausgeführt werden können. Um dennoch ein solches Verhalten realisieren zu können, müssen Programme auf Applikationsebene geschrieben werden, die mit dem DBS kommunizieren. Dabei treten die
zwei folgenden Nachteile ein:
Jedes Anwendungsprogramm, das die Anmeldung einer Diplomarbeit registriert,
muß um zusätzliche Prozeduren erweitert werden, die bei einer Anmeldung sämtliche Regeln der DPO (Diplomprüfungsordnung) überprüft und bei einer Verletzung
eine entsprechende Aktion ausführt. Die Aktualisierungen der DB wird somit von
Anwendungsprogrammen übernommen, d.h. daß das die aktiven Regeln nicht im
Datenbanksystem, sondern in den Anwendungsprogrammen implementiert wurden.
Die Nachteile dieser Arbeitsweise werden bei der Änderung einer Regel bewußt.
Es entsteht ein sehr hoher Verwaltungsaufwand, da das Ändern einer Regel in allen
Anwendungsprogrammen stattfinden muß, die auf die gleiche Datenbank zugreifen. Dies setzt wiederum voraus, daß man alle Regeln für alle Anwendungen kennt,
da dem Datenbanksystem selbst diese Regeln nicht bekannt sind und es somit den
inkonsistenten Zustand nicht erkennen kann. Ein weiterer Nachteil betrifft die Situationserkennung:
Ein Mitarbeiter des Prüfungsamtes möchte über die Überschreitung der Abgabefrist
einer Diplomarbeit informiert werden. Diese Situation kann in einem passiven Datenbanksystem nur dann erkannt werden, wenn ein Mitarbeiter eine manuelle Anfrage oder wenn ein Anwendungsprogramm regelmäßige Anfragen an die Datenbank tätigt. Dieses Abfragen des Datenbankzustandes nennt man polling. Bei diesem Verfahren besteht die Gefahr, daß diese Anfragen entweder zu häufig oder zu
selten stattfinden. Finden sie zu häufig statt, führt dies zu einer unnötigen Belastung des Systems. Geschehen die Anfragen zu selten, so kann es vorkommen, daß
die Situation zu spät bemerkt wird und die erforderliche Aktion dadurch zu lange
unterbleibt. [DiGa00]
Da in der Datenbank üblicherweise viele Informationen für die Beschreibung von
Situationen, die zur Ausführung von Folgeaktionen führen, vorhanden sind, liegt es
nahe, das Erkennen von Situationen durch das Datenbanksystem selbst anzustreben. Dafür muß das System um eine aktive Komponente erweitert werden. Eine
4
Erweiterungskonzepte für das aktive DBMS
Aktive Datenbanken
anerkannte Definition des Begriffes aktives Datenbanksystem existiert nicht. Die
folgende grobe Definition stammt aus [DiGa00].
Ein Datenbanksystem heißt aktiv, wenn es, zusätzlich zu den üblichen DBS - Fähigkeiten, in der Lage ist, interessante Situationen in der Datenbank (und wenn
möglich darüber hinaus) zu erkennen und als Folge davon bestimmte (ebenfalls
definierbare) Reaktionen auszulösen. [DiGa00]
Aus dieser Definition geht hervor, daß ein aktives Datenbanksystem (Active Database System, abgek. ADBS) die Funktionalität eines passiven Datenbanksystems
enthält,
das
um
aktive
Regeln
erweitert
wurde.
Das
aktive
Datenbankverwaltungssystem (Active
Database Management System, abgek. ADBMS) ist die Software für Verwaltung
und Benutzung der aktiven Datenbank (Active Database, abgek. ADB). ADBS ist
ein ADBMS samt (mindestens) einer ADB. Für ein Datenbanksystem ist die Eigenschaft „aktiv“ orthogonal zu seinem zugrunde liegenden Datenmodell; demzufolge kann man von aktiven relationalen Datenbanksystemen sprechen.
Die Definition des aktiven Verhaltens geschieht mit Hilfe der Situations–, Aktionsregeln, die beschreiben, wie beim Eintreten einer bestimmten Situation reagiert
werden muß. Als Beispiel soll die oben erwähnte Überprüfung der Fristen zur Abgabe einer Diplomarbeit dienen.
• Situation: Die Abgabefrist wurde überschritten.
• Aktion: Erstellung einer E-Mail für den betreffenden Studenten.
Im folgenden Abschnitt werden die Situations-, Aktionsregeln (ECA-Regeln) vorgestellt.
1.2 Regelparadigma
Konventionelle DBMS, wie z.B. Microsoft Access, sind passive DBMS. Bei diesen
passiven Systemen werden Datenbankänderungen nur als Reaktion auf eine ausgelöste Operation eines Anwenders oder einer Anwendung ausgeführt. Soll die Datenbank aber automatisch auf bestimmte vordefinierte Ereignisse reagieren können, so muß das passive Datenbankverwaltungssystem um die Möglichkeit erweitert werden, zur Laufzeit selbstständig auf eine bestimmte eintretende Situation mit
einer festgelegten Aktion reagieren zu können.
Die Situationsüberwachung kann mittels Ereignis-Bedingung-Aktion-Regeln (engl.
Event, Condition, Action, abgek. ECA) realisiert werden. Eine ECA-Regel kann
als Tripel (E, C, A) modelliert werden, wobei E, C und A die Regelkomponenten
wie folgt bezeichnen:
• E: (event), der Ereignisteil spezifiziert das auslösende Ereignis, bei dessen
Auftreten die Regel gefeuert wird.
5
Erweiterungskonzepte für das aktive DBMS
Aktive Datenbanken
• C: (condition), der Bedingungsteil drückt eine Vorbedingung für das Ausführen der Regel aus. Ereignis und Bedingung spezifizieren eine Situation.
• A: (action), der Aktionsteil enthält den eigentlichen, auszuführenden Code,
der die Reaktion auf die eintretende Situation darstellt.
1.3 Regelspezifikation
Im folgenden Abschnitt geht es um die Abgrenzung der drei Komponenten einer
Regel. Diese finden sich im Abschnitt Regelausführung wieder.
Ereignisteil
Im Ereignisteil einer ECA-Regel können verschiedene Ereignistypen angegeben
werden. In diesem Abschnitt soll eine Übersicht über die verschiedenen
Ereignistypen in aktiven Datenbanken gegeben werden. Dazu soll zunächst auf das
obige Beispiel „Ein Student meldet seine Diplomarbeit an“ eingegangen werden.
Das Ereignis das hier eintritt, ist die Anmeldung der Diplomarbeit und entspricht
dem Typ der Änderungsereignisse. Das Ereignis könnte sich aber auch auf einen
Zeitpunkt beziehen wenn man die Abgabefrist einer Diplomarbeit in Betracht zieht.
Das Ereignis könnte lauten: „die Abgabefrist der Diplomarbeit läuft am
09.04.2004 um 10:00 Uhr ab“. Dieses Ereignis entspricht einem Zeitereignistyp.
Diese Ereignisse beschreiben interessante Situationen. Zudem kann eine interessante Situation auch durch die Kombination mehrerer anderer Situationen entstehen. Kommen wir zunächst zu einer groben Definition von Ereignis:
Unter einem Ereignis versteht man das signalisierte Auftreten eines internen oder
externen Zustandes in Form eines Zeitpunktes, einer Datenbankoperation oder
eines Anwendungssignals. Man unterscheidet in der Regel zwischen einfachen und
den zusammengesetzten Ereignissen. [DiGa00]
Unter einem einfachen Ereignis versteht man ein Datenbank- oder ein Zeitereignis. Diese Ereignistypen können wiederum in verschiedene Untertypen unterteilt
werden. So können Datenbankereignisse in Änderungs- oder Transaktionsereignisse unterteilt werden. Bei den Zeitereignissen werden die Untertypen relative, absolute und periodische Zeitereignisse unterschieden.
6
Erweiterungskonzepte für das aktive DBMS
Aktive Datenbanken
Ereignisse
zusammengesetzte
Ereignisse
einfache Ereignisse
Datenbankereignisse
Transaktionsereignisse
Zeitereignisse
Änderungsereignisse
…
begin trans
insert
end trans
delete
rollback
update
absolute
Zeitereignisse
periodische
Zeitereignisse
relative
Zeitereignisse
Abbildung 1.2: Ereignistypen
Mit Änderungsereignissen läßt sich der Zustand einer Datenbank verändern. Das
Löschen, Einfügen und Ändern kann mittels der Änderungsoperatoren insert,
delete oder update realisiert werden. Zu den Datenbankereignissen gehören aber
auch Transaktionsereignisse, die durch Transaktionsbefehle ausgelöst werden
(transaction begin, transaction end), sowie z.B. das An- und Abmelden eines Benutzers an einer Datenbank. Weitere Datenbankereignisse, die zur Auslösung einer
Regel führen können, sind z.B. Aufrufe einer Prozedur oder einer Funktion in
einer Datenbankprogrammiersprache.
Zeitereignisse sind weitere atomare Ereignistypen, die zur Auslösung einer Regel
führen können. Sie werden in drei Untertypen unterteilt: In periodische (alle 5
Stunden), absolute (am 20.07.2004 um 09:00 Uhr) oder relative Zeitereignisse
(alle 2 Stunden nach dem Löschen einer bestimmten Tabelle),
Die atomaren Ereignistypen zählen zu den einfachen Ereignissen. Neben den bisher
beschriebenen einfachen Ereignissen, gibt es die komplexen (zusammengesetzten) Ereignisse, die aber in dieser Arbeit nicht weiter behandelt werden und deshalb nur vollständigkeitshalber erwähnt werden. Bei zusammengesetzten Ereignissen werden zwei oder mehrere atomare Ereignisse mittels der
Kompositionsoperatoren Sequenz, Disjunktion, Konjunktion, Negation und Reduktion kombiniert. Diese können wiederum aus der Kombination weiterer zusammengesetzter Ereignisse bestehen. [Modic00]
Ein interessanter Aspekt, was die zusammengesetzten Ereignisse betrifft, ist die
Erkennung des Auftretens eines komplexen Ereignisses. Wichtig dabei ist das
Erkennen der Reihenfolge für das Eintreten der atomaren Ereignisse. Dazu könnte
eine Protokolldatei geführt werden, in welcher der Eintrittszeitpunkt und weitere
Parameter verzeichnet werden. Bei der Erkennung zusammengesetzter Ereignisse
treten zudem verschiedene Fragen in Bezug auf den Ereignisverbrauch
auf.[Modic00]
7
Erweiterungskonzepte für das aktive DBMS
Aktive Datenbanken
Bedingungsteil
Durch die Angabe einer Bedingung kann der aktuelle Datenbankzustand auf bestimmte Eigenschaften hin überprüft werden. Die Bedingung wird dann ausgewertet, wenn die Regel ausgelöst wurde, d.h. wenn das Ereignis eingetreten ist. In einigen Systemen ist das Weglassen des Bedingungsteils erlaubt, was zur Folge hätte,
daß eine Regel nach Eintritt des auslösenden Ereignisses immer gefeuert würde.
Eine Bedingung kann z.B. eine Datenbankanfrage, ein Datenbankprädikat oder
eine Anwendungsprozedur sein.
• Bei einer Datenbankanfrage handelt es sich um eine Anfrage in der zugehörigen Anfragesprache, die entweder eine leere oder nicht leere Antwort
liefert.
• Bei einem Datenbankprädikat wird ein Datenbankzustand überprüft (z.B.
eine WHERE Klausel in SQL). Die am schwersten zu kontrollierenden aber
auch ausdrucksstärksten Beschreibungsarten in der Bedingung sind die Anwendungsprozeduren, die analog zu den Datenbankprädikaten einen Boole’schen Wert (TRUE oder FALSE) oder analog zu den Datenbankanfragen
leere oder nicht leere Datenmengen zurückgeben.
• Die Anwendungsprozeduren werden in der Anwendungsprogrammiersprache des zugrundeliegenden Systems in Form von Prozeduren oder Modulen geschrieben.
Aktionsteil
Im Aktionsteil wird definiert, wie auf eine bestimmte Situation (Ereignis und Bedingung) reagiert werden soll. Der Aktionsteil kann aus mehreren Anweisungen
bestehen, wie z.B. Datenmanipulationsoperationen, Datenbankbefehlen und Anwendungsprozeduren. Der Aktionsteil wird nach Eintreten eines Ereignisses und
nach Erfüllung einer Bedingung ausgeführt.
1.3.1
Regelausführung
Bei der Regeldefinition können gewisse Semantiken spezifiziert werden, die bei
der Aktionsverarbeitung zu berücksichtigen sind. Beispiele dafür sind, Prioritäten,
mit denen eine Verarbeitungsreihenfolge festgelegt werden kann, sowie auch
Kopplungsmodi, welche die Ausführung in Bezug auf Transaktionen1 beschreiben.
Daneben muß das Ausführungsmodell auch Mechanismen beinhalten, mit denen
Probleme, wie die Terminierung und die Reihenfolge der Regelverarbeitung
(conflict resolution), behandelt werden. Ein Überblick über solche Konstrukte wird
in den folgenden Abschnitten gegeben.
1
Bezeichnung für eine Folge von Datenbankoperationen, die einen bezüglich bestimmter Bedingungen zulässigen Übergang von einem zulässigen DB-Zustand wieder in einen zulässigen DBZustand bewirkt und nur als Einheit wirksam werden kann.
8
Erweiterungskonzepte für das aktive DBMS
Aktive Datenbanken
Auslösungszeitpunkte
Wird der Aktionsteil einer Regel gefeuert, so kann man in der Datenbank zwei
Zeitpunkte beobachten Einmal den Zeitpunkt vor (Pre-Zeitpunkt) und einmal den
nach (Post-Zeitpunkt) der Änderung des Datenbankzustandes. Es ist daher bei einem aktiven Datenbanksystem sinnvoll auf beide Auslösezeitpunkte reagieren zu
können.
Auslösungsgranularität
Da bei der Ausführung von Befehlen häufig auf mehrere Datensätze zugegriffen
wird, kann es sinnvoll sein, zwischen zwei verschiedenen Auslösegranularitäten
unterscheiden zu können. Instanzorientierte Regeln (instance-oriented) werden
für jeden betroffenen Datensatz einmal ausgeführt, während mengenorientierte
Regeln (set-oriented) einmal pro Befehl ausgeführt werden, egal auf wie viele Datensätze der Befehl zugreift.
Prioritäten
Bei der Ausführung einer Regel kann es vorkommen, daß durch ein Ereignis mehrere Regeln gleichzeitig gefeuert werden. Mit der Angabe einer Priorität für jede
Regel, kann eine Konfliktsituation, was die Reihenfolge der Abarbeitung betrifft,
vermieden werden.
Reihenfolge
Natürlich wäre es schön bei einer Konfliktsituation die Reihenfolge der Verarbeitung mit anzugeben. Es stellt sich die Frage, ob die gleichzeitig gefeuerten Trigger
nacheinander (sequentiell) oder vielleicht sogar nebeneinander (parallel) abgearbeitet werden sollen. Die sequentielle Lösung könnte mittels Datensperren verwirklicht werden, während die parallele Lösung entsprechende Funktionalität an das
ADBS fordert.
Kopplungsmodi [Mos85]
In einem aktiven Datenbanksystem werden Regeln nach Eintritt eines auslösenden
Ereignisses gefeuert. Der Zeitpunkt, zu dem diese Regel gefeuert wurde, muß jedoch nicht dem Zeitpunkt der Abarbeitung der Regel entsprechen. Manchmal ist es
sinnvoll, die Regelverarbeitung erst am Ende der regelauslösenden Transaktion
durchzuführen. Beim Anlegen einer Regel können zwei Arten von Kopplungen
angegeben werden. Diese kann entweder zwischen Ereignis und Bedingung (ECKopplung) oder zwischen Bedingung und Aktion (CA-Kopplung) angegeben
werden. Mit EC-Kopplung wird die zeitliche Beziehung zwischen dem Auftreten
eines regelauslösendem Ereignisses (E) und der Auswertung ihrer Bedingung (C)
beschrieben. Mit CA-Kopplung wird die zeitliche Beziehung zwischen der Auswertung der Bedingung (C) und der Ausführung der Aktion (A) beschrieben. Bei beiden Kopplungsarten können drei verschiedene Modi angegeben werden. Anhand
einer EC-Kopplung sind hier exemplarisch drei Möglichkeiten dargestellt.
9
Erweiterungskonzepte für das aktive DBMS
Aktive Datenbanken
• Immediate (sofort): die Bedingungsauswertung erfolgt in der gleichen
Transaktion unmittelbar nach dem Eintritt des Ereignisses.
• Deferred (verzögert): Die Bedingungsauswertung erfolgt in der gleichen
Transaktion, jedoch nach dem letzten Befehl und bevor die Transaktion in
die Datenbank festgeschrieben wird.
• Decoupled (getrennt): Die Bedingung wird in einer separaten Transaktion
ausgewertet. Es besteht keine Abhängigkeit zwischen den beiden Transaktionen.
Terminierung
In aktiven Datenbanksystemen können Regeln spezifiziert sein, die sich gegenseitig auslösen. Die Verarbeitung kann daher zu Regelkaskaden führen, da eine Regel
eine oder mehrere andere Regeln auslöst und jede dieser Regeln wiederum eine
oder mehrere Regeln auslöst usw. Einen Spezialfall dieser Kaskaden stellen Zyklen
dar, die eine Regel enthalten, die entweder direkt oder indirekt immer wieder ausgelöst wird. Ein solches Verhalten kann von den Benutzern gewollt sein. Jedoch
muß sichergestellt sein, daß Zyklen immer terminieren. Dieses Problem kann in
aktiven Datenbanksystemen auf verschiedene Arten gelöst werden. Eine triviale
Lösung besteht darin, daß keine Regeln definiert werden dürfen, die einen Zyklus
bilden.
Reihenfolge der Regelverarbeitung (conflict resolution)
Mit diesem Begriff wird das Problem der Verarbeitungsreihenfolge bezeichnet.
Durch
das Eintreten eines Ereignisses können mehrere Regeln ausgelöst werden, die zu
verarbeiten sind. Es stellt sich daher die Frage: „Welche Regel soll zuerst, welche
Regel danach usw. ausgeführt werden?“ Dieses Problem muß in aktiven Datenbanksystemen behandelt werden. Eine Möglichkeit besteht darin, daß das System
die Regeln in einer willkürlich festgelegten Reihenfolge verarbeitet.
Verbrauch von Ereignissen
Wenn eine Regel bearbeitet wird, d.h. ihre Bedingung ausgewertet und/oder ihre
Aktion ausgeführt wird, werden die sie auslösenden Ereignisse auf verschiedene
Arten behandelt, die als Ereignisverbrauchsmodi (event consumption modes) bezeichnet werden. Dabei sind zwei Aspekte von Bedeutung. Zum einen, ob die bearbeiteten Ereignisse ihre auslösende Wirkung auf Regeln beibehalten und zum
anderen, falls sie diese verlieren, wann die Wirkung erlischt, d.h. sozusagen das
Ereignis verbraucht wird. [ToPy98]
10
Erweiterungskonzepte für das aktive DBMS
Microsoft Access
Kapitel 2 Microsoft Access
Microsoft Access - ein relationales DBMS
Microsoft Access (abgek. MS-Access) [MS-A00] ist ein Vertreter der sogenannten
relationalen Datenbankverwaltungssysteme (Relational Database Management
System, abgek. RDBMS). In einem relationalen Datenbankverwaltungssystem
werden Daten als eine Menge von zweidimensionalen Tabellen gespeichert. Die
Tabellen bestehen aus einer festen Anzahl von Spalten und einer beliebigen Anzahl
von Zeilen. Jede Spalte einer Tabelle repräsentiert ein Attribut des Relationsschemas und jede Zeile entspricht einer spezifischen Instanz dieses Schemas, also einem Datensatz. Die Daten in diesen Tabellen werden mit Hilfe der strukturierten
Anfragesprache SQL (engl. Structured Query Language) manipuliert. SQL ist eine
standardisierte Sprache zur Definition und Manipulation von Daten in einer relationalen Datenbank.
MS-Access ist für die Verwaltung großer Datenbestände entwickelt worden. Neben
dieser Eigenschaft zeichnet sich MS-Access jedoch besonders durch die sehr leicht
zu bedienenden Oberflächen aus, die die Bearbeitung und Repräsentation von Daten gegenüber den klassischen RDBMS deutlich vereinfacht.
2.1 Architektur von Microsoft Access
Das Datenbanksystems Microsoft Access besteht aus drei funktionellen Komponenten:
• Dem Datenbankverwaltungssystem, das die Datenbestände auf der Festplatte verwaltet.
• Der Benutzeroberfläche, die als Schnittstelle zwischen Anwender und Datenbankverwaltungssystem den Zugriff auf die Daten und deren Präsentation erlaubt.
• Das VBA-System (Visual Basic for Application), welche die Programmierung von eigenen Anwendungen mit eigenen Benutzeroberflächen ermöglicht.
Darüber hinaus wird mit dem Datenbanksystem eine JET-Datenbank-Engine (siehe
Unterkapitel 2.2.2) zur Verfügung gestellt, um eine Verbindung zwischen den Datenbanken herzustellen. Dieser Datenmanager kommuniziert mit Objektschnittstellen wie DAO (Data Access Object), ADO (ActiveX Data Objects) und ODBC
(Object Database Connectivity). Die JET-Datenbank-Engine ist ein Teil des
Microsoft Access Datenbanksystems und liegt in Form von Systemdateien vor,
welche über ihre DAO-Objektschnittstelle angesprochen werden. Neben der DAOSchnittstelle werden ODBC, OLE-DB und in der neuesten Version auch ADO unterstützt. Die JET-Datenbank-Engine ist somit der Teil des Microsoft Access Da11
Erweiterungskonzepte für das aktive DBMS
Microsoft Access
tenbanksystems, der Daten aus Benutzer- und Systemdatenbanken abruft bzw. darin speichert. Sie kann als Datenmanager aufgefaßt werden.
2.2 Komponenten einer Datenbankanwendung
Nach dem Start einer neuen MS-Access-Anwendung wird das Datenbankfenster
eingeblendet. Es ist das Hauptfenster dieses Systems und stellt die Schaltzentrale
dar. Das Datenbankfenster dient der Übersicht über die Anwendungskomponenten.
In MS-Access bezeichnet man alles, was benannt werden kann, als Objekt. So besteht eine Microsoft Accessdatenbank aus verschiedenen Objekten, die man einem
bestimmten Objekttyp zuordnen kann. Aus dem Zusammenspiel dieser Objekte
wird aus einer Datenbank eine Anwendung erstellt. Die Hauptobjekte einer AccessDatenbank sind Tabellen, Abfragen, Formulare, Berichte, Datenzugriffsseiten,
Makros und Module. Im folgenden werden diese Komponenten in einfacher Form
vorgestellt, da eine detaillierte Erläuterung den Rahmen der Arbeit sprengen würde.
Datenbankkomponenten
ausgewählte Registerkarte
Liste der Tabellen in der Datenbank
Abbildung 2.1: Datenbankfenster
Alle Daten werden in Tabellen gespeichert. Alle anderen Objekte der Datenbank
greifen auf diese Tabellen zu, um die dort gespeicherten Daten bearbeiten, ergänzen,
löschen oder anzeigen zu können. Ein Datensatz dieser Tabellen bildet dabei ein Objekt aus der Wirklichkeit ab. Die dazugehörigen Datenfelder enthalten die relevanten Eigenschaften des Objekts. Für jede Tabelle kann ein Primärschlüssel (bestehend aus einem oder mehreren Feldern einer Tabelle) und einem Index (oder meh12
Erweiterungskonzepte für das aktive DBMS
Microsoft Access
reren Indizes) definiert werden. Der Primärschlüssel dient der eindeutigen Identifizierung des Datensatzes und der Index (oder mehrere Indizes) dem schnelleren
Zugriff auf diesen.
Abfragen sind Objekte, mit denen eine individuelle Auswahl der Daten aus einer
oder mehreren Tabellen ermöglicht wird. Eine Abfrage kann unter Microsoft Access auf zwei Weisen realisiert werden. Entweder mit SQL-Befehlen in einem speziellen SQL-Ansichtsfenster oder in einem Entwurfsansichtsfenster. In der Entwurfsansicht bedient man sich der QBE-Funktion (Query By Example). Die Abfragen werden hier mit den Möglichkeiten der graphischen Benutzeroberfläche
entworfen. Beim Wechsel in die SQL-Ansicht werden die QBE-Funktionen automatisch in SQL-Befehle übersetzt, so daß man beide Möglichkeiten gemeinsam bei
der Entwicklung einer Abfrage nutzen kann.
Formulare sind mit die interessantesten Objekte die Microsoft Access zu bieten
hat. Sie dienen im wesentlichen der Dateneingabe und Datenanzeige, sowie der
Steuerung von Programmausführungen. Ein Formular kann an einer Datenbankquelle (z.B. an eine Tabelle oder eine Abfrage) gebunden werden, um die Daten
benutzergerecht darzustellen und um die Dateneingabe zu kontrollieren. Formulare
können als Reaktion auf ein beliebiges Ereignis aufgerufen werden und bieten die
Möglichkeit Grafiken und OLE-Objekte (Objekt Linking and Embedding) in einem Formular anzuzeigen (Kapitel 2.2.2).
Berichte ähneln Formularen. Sie dienen jedoch nicht der Datenbearbeitung, sondern der Datenanzeige. Berichte sind für die Ausgabe auf dem Medium Papier zugeschnitten. Formulare hingegen sind zugeschnitten auf die Ausgabe der Daten auf
Monitoren. Auf Berichte wird hier nicht weiter eingegangen, da sie in ARTA II
nicht verwendet werden.
Möchte man die Daten einer Access-Datenbank im Internet oder Intranet anzeigen
oder bearbeiten, so kann dies mit Hilfe der Datenzugriffsseiten verwirklicht werden. Sie sind in ihrer Zweckbestimmung mit den Formularen und Berichten verwandt. Im Gegensatz zu Formularen und Berichten werden Datenzugriffsseiten
aber nicht direkt in der Datenbank gespeichert. Wenn in Access eine Datenzugriffsseite erstellt wird, wird die entsprechende Seite außerhalb der Datenbankdatei gespeichert und in der Datenbankdatei eine Verknüpfung zu dieser externen
Datei erstellt. Im Verlauf der Arbeit wird auf diesen Punkt nicht weiter eingegangen. [JeRe02]
In einer Datenbank werden unter Umständen bestimmte Aktionen immer wieder
ausgeführt. Um diese Vorgänge zu automatisieren, können Makros verwendet
werden. Sie dienen der Steigerung der Benutzerfreundlichkeit und stellen im Grunde eine Liste von Aktionen dar, die nacheinander ausgeführt werden sollen. Prinzipiell könnten die Aktionen eines Makros auch über Menubefehle in Access ausgeführt werden. Über Makros und Module wird die Intelligenz der Datenbank entworfen. Sie sind das fehlende Glied zwischen den einzelnen Objekten der Datenbank und verbinden diese zu einer leistungsstarken Anwendung. [JeRe02]
13
Erweiterungskonzepte für das aktive DBMS
Microsoft Access
Ein Modul besteht aus selbstdefinierten Prozeduren oder Funktionen, die in VBA
erstellt wurden. Mit Hilfe der Module können Aktionen in mehrere Einzelschritte
zerlegt werden. Zudem besteht die Möglichkeit der Fehlerbehandlung, was den
wesentlichen Unterschied zu Makros darstellt. Module sind entweder eigenständige
Objekte, die von jedem Punkt der Anwendung aus aufgerufen werden können oder
Objekte, die unmittelbar mit Formularen oder Berichten verknüpft sind. Der Vorteil ist, daß sie auf Ereignisse antworten, die im Formular oder Bericht auftreten
können. [JeRe02]
Der Vollständigkeit halber seien hier die Gruppen in der Gruppenleiste erwähnt
(siehe Abbildung 2.1). Bei Gruppen handelt es sich nicht um Datenbankobjekte im
strengen Sinne. Verknüpfungen zu Datenbankobjekten können hier angelegt werden, um einen schnelleren Zugriff auf diese zu bekommen. Oft benutzte Formulare
können in Gruppen hinzugefügt werden, so daß sie stets schnell verfügbar sind.
[JeRe02]
Die folgende Abbildung verdeutlicht die Beziehungen zwischen den Objekten von
Microsoft Access. Es wurde mit Absicht auf die Datenblattansicht verzichtet, um
das Diagramm zu vereinfachen.
Definieren
Formulare, Berichte
Abfragen, Tabellen
Öffnen, Format,
Filter, Formulare,
Abfragen, Berichte
Module
Funktionen
Subroutinen
Auslöser
Öffnen/
Filter
Ausführen/
Aufrufen
Auslöser
Ausführen (Funktionen)
Druck
Ansicht
Filter
Makros
Auslöser
Auslöser
Öffnen, Format,
Filter, Formulare,
Abfragen, Berichte
Formulare
Berichte
Ausführen (Funktionen)
Abfragen
Aktion
Tabellen
Datenfluß
Abbildung 2.2: Die Hauptobjekte von Microsoft Access und ihre Beziehungen [JoVi96]
Jede Microsoft Access-Anwendung (-Datenbank) speichert die zuvor erwähnten
Anwendungskomponenten (Tabellen, Formulare, Abfragen, Berichte, Makros und
Module) in einer monolithischen .mdb-Datei (Microsoft Access Database) ab. Es
14
Erweiterungskonzepte für das aktive DBMS
Microsoft Access
ist allerdings möglich die Tabellendefinitionen (Data Dictionary) und den Datenbestand, sowie die Oberfläche in zwei verschiedenen Dateien zu halten. Dies geschieht durch eine Funktion, die zur Verknüpfung von Tabellen dient. Bei der Entwicklung von ARTA II wurden die Datenbanktabellen und das ARTA IIDatenbanksystem voneinander getrennt, was viele Vorteile mit sich bringt. Mehr
dazu in Kapitel 7.
In den folgenden Abschnitten werden die einzelnen zuvor erwähnten Anwendungskomponenten vorgestellt. Dabei werden nur die in Bezug auf das ARTASystem relevanten Komponenten erwähnt.
2.2.1
Tabellen
Eine Tabelle ist eine Auflistung von Daten zu einem bestimmten Thema, wie z.B.
Angaben zu einem Student: Name, Matrikelnummer, Semester. Wie zuvor erwähnt
repräsentiert jede Spalte einer Tabelle ein Attribut des Relationsschemas und jede
Zeile der Tabelle entspricht einem Tupel der Relation. Ein Datensatz entspricht
einem Datenbankzustand.
Entwurfs- und Datenblattansicht
Wenn die Struktur oder die Gestaltung der Tabelle verändert werden soll, so geschieht dies in der Entwurfsansicht der Tabelle. In dieser Ansicht bezeichnet jede
Zeile im oberen Teil des Tabellenfensters ein anderes Feld der Tabelle. Beim Markieren eines Feldes erscheinen im unteren Bereich die Eigenschaften zu diesem
Feld. Diese sind unterteilt in „Allgemein“ und „Nachschlagen“.
Schlüsselvergabe
Jede Zeile definiert ein Feld der Tabelle
Einstellungen für die Eigenschaften
Liste der Eigenschaften für das aktuelle Feld
Abbildung 2.3: Entwurfsansicht einer Tabelle
15
Erweiterungskonzepte für das aktive DBMS
Microsoft Access
In den allgemeinen Feldeigenschaften können Gültigkeitsregeln für die einzelnen
Felder angegeben werden. So ist es z.B. möglich bei einem Textfeld die Feldgröße
anzugeben. Bei der Verletzung einer Gültigkeitsregel kann eine vordefinierte Meldung, die unter Gültigkeitsmeldung formuliert wird, ausgegeben werden. Mit dem
Eingabeformat lassen sich Eingabehilfen erstellen. Dazu das Beispiel der Eingabe
eines Datums. Wünschenswert wäre, die Eingabe eines Datums ohne Trennpunkte
und mit Platzhaltern für Tag, Monat und Jahr (_ _. _ _ . _ _ _ _). Eine weitere hilfreiche Eigenschaft ist die Formulierung von Gültigkeitsregeln. Diese geben an,
welche Anforderungen die Eingabedaten in einem Datensatz, Feld oder Steuerelement erfüllen müssen Dazu kann ein Ausdrucksgenerator aufgerufen werden, mit
dessen Hilfe sich komplexe Ausdrücke mittels Funktionen, Konstanten und Operatoren erstellen lassen.
Interessant ist auch die zweite Seite der Feldeigenschaften „Nachschlagen“. Hier
kann angegeben werden, wie sich ein Steuerelement verhalten soll, wenn es an dieses Tabellenfeld gebunden wird. In der folgenden Abbildung sind die Einstellungen
für das Tabellenfeld Student_Hauptfach zu sehen. Ein Steuerelement, das mit diesem Feld in Verbindung steht, bekommt eine Werteliste als Datenherkunft zugewiesen. Die Werte der Liste werden durch Semikolon getrennt. In der Datenblattansicht in Abbildung 2.5 wird diese Einstellung sichtbar. Bei der Eingabe eines
Hauptfaches wird die Werteliste eingeblendet, um aus ihr einen Eintrag auswählen
zu können.
Abbildung 2.4: Zweite Seite der Feldeigenschaften
Schlüsselvergabe
Jede Tabelle einer relationalen Datenbank sollte mit einem Schlüsseln versehen
werden, um im Regelfall den Zugriff auf die in den Tabellen gespeicherten Daten
zu beschleunigen und eindeutig zu machen. Einmal definierte Schlüssel werden
von MS-Access automatisch verwendet, sofern es die Anwendung erlaubt. MSAccess ermöglicht es zwei Arten von Schlüsseln in Tabellen zu vergeben:
• Der Primärschlüssel beschleunigt den Zugriff auf die Daten in der Tabelle.
Für jede Tabelle sollte ein Primärschlüssel vergeben werden, der eine ein16
Erweiterungskonzepte für das aktive DBMS
Microsoft Access
deutige Identifikation eines jeden Datensatzes in der Tabelle ermöglicht.
Unter MS-Access kann der Primärschlüssel aus einem oder mehreren Feldern bestehen. Es kann jedoch nur einen Primärschlüssel oder zusammengesetzten Primärschlüssel in einer Tabelle geben.
• Fremdschlüssel werden von MS-Access automatisch bei der Suche oder bei
der Abfrage von Datenbeständen verwendet und können diese Prozesse erheblich beschleunigen. Unter MS-Access können Fremdschlüssel definiert
werden, die aus einem oder bis zu zehn Datenfeldern bestehen.
Bei der Vergabe von Schlüsseln unter MS-Access ist zu beachten, daß deren Pflege
während der Bearbeitung von Daten Rechenzeit, Arbeits- und Festplattenspeicher
erfordert. Schlüssel sollten daher hauptsächlich für die Felder definiert werden, die
häufig bei der Datensuche oder der Sortierung verwendet werden. Für weniger häufig auftretende Sortierreihenfolgen sollten Abfragen definiert werden. Zwar benötigen diese mehr Zeit als ein Zugriff über Schlüssel, der Zeitbedarf ist jedoch auf
einen Zeitpunkt beschränkt. Abfragen werden von MS-Access nicht ständig gepflegt und belasten somit den normalen Ablauf weniger als Schlüssel.
In der Datenblattansicht können die Daten einer Tabelle hinzugefügt, gelöscht
oder geändert werden. Jeder Datensatz, der erfaßt oder geändert wird, wird automatisch gespeichert, sobald der Cursor aus diesem Datensatz herausgenommen wird.
Abbildung 2.5: Datenblattansicht einer Tabelle
Beziehungen
Microsoft Access bietet mit dem Beziehungsfenster die Möglichkeit, Beziehungen
zwischen einzelnen Tabellen anzugeben. Interessant ist der Aspekt, daß Beziehungen ein separates Konzept und nicht Teil des Tabellenentwurfs sind. Das Beziehungsfenster kann von der Menüleiste aus geöffnet werden.
Nachdem verschiedene Tabellen zu den einzelnen Themen in der Microsoft Access-Datenbank angelegt wurden, muß Microsoft Access mitgeteilt werden, wie
17
Erweiterungskonzepte für das aktive DBMS
Microsoft Access
diese Informationen wieder zusammengeführt werden. Der erste Schritt in diesem
Prozeß besteht darin, Beziehungen zwischen ihren Tabellen zu definieren. Anschließend können Abfragen, Formulare und Berichte erstellt werden, um die Informationen aus verschiedenen Tabellen gleichzeitig anzuzeigen.
Eine Beziehung bezeichnet die Ein- oder Mehrdeutigkeit einer sinnvollen Verknüpfung von Attributen (Datenfeldern) innerhalb einer oder mehrerer Datentabellen.
Eine wichtige Rolle spielen solche Beziehungen vor allem bei der Verknüpfung
mehrerer Tabellen zu einem umfassenden Informationspool. Eine solche Verknüpfung wird in Microsoft Access durch das Einfügen eines eindeutigen Attributes
(Datenfeld) aus der Primärtabelle ermöglicht.
Abbildung 2.6: ARTA II-Anwendungsdaten in der Beziehungsansicht
Beziehungstypen
Microsoft Access kennt drei Typen von Beziehungen. Die 1:1 (eins zu eins), 1:n
(eins zu n) und die n:m (n zu m)Beziehungen.
In der 1:1 Beziehung entspricht ein Attributwert der Primärtabelle genau einem
einzigen anderen Attributwert aus der Fremdtabelle. Dies ist die einfachste und
klarste Datenbeziehung.
Eine 1:n Beziehung kennt für einen eindeutigen Ausgangswert mehrere andere
zugeordnete Werte. Sie gehört zu den häufigsten Typen von Datenbeziehungen.
Das wichtigste bei diesem Beziehungstyp ist die klare Identifizierung des eindeutigen Ausgangswertes.
Bei einer m:n Beziehung lassen sich mehrere Attributwerte mehreren Werten eines anderen Attributes zuordnen. Diese Art der Beziehung sollte nach Möglichkeit
vermieden werden, da bei einer derartig unklaren Beziehungsdefinition kaum ver18
Erweiterungskonzepte für das aktive DBMS
Microsoft Access
nünftige Auswertungen mit den Daten durchgeführt werden können. Häufig können solche Beziehungen durch zusätzliche Tabellen weiter aufgegliedert und vereinfacht werden.
19
Erweiterungskonzepte für das aktive DBMS
Microsoft Access
Referentielle Integrität
Microsoft Access bietet die Möglichkeit referentielle Integrität in Tabellen festzulegen. Dadurch wird sichergestellt, das Beziehungen zwischen Datensätzen gültig
sind und die verknüpften Daten nicht versehentlich geändert oder gelöscht werden.
Dies dient unter anderem der Aktualisierungsweitergabe und der Löschweitergabe
bei Tabellen.
Bei der Löschweitergabe werden beim Löschen eines Datensatzes in der Primärtabelle ebenfalls alle Detaildatensätze in der Detailtabelle gelöscht.
Bei der Aktualisierungsabfrage wird beim Ändern eines Primärschlüsselwertes in
der Primärtabelle der damit übereinstimmende Wert in allen Detaildatensätzen automatisch aktualisiert.
Abbildung 2.7: Fenster zum Einstellen der referentiellen Integrität
Mit der Definition der referentiellen Integrität werden gleichzeitig eine Beziehung
und eine Eingabeprüfung definiert. Ist sie erst einmal definiert, so erkennt MSAccess die relationale Verknüpfung dieser Tabellen bei der Neuanlage von Abfragen, Formularen und Berichten automatisch. Weiterhin gewährleistet MS-Access
die referentielle Integrität nun überall dort, wo Daten bearbeitet werden können.
Dies betrifft sowohl Dateneingaben in das Tabellen- und Formularfenster, als auch
beispielsweise Aktualisierungsabfragen.
2.2.2
Abfragen
Eine Abfrage dient dazu, aus den Tabellen einer Datenbank ausgewählte Felder
anzuzeigen und ggf. zu ändern. Man kann also Spalten angeben, die in die Abfrage
aufgenommen werden sollen. Außerdem können Kriterien angegeben werden, nach
denen die anzuzeigenden Datensätze ausgewählt werden. Dies erzeugt also eine
Auswahl unter den Zeilen der Tabellen. Eine Abfrage stellt somit einen Ausschnitt
aus der Datenbank dar, der entweder direkt als Datenblatt betrachtet oder als
Grundlage für einen Bericht oder ein Formular benutzt werden kann.
20
Erweiterungskonzepte für das aktive DBMS
Microsoft Access
Der für ARTA II wichtigste Abfragetyp ist die Auswahlabfrage, die der gebräuchlichste Abfragetyp ist. Sie ruft Daten aus einer oder mehrerer Tabellen ab und zeigt
die Ergebnisse in einem Datenblatt an. Dort können die Datensätze nach einer Änderung direkt aktualisiert werden. Mit einer Auswahlabfrage können auch Datensätze gruppiert und Summen, Anzahl, Durchschnittswerte und andere Werte berechnet werden. Für die Auswahlabfrage stehen verschiedene Ansichten zur Auswahl. Die wichtigsten sind die Entwurfs-, Datenblatt- und SQL-Ansicht.
In der Entwurfsansicht werden mit Hilfe der Tabellen oder abgespeicherten Abfragen neue Abfragen formuliert. Im oberen Bereich des Abfragefensters werden
die Feldlisten der Tabelle oder anderer Abfragen angezeigt, die in die Abfrage eingehen.
Abbildung 2.8: Auswahlabfrage mit Hilfe einer Tabelle (tbl_Student)
Im unteren Bereich des Abfragefensters sieht man das Entwurfsraster. Hier werden
alle für die Abfrage verwendeten Felder angezeigt. Hier können Sortier- und Auswahlkriterien eingestellt werden.
In der Datenblattansicht wird die Auswertung der Abfrage in Form eines Datenblattes angezeigt. Es werden alle Daten angezeigt, die aus der Abfrage hervorgehen. Diese Sicht dient vor allem der Überprüfung der Richtigkeit. So können einfache Fehler bei der Erstellung einer Abfrage direkt entdeckt werden. Die Datenblattansicht ähnelt sehr der Tabellenansicht mit dem Unterschied, daß der Anwender
nicht unterscheiden kann, ob die Daten aus einer oder mehrerer Tabellen stammen.
Auch hier können Daten eingegeben, geändert und gelöscht werden.
21
Erweiterungskonzepte für das aktive DBMS
Microsoft Access
Abbildung 2.9: Datenblattansicht einer Abfrage
In der SQL-Ansicht wird die SQL-Anweisung, die in der aktuellen Abfrage verwendet wird, angezeigt. Wenn eine Abfrage in der Entwurfsansicht formuliert
wurde, erstellt MS-Access im Hintergrund die entsprechende SQL-Anweisung. Die
meisten Abfrageeigenschaften im Eigenschaftsfenster der Entwurfsansicht besitzen
äquivalente Klauseln und Optionen in der SQL-Ansicht. SQL-Anweisungen können in der SQL-Ansicht bearbeitet und anzeigt werden.
Abbildung 2.10: SQL-Ansichtsfenster
Außer der Auswahlabfrage existieren noch eine Aktualisierungs-, Einfüge-, und
Löschabfrage, auf die hier nicht weiter eingegangen wird.
2.2.3
Formulare
Ein Formular ist ein Typ von Datenbankobjekt, der hauptsächlich zur Eingabe oder
Anzeige von Daten in einer Datenbank verwendet wird. Die meisten Formulare
sind an eine Datenquelle gebunden.
Die Datenquelle eines Formulars bezieht sich auf die Felder in den zugrunde liegenden Tabellen oder Abfragen. Als Datenquelle kann auch eine SQL-Anweisung
dienen. Ein Formular muß nicht alle Felder der Datenquelle enthalten, sondern
kann auch gefilterte Daten anzeigen.
Wie zuvor erwähnt werden in einem gebundenen Formular alle Daten aus der
zugrunde liegenden Datenquelle zur Verfügung gestellt. Zusätzliche Informationen
zum Formular, wie z. B. Titel, Datum oder grafische Elemente, sind in dem Entwurf des Formulars gespeichert.
22
Erweiterungskonzepte für das aktive DBMS
Microsoft Access
Entwurfsansicht eines Formulars
Möchte man das Design, die Datenquelle oder andere Objekte bezüglich des Formulars ändern, so muß das Formular in der Entwurfsansicht geöffnet werden, siehe
folgende Abbildung.
Schaltfläche Toolbox
Schaltfläche Feldliste
Eigenschaftsfenster
Schaltfläche Eigenschaft
Formular in
Entwurfsansicht
Feldlistenfenster
Symbolleiste
Toolbox
Abbildung 2.11: Das Formular Usys_frm_Trigger_CreateModify in der Enwurfsansicht
Die Toolbox ist das Kontrollzentrum der Formulargestaltung. Mit diesem Werkzeug werden bei der Erstellung des Formulars alle notwendigen Steuerelemente zur
Verfügung gestellt.
Steuerelemente sind Objekte, die im Formular eingebunden werden können, um
Daten anzuzeigen, zu verändern oder sogar zu löschen. Außerdem kann man mit
Steuerelementen, wie Linien oder Rechtecke, die Formulare grafisch aufbereiten,
um z.B. Daten strukturierter darstellen zu können.
Die Feldliste ist ein Fenster, in welchem alle verfügbaren Felder einer zuvor mit
dem Formular gebundenen Datenquelle, angezeigt werden können. Per Drag &
Drop kann man ein Feldelement in das Formular integrieren. Beim Wechsel von
der Entwurfs- in die Formularansicht erscheint dann an dieser Stelle der Inhalt des
Feldes der Tabelle.
23
Erweiterungskonzepte für das aktive DBMS
Microsoft Access
Um die Eigenschaften eines Steuerelementes zu ändern, ruft man das Eigenschaftsfenster auf. Das Eigenschaftsfenster zeigt immer die Werte für das aktuell
ausgewählte Steuerelement im Formularfenster an. Allein durch die immensen Einstellungsmöglichkeiten für jedes Steuerelement kann man eine Anwendung erstellen, ohne auch nur eine einzige Zeile Programmiercode zu schreiben. Über das Eigenschaftsfenster können sogar Gültigkeitsregeln festgelegt werden, so daß Daten
bei der Eingabe direkt auf ihre Richtigkeit hin überprüft werden können. Im Eigenschaftsfenster findet man den Reiter „Ereignis“, hier können Makros oder Ereignisprozeduren hinterlegt werden.
In Formularen und Berichten stellt Microsoft Access über 40 Ereignisse zur Verfügung, die Makros oder Ereignisprozeduren2 auslösen können. Ein Ereignistyp für
ein Steuerelement könnte z.B. On_Click (bei Mausklick) lauten. Eine entsprechende Reaktion auf den Mausklick könnte das Schließen des aktiven Fensters sein.
Wichtig zu wissen ist auch die Reihenfolge, mit der Ereignisse abgearbeitet werden. Im folgenden ist die Ereignisreihenfolge für ein Formular, vom Öffnen bis
zum Schließen, dargestellt.
Open ⇒ Load ⇒ Resize ⇒ Activate ⇒ Current.
So können, z.B. beim Öffnen eines Formulars, VBA-Prozeduren oder Makros ausgeführt werden, bevor das Formular aktiviert und mit Daten gefüllt wird.
Steuerelemente
Steuerelemente sind ein wichtiges Hilfsmittel, um z.B. eine Verknüpfung zwischen
einem Formular und seiner Datenquelle herzustellen. Der am häufigsten zur Anzeige und Eingabe von Daten verwendete Steuerelementtyp ist das Textfeld. Steuerelemente sind Objekte der grafischen Benutzeroberfläche. Es gibt in MS-Access
eine große Anzahl an Steuerelementen, wie z.B. das Textfeld, das Kontrollkästchen, die Bildlaufleiste oder die Befehlsschaltfläche. Sie dienen der Steuerung des
Programms durch den Benutzer. Mit Hilfe von Steuerelementen können Daten
bzw. eine Auswahl von Daten, angezeigt und verändert werden. Ein großer Vorteil
ist zudem die Möglichkeit Aktionen im Hintergrund auszulösen. So kann auf bestimmte Situationen reagiert werden, ohne daß der Benutzer etwas davon erfährt.
Ein weiterer Vorteil für die Benutzung von Steuerelementen ist, daß die Lesbarkeit
der Benutzeroberfläche deutlich vereinfacht wird.
Microsoft Access enthält folgende Steuerelementtypen, auf die in der Entwurfsansicht eines Formulars zugegriffen werden kann: Textfeld, Bezeichnungsfeld, Optionsgruppe, Optionsfeld, Kontrollkästchen, Listenfeld, Befehlsschaltfläche, Registersteuerelement, Bild-Steuerelement, Linie, Rechteck sowie benutzerdefinierte
2
Eine Prozedur ist eine Einheit von Microsoft Visual Basic-Code. Sie enthält eine Reihe von
Anweisungen und Methoden, die eine Operation durchführen oder einen Wert berechnen.
24
Erweiterungskonzepte für das aktive DBMS
Microsoft Access
ActiveX-Steuerelemente. Hier werden nur kurz die Text-, Listen-, Kombinationsfelder und das Registersteuerelement vorgestellt.
25
Erweiterungskonzepte für das aktive DBMS
Microsoft Access
Textfelder
Textfelder dienen der Anzeige und Eingabe von Daten einer Datenquelle in einem
Formular. Dieser Textfeldtyp wird als gebundenes Textfeld bezeichnet, da es an
Daten eines Feldes gebunden ist. Textfelder können auch ungebunden sein. Beispielsweise kann ein ungebundenes Textfeld erstellt werden, um das Ergebnis einer
Berechnung anzuzeigen oder Benutzereingaben aufzunehmen. Daten in einem ungebundenen Textfeld werden nicht in einer Tabelle gespeichert.
Listenfelder
Es ist oftmals leichter und schneller einen Wert aus einer Liste auszuwählen, als
ihn einzugeben. Dies kann mit Hilfe einer Auswahlliste realisiert werden, die außerdem sicherstellt, daß der Wert, der in ein Feld eingegeben wurde, korrekt ist.
Falls auf dem Formular genügend Platz vorhanden ist, um die Liste ständig anzuzeigen, kann ein Listenfeld verwendet werden. Wenn ein Steuerelement erstellen
werden soll, welches eine Liste anzeigen und wenig Platz einnehmen soll, so verwendet man ein Kombinationsfeld.
Abbildung 2.12: Listenfeld
Die Liste eines Listenfeldes besteht aus Datenzeilen. In einem Formular kann ein
Listenfeld aus einer oder mehreren Spalten bestehen, die mit oder ohne Überschriften angezeigt werden können. Wenn ein mehrspaltiges Listenfeld gebunden ist,
speichert MS-Access die Werte aus einer der Spalten in die Datenquelle.
Kombinationsfelder
Ein Kombinationsfeld ist eine Kombination aus Textfeld und Listenfeld und nimmt
folglich wenig Platz ein. Neue Werte können über das Kombinationsfeld eingegeben werden und Werte können aus einer Liste ausgewählt werden. Die Liste eines
Kombinationsfeldes besteht aus Datenzeilen. Diese Zeilen wiederum können aus
einer oder mehreren Spalten bestehen, die mit oder ohne Überschriften angezeigt
werden können.
26
Erweiterungskonzepte für das aktive DBMS
Microsoft Access
Abbildung 2.13: Kombinationsfeld, das mit allen verfügbaren Tabellen verbunden ist
Registersteuerelemente
Mit diesem Steuerelement kann ein Formular oder ein Dialogfeld erstellen werden,
das mehrere Seiten mit je einer Registerkarte enthält. Jede Registerkarte weist dabei ähnliche Steuerelemente auf, wie z. B. Textfelder oder Optionsfelder. Sobald
ein Benutzer auf eine Registerkarte klickt, wird die zugehörige Seite zur aktiven
Seite.
Abbildung 2.14: Registerkartensteuerelement
2.2.4
Makros
Makros bezeichnen eine Reihe von Aktionen, die zur Automatisierung von häufig
vorkommenden Aufgaben erstellt werden. Mit Hilfe von Makrogruppen können
mehrere Aufgaben gleichzeitig ausführt werden. Gegenüber Lösungen die mittels
VBA erstellt werden, haben Makros mehrere Nachteile. So ist z.B. ein vernünftiges
Zusammenspiel der Abfrage genausowenig möglich, wie auf Fehler zu reagieren.
Makros sind in ihrer Gestaltung unübersichtlich und lassen sich nicht im nötigen
Umfang mit Anmerkungen und Dokumentationen für den Entwickler versehen.
Alle Makrobefehle lassen sich auch mit Visual Basic erstellen, mit dem Unterschied, daß hier die zuvor erwähnten Einschränkungen nicht vorhanden sind.
Allerdings gibt es zwei Makros, die sinnvoll sein können:
• Ein Autoexec-Makro kann beim Starten der Anwendung einen einzelnen
„ÖffnenFormular“-Befehl ausführen. Alles weitere erledigt danach eine
Prozedur, die „BeimÖffnen“ des Formulars gestartet wird. Allerdings ist
selbst dafür ein Makro nicht unbedingt notwendig; man kann ebenso im
Menü 'Extras/Start' ein Formular auswählen, das automatisch gestartet werden soll.
27
Erweiterungskonzepte für das aktive DBMS
Microsoft Access
• Ein Tastaturbelegungs-Makro kann zur individuellen Tastenbelegung genutzt werden. Dazu muß das Makro 'Autokeys' genannt werden.
2.2.5
Module
Module [JeRe02] enthalten eine Auflistung von VBA-Deklarationen und Prozeduren. Mit VBA steht ein wirkungsvolles Instrument zur Verfügung, mit dessen Hilfe sich komplexe Datenbankanwendungen entwickeln lassen. Generell kann
man eine Einteilung der Prozeduren in Subprozeduren und Funktionen vornehmen.
Funktionen geben Werte zurück und können in Ausdrücken verwendet werden.
Sie werden mittels der Schlüsselwörter Function und End Function deklariert.
Sub-Prozeduren führen Aktionen aus und liefern keine Werte zurück. Sie werden
mittels der Schlüsselwörter Sub und End Sub deklariert.
Funktionen und Sub-Prozeduren werden in Einheiten zusammengefaßt gespeichert.
Diese Einheiten werden als Module bezeichnet. Module können aber nicht aufgerufen oder ausgeführt werden. Vielmehr werden die in diesen Modulen gespeicherten Sub-Prozeduren und Funktionen aufgerufen. VBA-Code kann in MSAccess auf verschiedene Arten ausgeführt werden. Von besonderer Bedeutung sind
dabei die Ereignisprozeduren.
Mittels Ereignisprozeduren kann auf Aktionen, die durch den Benutzer der Datenbank ausgeführt werden, reagiert werden. Aufgrund dieser Aktionen treten bestimmte Ereignisse ein, in denen so genannte Ereignisprozeduren ausgeführt werden können. Wenn in Formularen, Berichten oder Steuerelementen eine Ereignisprozedur erstellt wurde, stellt MS-Access Vorlagen für die Ereignisprozeduren zur
Verfügung, die auf etwaige Besonderheiten der einzelnen Ereignisse eingehen. So
können zum Beispiel bestimmte Ereignisse rückgängig gemacht werden, jedoch
nicht alle Ereignisse. Es muß lediglich der Code hinzugefügt werden, der als Reaktion auf ein bestimmtes Ereignis ausgeführt werden soll.
Der wesentliche Vorteil der Nutzung von VBA in Modulen gegenüber der Verwendung von Makros besteht in der größeren Flexibilität und den weitreichenden
Möglichkeiten, die diese Programmiersprache bietet.
2.3 Datenzugriffsschnittstellen
Datenzugriffsschnittstellen werden für den Zugriff auf Tabellen und Abfragen benötigt. In den folgenden Abschnitten wird eine Übersicht über die verschiedenen
Schnittstellen vorgestellt die von Microsoft Access benutzt werden.
2.3.1
Microsoft JET-Datenbank-Engine
Die JET-Datenbank-Engine ist ein Teil des MS-Access-DBMS und liegt in Form
von Systemdateien vor, welche über ihre Objektschnittstelle DAO (Data Access
Object) angesprochen werden. Neben der DAO-Schnittstelle werden ODBC, OLEDB und in der neuesten Version auch ADO unterstützt. Die JET-Datenbank-Engine
ist somit der Teil des MS-Access-DBMS, der Daten aus Benutzer- und Systemda28
Erweiterungskonzepte für das aktive DBMS
Microsoft Access
tenbanken abruft bzw. darin speichert. Sie kann als Datenmanager aufgefaßt werden.
2.3.2
ODBC (Object Database Connectivity)
ODBC [WiPe] ist ein so genanntes Application Programming Interface (API), also
eine Programmierschnittstelle, die einem Programmierer erlaubt, seine Anwendung
unabhängig von der verwendeten Datenbank zu entwickeln. Microsoft bietet dazu
einen ODBC-Treiber an, welcher die Kommunikation zwischen Programm und
Datenbank übernimmt.
Wird Quellcode geschrieben, der auf eine Datenbank zugreifen soll, muß gewöhnlich eine Sprache verwendet werden, die nur bei dieser speziellen Datenbank funktioniert. Wenn zum Beispiel Microsoft Access, MySQL und Oracle Datenbanken
unterstützt werden soll, so muß derselbe Programmteil dreimal programmiert werden. Wird hingegen ODBC verwendet, so muß nur die ODBC-Sprache anwendet
werden, welche eine Kombination aus ODBC-API Funktionsaufrufen und der
SQL-Sprache ist.
Der ODBC-Manager findet automatisch heraus, wie er mit der verwendeten Datenbank kommunizieren muß. Unabhängig vom Datenbanktyp übersetzt er die Anweisungen in die Sprache, die der SQL-Server erwartet. Es muß lediglich ein ODBCTreiber für die Datenbank, die verwendet werden soll, installiert sein.
2.3.3
OLE–DB (Object Linking and Embedding)
OLE-DB [AbIt] ist eine Erweiterung von Dynamic Data Exchange (DDE) durch
Microsoft und dient ebenfalls zur Verknüpfung von Elementen, wie Text, Bilder,
Tabellen oder Sound, in verschiedenen Programmen. Man unterscheidet zwischen
zwei Methoden zur Referenzierung von Daten in Dokumenten: Embedding und
Linking. Bei Embedding werden die Daten und Programme fest miteinander verbunden und in einer einzelnen Datei abgespeichert. Änderungen der externen Daten
werden im Gesamtdokument nicht aktualisiert. Die Methode Linking speichert nur
eine Referenz auf die entsprechenden Daten, so daß eine Änderung der Daten sofort im Dokument aktualisiert wird. Wird die Daten-Datei allerdings gelöscht, so
fehlen die Informationen im Dokument.
2.3.4
Database Access Objects (DAO)
DAO ist ein von Microsoft definiertes Datenbankzugriffsobjekt für den Zugriff auf
Datenbanken. Diese Schnittstelle greift auf MS-Access-Datenbanken direkt und
schnell über die sogenannte JET-Engine zu. Alle anderen Datenbanken werden
über die bekannten ODBC-Treiber angesprochen. Die DAO-Bibliothek ist objektorientiert als C++ Klasse implementiert und nur für die 32-Bit-Plattformen Windows 9x/2000 und Windows NT, sowie Nachfolger verfügbar. Zum DAO-Toolkit
werden aber auch alle notwendigen Systembibliotheken mitgeliefert, so daß diese
Schnittstelle auch ohne installiertes Datenbankprodukt genutzt werden kann.
29
Erweiterungskonzepte für das aktive DBMS
Microsoft Access
Microsoft Access-Datenbanken lassen sich auf einem Rechner, auf dem kein
Microsoft Office-Paket installiert ist, erstellen, lesen und schreiben.
30
Erweiterungskonzepte für das aktive DBMS
Microsoft Access
Die DAO- Features sind
•
Zugriff auf Microsoft Access Datenbanken über die schnelle JET-Engine
•
Zugriff auf andere DB über ODBC-Treiber
•
32-Bit Applikation
2.3.5
ActiveX Data Objects (ADO)
ADO ist eine Datenzugriffsschnittstelle, die zur Herstellung einer Verbindung, sowie zum Abfragen, Verändern und Aktualisieren von Daten mit OLE-DBkompatiblen Datenquellen dient. Diese Datenzugriffsschnittstelle ist ein weiterentwickelter Nachfolger der Microsoft DAO-Datenbank-Schnittstelle. Im Unterschied
zu dieser ist ADO nicht so sehr auf MS-Access-Datenbanken beschränkt (oder
auch optimiert). ADO arbeitet für den Zugriff auf Datenbanken mittels eines OLEDB-Providers. Durch diesen Mechanismus sind Verbindungen zu sehr verschiedenen Datenbanken möglich, die unter DAO etwa nur mit verknüpften Tabellen innerhalb MS-Access realisiert werden können. Jede Datenbank kann, wenn es einen
entsprechenden Treiber gibt, nativ, d.h. schnell, und effizient angesprochen werden.
31
Erweiterungskonzepte für das aktive DBMS
Microsoft Visual Basic
Kapitel 3 Microsoft Visual Basic
Microsoft Visual Basic
Visual Basic, (abgek. VB) ist eine, seit Office 97, in allen Microsoft OfficeAnwendungen eingesetzte objektorienterte Programmiersprache, in der auch SQL
eingebettet ist. Bei den visuellen Sprachen, wie VB es ist, steht nicht mehr die Verarbeitung von Daten im Vordergrund, sondern das Hantieren mit Objekten auf dem
Bildschirm. Voraussetzung für die Arbeit mit Objekten ist immer das Vorhandensein einer Oberfläche. Visuelle Sprachen manipulieren Objekte, um dem Anwender
ein Ergebnis auf dem Bildschirm zu präsentieren, z.B. ein Dialogfeld zur Eingabe
von Werten oder Texten. Objekte werden durch Eigenschaften und Aktionen (Methoden) gesteuert. Bildschirmaktionen, wie z.B. Mausklick, können Ereignisse auslösen. Alle Aktionen mit Objekten werden in die Techniken der klassischen Sprachen eingebettet. Dazu gehören Variablendeklarationen, Steueranweisungen wie
Bedingungsabfragen, Schleifen und Sprünge, Subroutines usw.
3.1 Visual Basic-Entwicklungsumgebung
Visual Basic-Programme werden in einer VBA-Entwicklungsumgebung geschrieben. Zur Erstellung von Programmen ist eine Programmierumgebung notwendig.
Für VBA ist dies der Visual Basic-Editor. Mit den Tastenkombination ALT + F11
gelangt man aus dem Datenbankfenster direkt in die Entwicklungsumgebung. Die
Komponenten dieser Umgebung sind der Project Explorer, Visual Basic-Editor,
das Eigenschafts- und das Direktfenster (siehe Abbildung 3.1).
Project Explorer
Dieses Fenster zeigt alle in einem Projekt verwendeten Module. Microsoft Access
unterscheidet zwei Grundtypen von Modulen: Standardmodule und Klassenmodule.
Standardmodul ist ein Modul, in das Sub- und Funktionsprozeduren einEin
gefügt werden können. Diese Prozeduren sind dann für andere Prozeduren der
Datenbank verfügbar. Standardmodule enthalten allgemeine Prozeduren, die nicht
mit einem anderen Objekt verbunden sind, sowie häufig verwendete Prozeduren,
die von jeder beliebigen Stelle innerhalb ihrer Datenbank aus, ausgeführt werden
können. Der wesentliche Unterschied zwischen einem Standardmodul und einem
Klassenmodul, das nicht mit einem bestimmten Objekt verbunden ist, liegt im Gültigkeitsbereich und in der Lebensdauer. Die Werte von Variablen oder Konstanten,
die deklariert sind oder ohne zugeordnetes Objekt in einem Klassenmodul enthalten sind, stehen nur dann zur Verfügung, wenn dieser Code ausgeführt wird bzw.
sind ausschließlich von diesem Objekt verfügbar. Standardmodule werden auch in
Formularen benutzt. Der Unterschied zu den Standardmodulen besteht in ihrem
Gültigkeitsbereich. Eine Prozedur oder eine Funktion, die in einem Formularmodul
32
Erweiterungskonzepte für das aktive DBMS
Microsoft Visual Basic
geschrieben wurde, ist auch nur dort bekannt. Formularmodule werden als
Microsoft Access-Klassenobjekte bezeichnet.
Klassenmodul ist ein Modul, das die Definition für ein neues Objekt entEin
halten kann. Jede Instanz einer Klasse erstellt ein neues Objekt. Jede Prozedur, die
in dem Modul definiert wurde, erhält die Eigenschaften und Methoden des Objekts.
Klassenmodule können eigenständig oder mit Formularen und Berichten verwendet
werden. Diese Funktionalität gibt den Entwicklern eine bessere Kontrolle über den
Code der Applikation und macht es einfacher, widerverwendbare Komponenten zu
erstellen.
Visual Basic-Editor
Projekt-Explorer
Eigenschaftsfenster
Direktfenster
Abbildung 3.1: Die Visual Basic-Entwicklungsumgebung
Eigenschafts-, Direkt- und Überwachungsfenster
Das Eigenschaftsfenster hat in der VB-Entwicklungsumgebung eigentlich nichts
zu suchen. Es kann lediglich der Modulname vergeben oder geändert werden. Das
Direkt- und Überwachungsfenster hingegen sind zwei wichtige Werkzeuge bei der
Entwicklung einer Anwendung.
Im Überwachungsfenster kann der eigene Programmcode überwacht werden.
Dies geschieht mittels der Ausgabe der aktuellen Werte von ausgewählten Variablen. Im Menü unter Ansicht kann das Überwachungsfenster geöffnet werden.
33
Erweiterungskonzepte für das aktive DBMS
Microsoft Visual Basic
Das Direktfenster zeigt Informationen an, resultierend aus Anweisungen zur Fehlerbeseitigung im Code oder aus Befehlen, die direkt in dieses Fenster eingegeben
wurden. Sowohl das Direktfenster, wie auch das Überwachungsfenster sind ein
wichtiges Hilfsmittel bei der Fehlersuche.
Visual Basic-Editor
Im Visual Basic-Editor wird der Programmcode geschrieben. Es stehen eine Objekt- und eine Ereignisliste in der Kopfleiste des Editors zur Verfügung. In der
Fußleiste kann zwischen Prozedur- und Modulansicht umgeschaltet werden.
Ereignisliste
Objektliste
Prozeduransicht
Modulansicht
Abbildung 3.2: Visual Basic-Editor
3.2 Objekte, Eigenschaften und Module
Microsoft Access ist keine vollständige objektorientierte Sprache. Obwohl MSAccess von Objekten „lebt“, fehlt z.B. die Vererbung. Die Vererbung ist ein wesentliches Merkmal der objektorientierte Programmierung, bei dem ein neues Objekt, durch Änderung oder Verfeinerung des Verhaltens eines vorhandenen Objekts, definiert wird. Leider ist dieses Konzept in Microsoft Visual Basic nicht umgesetzt worden. So ist die objektorientierte Programmierung in Visual Basic nur
beschränkt möglich.
34
Erweiterungskonzepte für das aktive DBMS
Microsoft Visual Basic
Alle MS-Access Objekte verfügen über Eigenschaften und Methoden. Eigenschaften beschreiben physische Charakteristika eines Objekts. So verfügt das Objekt Formular über die Eigenschaften Namen, Hintergrundfarbe, Höhe, Breite,
Rahmen, Beweglichkeit, Sichtbarkeit usw. Methoden sind Dinge, die ein Objekt
tun kann. So kann das Objekt Formular geöffnet, geschlossen, vergrößert oder verkleinert werden.
Die wesentliche Eigenschaft eines Objektes ist die Einheit von Daten und Methoden. Nur mit den Methoden, die der allgemeinen Benutzung freigegeben sind, kann
man die Daten manipulieren. Man spricht von Datenkapselung. Auf diese Weise
kann der Datenzugriff, insbesondere bei großen Projekten, geregelt und weitgehend
fehlerfrei gestaltet werden.
Die Definition eines Objektes erfolgt in einer sogenannten Objektklasse, die eine
Definition für ein Objekt, einschließlich seines Namens, seiner Eigenschaften und
seiner Methoden, sowie aller zugehörigen Ereignisse ist. Meist beinhaltet eine Objektklasse innere, man sagt private oder versteckte, Daten und Prozeduren, auf die
der Anwender keinen Zugriff hat, die aber für die Ausführung der Methoden wichtig sind. VBA sieht verschiedene Möglichkeiten vor, eigene Objekte zu definieren
oder objektorientierte Arbeitsweisen zu entwickeln.
Wenn eine Instanz einer Klasse erstellt wird, entsteht ein neues Objekt mit allen
durch diese Klasse definierten Merkmalen. Jede innerhalb der Objektklasse definierte öffentliche Prozedur wird eine Methode des benutzerdefinierten Objekts. Die
Anweisung Sub definiert eine Methode, die keinen Wert zurückgibt. Die Anweisung Function definiert dagegen eine Methode, die einen Wert eines festgelegten
Typs zurückgeben kann. Alle Property Let-, Property Get- und Property SetProzeduren, die definiert werden, werden zu einer Eigenschaft des neuen Objekts.
Property Get-Prozeduren rufen den Wert einer Eigenschaft ab. Property LetProzeduren stellen den Wert einer Nicht-Objekteigenschaft ein. Property SetProzeduren stellen den Wert einer Objekteigenschaft ein. [MS-Ac00]
Einen weiteren Vorteil bringt das Collection Object. Es stellt ein Objekt dar, mit
dessen Hilfe eigene Listenobjekte oder Auflistungen erzeugt werden können. Man
kann Objekte hinzufügen, herausnehmen oder ein einzelnes Objekt bearbeiten. Gegenüber der Anordnung der Daten in einem Datenfeld (Array) haben Collection
Objects den Vorteil, die Arraygrößen vorher nicht festlegen zu müssen. Beim Löschen von Werten entstehen keine leeren Felder und die Listen können mit einer
For-Next-Schleife durchlaufen werden. Außerdem ermöglicht das Collection Object den Zugriff auf die Listenelemente, sowohl über einen Namen als auch über
einen Index.
35
Erweiterungskonzepte für das aktive DBMS
Dim colTrigger As New Collection
Name des Kollektionobjektes
Microsoft Visual Basic
Objekttyp Collection
Zuweisung einer neuen Instanz schon bei der Definition
Abbildung 3.3: Definition einer Collection
3.3 Visual Basic-Grundlagen
In diesem Abschnitt werden einige Sprachkonstrukte vorgestellt. Dieser Abschnitt
soll kein Einstigerkurs in VBA sein, vielmehr soll ein grober Überblick über Prozeduren, Bedingungen, Funktionen, Variablen, Datentypen und Konstanten gegeben werden.
Variablen sind Programmelemente, die während eines Programmablaufes unterschiedliche Werte annehmen können. Für jede Variable wird Speicherplatz im Arbeitsspeicher des Computers reserviert. Die Größe des Speicherplatzes wird vom
vereinbarten Datentyp der Variablen bestimmt. Variablen werden mit einem Namen angesprochen. Sie werden mit dem Schlüsselwort Dim eingeleitet, gefolgt von
einem Variablennamen und einem Datentyp. Die Standarddatentypen die in MSAccess angegeben werden können sind aus der Abbildung 3.3 zu entnehmen.
Dim sText As String
Name der Variable
Variable bekommt den Datentyp Zeichenkette zugewiesen
Deklariert die Variablen und reserviert Speicherplatz dafür
Abbildung 3.4: Definition einer Collection
Feste Zahlenwerte im Programmcode sollte man durch Konstanten ersetzen. Bei
Änderungen muß dann nur die Konstantenzuweisung geändert werden und nicht
die vielen Stellen, wo der Wert auftritt. Konstanten werden in den Deklarationsteilen von Modul und Prozedur vereinbart. Der Wert einer Konstanten läßt sich während des Programmablaufes nicht ändern. Er bleibt während des gesamten Programmablaufes erhalten. Eine Konstante wird mit dem Schlüsselwort Const eingeleitet, gefolgt von einem Name für die Konstante und der Zuweisung zu einem
Wert.
Typ
Byte
Boolean
Integer
KZ
%
Erläuterung, Wertebereich
Ganzzahl, 0…255
Wahrheitswert, TRUE=1, False=0
Ganzzahl, -32768 … 32767
36
Speicher
[Byte]
1
2
2
Erweiterungskonzepte für das aktive DBMS
Long
Single
Double
Currency
String
Date
Object
Variant
&
!
#
@
$
Microsoft Visual Basic
Ganzzahl lang: -2 147 483 648 … 2 147 483 647
4
Gleitkommazahl, einfachgenau (7 Ziffern) 10E-38 … 10E+38
4
Gleitkommazahl, doppeltgenau (16 Ziffern) 10E-308 … 10E+308
8
Währung: (15 Stellen), (Dezimalpunkt), (4Stellen)
8
Zeichenfolge, max. ca. 2 Mrd. Zeichen (2^31)
10+Länge
1. Januar 100 … 31.Dezember 9999
8
Verweis auf ein Objekt
4
universeller Datentyp
≥16
Abbildung 3.5: Datentypen und Wertebereiche
Der Gültigkeitsbereich einer Variablen wird bei ihrer Deklaration bestimmt. Mit
dem Gültigkeitsbereich wird die Verfügbarkeit von Variablen, Konstanten oder
Prozeduren zur Verwendung durch eine andere Prozedur bezeichnet. Es gibt drei
Gültigkeitsbereichebenen: Prozedurebene, private Modulebene und öffentliche
Modulebene [MS-Ac00]. Innerhalb einer Prozedur definierte Variablen oder Konstanten sind außerhalb dieser Prozedur nicht verfügbar. Variablen und Konstanten
können auch auf Modulebene privat oder öffentlich deklariert werden. Öffentliche
Variablen sind für alle Prozeduren in allen Modulen eines Projektes verfügbar, private Variablen sind nur für die Prozeduren in diesem Modul verfügbar.
3.3.1
Kontrollstrukturen
Ein Programm besteht aus einer Folge von Anweisungen. In seiner einfachsten
Form enthält ein Programm Anweisungen, die der Reihe nach ausgeführt werden
(Folge). Anweisungen können jedoch auch mehrmals wiederholt, als Folge einer
Auswahl, ausgeführt werden. Die Kontrollstrukturen Folge, Wiederholung und
Auswahl sind die Hauptbestandteile eines Programms.
Anweisungen, die nacheinander und jede genau einmal abgearbeitet werden, nennt
man Folge. Ein rein sequentieller Programmablauf ist die einfachste Struktur eines
Programms. Als Auswahl bezeichnet man eine oder mehrere abhängige Bedingungen. Man unterscheidet zwischen einseitige, zweiseitige, mehrstufige und mehrseitige Auswahl.
3.4 API
API ist die Abkürzung für Application Programmer's Interface" und bedeutet Programmier- und Anwendungsschnittstelle. Wo Microsoft Access nicht weiterhilft,
kann in vielen Fällen die vorhandene Funktionalität durch den Einsatz von APIFunktionen erweitert werden. Nicht zuletzt diese Flexibilität macht den Erfolg von
Microsoft Access als Datenbankentwicklungssystem für anspruchsvolle Lösungen
aus.
37
Erweiterungskonzepte für das aktive DBMS
Microsoft Visual Basic
Abbildung 3.6: Verweisfenster
In ARTA II wird mit Hilfe dieser Technik die Timer- und Kalenderfunktionalität
realisiert. Dazu werden .dll-Dateien (Dynamic Link Library) in Microsoft Access
über ein Verweisfenster (siehe Abbildung 3.6) eingebunden. Das Verweisfenster
läßt sich über das Menü unter Extras/Verweise öffnen. Da in Visual Basic nicht auf
alle Objektbibliotheken über das Verweisfenster zugegriffen werden kann, muß das
Einbinden der Objektbibliotheken über den Visual Basic-Programmiercode geschehen. Dazu werden die .dll-Dateien vor der Benutzung mit einem DECLAREBefehl dem System bekannt gemacht. Diese Deklaration sollte in einem Modul
stattfinden, um den Gültigkeitsbereich zu vergrößern. Anschließend stehen dem
Benutzer die Methoden zur Verfügung. In ARTA II wird vor allem die SetTimerFunktion der User32.dll genutzt um die Timerfunktionalität zu realisieren.
38
Erweiterungskonzepte für das aktive DBMS
SQL:1999
Kapitel 4 SQL:1999
SQL:1999
Ende der siebziger Jahre entwickelte die Firma IBM für die relationale DBMS DB2
eine Computersprache speziell für Datenbankanfragen. Die erste Sprachversion
hieß SEQUEL, als Abkürzung für Structured English Query Language (deutsch:
strukturierte englische Abfragesprache). Der Name dieser Sprache wurde später aus
rechtlichen Gründen geändert und lautet nun SQL (Structured Query Language
oder deutsch: strukturierte Abfragesprache). 1983 begann das American National
Standards Institute (ANSI) mit der Ausarbeitung eines Standards für relationale
Datenbanksprachen. Der Abschlußbericht wurde als American National Standard
Database Language-SQL (ANSI X3.135-1986) verabschiedet. Dieser Standard
wurde 1987 auch von der International Standards Organisation (ISO) als ISOStandard übernommen (ISO 9075 Database Language SQL). In den Jahren 1986
bzw. 1989 gab es weitere Standarddokumente, für die sich die Begriffe SQL:1986,
SQL:1989 und SQL-1 als Überbegriffe entwickelt haben. 1992 kam eine überarbeitete Version als SQL:1992 bzw. SQL-2 heraus. Das SQL-2-Standarddokument
umfaßt bereits mehr als 600 Seiten gegenüber den 120 Seiten des SQL:1989Dokuments. SQL-3 wurde 1999 verabschiedet und ist deshalb auch unter
SQL:1999 bekannt. SQL:1999 wurde mit Konzepten wie Rekursion und
objektorientierten Ansätzen erweitert. Im Laufe der Jahre sind verschiedene
Erweiterungen hinzugekommen, so daß sich mit dieser Sprache nicht nur Abfragen
ausführen, sondern auch Datenbanken erstellen und die Sicherheitsaspekte des
Datenbanksystems verwalten lassen.
4.1 Grundlagen von SQL
SQL kann eingebettet in eine Programmiersprache als embedded-SQL oder auch
als stand alone-Sprache benutzt werden. Heute ist SQL eine „vollständige“ DBSprache, die sich in drei Teilsprachen gliedert:
• DDL (Data Definition Language),
• DML (Data Manipulation Language)
• DCL (Data Control Language).
Mit dem Begriff Data Definition Language DDL sind Anweisungen gemeint, mit
denen man Daten definieren kann. Es geht dabei um Löschung, Änderung und Einrichtung von Datenbankobjekten, wie z.B. Datenbanken (databases), Tabellen
(tables) oder Sichten (views). Diese Anweisungen werden mit den folgenden
Schlüsselbegriffen eingeleitet:
39
Erweiterungskonzepte für das aktive DBMS
Schlüsselwort
CREATE
ALTER
DROP
SQL:1999
Bedeutung
Erzeugen neuer Objekte
Verändern der Eigenschaften existierender Objekte
Löschen existierender Objekte
Tabelle 4.1: DDL-Anweisungen
Ergänzt werden diese Schlüsselwörter in der Regel um das Schlüsselwort für das
zu bearbeitende Datenbankobjekt, wie beispielsweise TABLE, VIEW, usw.
Der Begriff „Data Manipulation Language“ faßt alle SQL-Anweisungen zur Anfrage und zur Datenmanipulation, wie Einfügen, Löschen und Ändern, zusammen.
Zur Datenmanipulation verwendet SQL folgende Anweisungen:
Schlüsselwort
DELETE
INSERT
UPDATE
Bedeutung
Löschen einer oder mehrerer Zeilen aus einer Tabelle
Erzeugen einer oder mehrerer neuer Zeilen in einer Tabelle
Verändern einer oder mehrerer Zeilen einer Tabelle
Tabelle 4.2: DML-Anweisungen
Das SELECT-Statement erlaubt das Abfragen und Finden von Informationen in
der Datenbank. Dies ist vermutlich der wichtigste, mächtigste und komplizierteste
aller SQL-Befehle. Mit diesem Befehl können die Daten verschiedener Tabellen
der Datenbank gesammelt und ausgewertet werden. Dies erlaubt eine von der tatsächlichen Tabellenstruktur unabhängige Sicht auf die Daten. Mit einem DDLBefehl (CREATE VIEW Sichtname) können darüber hinaus häufig benutze Anfragebefehle und Strategien als so genannte Sichten in der Datenbank gespeichert
werden. Auf diese Art kann durch einen einfachen SELECT-Befehl (SELECT *
FROM Sichtname) ein weitaus komplexerer SELECT-Befehl abgekürzt werden.
Mit dem Begriff „Data Control Language“ werden alle SQL-Anweisungen zur
Rollen- und Rechtevergabe zusammengefaßt, die festlegen, wer welche Anweisungen zur Datenänderung bei einem Datenbanksystem anwenden kann. Zur Rollenund Rechtevergabe verwendet SQL folgende Anweisungen:
Schlüsselwort
Bedeutung
GRANT
Erteilt Berechtigungen, um entweder mit Daten zu
arbeiten oder andere Transact-SQL-Anweisungen
auszuführen
DENY
Verweigert Berechtigungen und verhindert, daß der angegebene
Benutzer, die Gruppe oder Rolle, die Berechtigung
über Gruppen- und Rollenmitgliedschaften erbt
REVOKE
Entfernt zuvor erteilte oder verweigerte Berechtigungen
Tabelle 4.3: DLC-Anweisungen
40
Erweiterungskonzepte für das aktive DBMS
SQL:1999
4.2 SQL-Triggersprache
Der SQL-Standard wurde 1999 unter anderem um ein Triggerkonzept erweitert,
welches den Schwerpunkt dieses Kapitels bilden soll. Im Laufe des Kapitels ist
mit SQL immer der SQL:1999 Standard gemeint.
Trigger in SQL sind spezielle Formen aktiver (ECA)-Regeln. Aus der Syntax in
Abbildung 4.4 ist zu ersehen, daß die Trigger durch die primitiven Datenmanipulationsereignisse insert, update und delete ausgelöst werden. In der WHEN-Klausel
wird die Regelbedingung definiert, die ein (beliebiges) Prädikat ist. Die Aktionskomponente setzt sich aus einer Sequenz von SQL-Befehlen zusammen, wobei u.a.
Transaktionsbefehle nicht zulässig sind. Wenn das triggerauslösende Ereignis (E)
eintritt und die Bedingung (C) erfüllt ist, werden die SQL-Befehle des Aktionsteils
(A) verarbeitet.
4.3 Syntax der SQL-Triggersprache
Trigger in SQL haben die folgende zunächst vereinfacht dargestellte Form
CREATE TRIGGER Triggername
BEFORE | AFTER Ereignistyp ON Tabellenname
REFERENCING NEW AS correlation_name
OLD AS correlation_name
FOR EACH ROW | STATEMENT
WHEN Bedingung
Triggerbody
BEGIN
END
Abbildung 4.4: Einfache Syntax eines Triggers
Triggername
Die Erstellung eines Triggers wird immer mit dem Schlüsselwort create trigger
eingeleitet. Anschließend folgt die Vergabe eines eindeutigen Namens, um den
abgespeicherten Trigger identifizieren zu können. Der Triggername besteht aus
einer Zeichenfolge.
trigger name
CREATE TRIGGER
Abbildung 4.5: Triggername
41
Erweiterungskonzepte für das aktive DBMS
SQL:1999
Triggerndes Ereignis
Mit der trigger action time setzt man den Auslösungszeitpunkt des Triggers fest.
Hier wird der Zeitpunkt spezifiziert, zu dem die Regel ausgelöst werden soll. Dabei
wird zwischen zwei Zeiten unterschieden: Ein Trigger kann entweder vor (BEFORE) oder nach (AFTER) des auslösenden Befehls ausgelöst werden.
Anschließend wird das triggernde Ereignis (trigger event) angegeben. Die triggernden Operationen auf die ein SQL-Trigger reagieren kann sind INSERT, DELETE oder UPDATE. Dieser Parameter wird gefolgt vom Schlüsselwort ON und
der Angabe einer betroffenen Tabelle, auf der die Änderungsoperation ausgeführt
werden soll. Diese Syntaxstruktur ist in der folgenden Abbildung zu sehen.
trigger event
trigger action time
INSERT
BEFORE
DELETE
ON
table name
AFTER
UPDATE
Abbildung 4.6: Triggerndes Ereignis
Durch die Vergabe eines Aktivierungszeitpunktes und eines Triggertyps können
sechs verschiedene Ausführungskombinationen angegeben werden.
Transitionsvariablen und Triggergranularität
Nachdem das zu triggernde Ereignis festgelegt wurde, kann zudem angegeben
werden, mit welchem Namen man auf die Transitionstabellen zugreifen möchte.
Dies wird durch die Angabe einer Referencing-Klausel ermöglicht. Die alten Attributwerte werden über OLD und die neuen Attributwerte über NEW referenziert. So
kann während der Abarbeitung des Triggers auf die alten und die neuen Werte der
Transitionstabelle zugegriffen werden.
REFERENCING
NEW
ROW
AS
tupel name
OLD
TABLE
AS
relation name
FOR EACH ROW
FOR EACH STATEMENT
Abbildung 4.7: Triggergranularität
42
Erweiterungskonzepte für das aktive DBMS
SQL:1999
Durch die Angabe von ROW oder STATEMENT wird die Granularität, mit der der
Trigger arbeiten soll, angegeben. FOR EACH ROW wird als tupelorientiertes Verarbeitungsmodell bezeichnet, da die folgende Aktion bei jedem zu ändernden Tupel
auszuführen ist. FOR EACH STATEMENT wird als mengenorientiertes Verarbeitungsmodell bezeichnet, da die folgende Aktion nur einmal für die gesamte SQLAnweisung ausgeführt wird. In der folgenden Tabelle sind die gültigen Kombinationen für die Trigger, Granularität und Transitionsvariablen zu ersehen.
Granularität
Auslösezeitpunkt
BEFORE
triggernde
Operation
Transitionsvariablen
INSERT
NEW
UPDATE
OLD, NEW
DELETE
OLD
INSERT
NEW
UPDATE
OLD, NEW
DELETE
OLD
Übergangstabellen
NONE
ROW
AFTER
NEW_TABLE
OLD_TABLE,
NEW TABLE
OLD_TABLE
INSERT
BEFORE
UPDATE
NONE
NONE
DELETE
STATEMENT
INSERT
AFTER
UPDATE
NONE
DELETE
NEW_TABLE
OLD_TABLE,
NEW TABLE
OLD_TABLE
Tabelle 4.8: Kombinationsmöglichkeiten
Triggerbedingung
Die Ausführung des Triggeraktionsteils kann durch Angabe einer Triggerbedingung eingeschränkt werden. Die Bedingung wird mit dem Schlüsselwort WHEN
eingeleitet. Die Angabe einer Triggerbedingung ist optional, d.h. wenn die Bedingung nicht angegeben wird, wird der Aktionsteil bei jedem Auslösen des Triggers
ausgeführt.
WHEN
(
condition
)
Abbildung 4.9: Triggerbedingung
43
Erweiterungskonzepte für das aktive DBMS
SQL:1999
Triggeraktionsteil
Der Triggeraktionsteil wird durch BEGIN ATOMIC und END eingeschlossen.
Der Aktionsteil kann in Form eines SQL-Statements oder einer Anweisungsfolge,
die in einer Programmiersprache des zugrunde liegenden Systems geschrieben
wurde, angegeben werden. Natürlich ist es möglich, daß im Aktionsteil weitere
Trigger gefeuert werden können. Doch auch hier ist es nicht erlaubt, SQLStatements zu formulieren, welche Änderungen an der Tabelle, die gerade vom
Trigger bearbeitet wird, vornehmen. Denn solch eine Aktivierung könnte zyklisch
sein (rekursive Trigger) und die Terminierung der Aktivierungskette wäre nicht
sichergestellt. Ein weiteres Problem entsteht, wenn mehrere Trigger zum gleichen
Zeitpunkt und mit identischer Granularität definiert werden. Da in SQL:1999 keine
Priorität existiert, kann eine Ausführungsreihenfolge nur durch das Erstellungsdatum des Triggers festgelegt werden.
BEGIN ATOMIC
command
END
;
Abbildung 4.10: Triggeraktionsteil
4.4 Semantik der SQL-Triggersprache
Ausführungsreihenfolge: In SQL:1999 können mehrere Trigger für eine Tabelle
definiert werden, die durch dasselbe Ereignis ausgelöst werden. Diese Trigger werden in einer bestimmten Reihenfolge verarbeitet. Bei Triggern mit dem Auslösungszeitpunkt BEFORE werden die mengenbasierten Trigger vor den instanzbasierten Regeln verarbeitet. Bei Triggern mit dem Auslösungszeitpunkt AFTER
werden die instanzbasierten Regeln vor den mengenbasierten ausgeführt. Dadurch
ergibt sich die folgende Ausführungsreihenfolge:
• Alle Before-Statement-Trigger werden gesammelt und rekursiv abgearbeitet.
• Alle Before-Row-Trigger werden gesammelt und rekursiv abgearbeitet.
• Ausführung der triggernden Operationen
• Überprüfung der Integritätsbedingung
• Alle After-Row-Trigger werden gesammelt und rekursiv abgearbeitet.
• Alle After-Statement-Trigger werden gesammelt und rekursiv abgearbeitet.
Nach dem Sammeln der Trigger werden diese nach ihrem Erstellungsdatum sortiert, um somit eine Abarbeitungsreihenfolge festzulegen. Als Defaultwert werden
alle Trigger sofort (immediate) ausgeführt. Jedoch gibt es auch Möglichkeiten, die
Verarbeitung der Trigger bis zum Ende einer Transaktion zu verzögern (deferred).
44
Erweiterungskonzepte für das aktive DBMS
SQL:1999
In SQL:1999 können durch die Ausführung einer triggernden Aktion Ereignisse
eintreten und somit weitere Trigger ausgelöst werden. Diese Triggerkaskaden
können zyklisch verlaufen und dazu führen, daß die Abarbeitung nicht terminiert.
SQL:1999 bietet kein Konzept an, um Zyklen zu erkennen und nicht-endende Regelausführungen zu verhindern. Da Before-Trigger keine weiteren Trigger auslösen
dürfen, gilt das Problem der Triggerkaskade nur für die After-Trigger.
Die Bedingungsüberprüfung und die Aktionsausführung eines SQL:1999-Triggers
erfolgen innerhalb der Transaktion, die den Trigger anstößt. Kommt es bei der Aktionsausführung zu einem Fehler, so werden alle Aktionen (einschließlich des auslösenden Statements) zurückgesetzt (ROLLBACK).
45
Erweiterungskonzepte für das aktive DBMS
ARTA (Active Real Time Access DBS)
Kapitel 5 ARTA (Active Real Time Access DBS)
ARTA
ARTA II basiert auf einem in früheren Diplomarbeiten entwickelten aktiven Datenbankverwaltungssystem. In diesem Kapitel wird das „alte“ ARTA-System vorgestellt und die Unterschiede zum neuen System aufgeführt.
5.1 Namenskonvention
ARTA setzt sich aus vier Initialen zusammen, die für Active Real Time Access
Database System stehen. Das vierte Initial steht für Microsoft Access, was das
zugrundeliegende DBMS repräsentiert. Da MS-Access kein aktives DBMS ist und
demzufolge nicht die Möglichkeit bietet aktive Regeln (Trigger) anzugeben, wurde
dieses System um diese Erweitert. So wurde aus einem passiven ein aktives
DBMS, wofür das erste Initial in ARTA steht. Um die Initialen R und T in der
Namensgebung zu erklären, muß zunächst der folgende Begriff eingeführt werden.
Ein Echtzeitsystem (engl. Real Time System, abgek. RTS) ist ein System, daß ein
korrektes Ergebnis innerhalb einer vorgegebenen Zeitspanne liefert.
Die ARTA-Trigger wurden um die Möglichkeit erweitert, auf vordefinierte Zeitereignisse reagieren zu können. Dazu wurde die Timerfunktionalität des Betriebssystems genutzt, die über die API-Schnittstelle angesprochen wird. Zudem wurde
durch die Angabe einer Zeitspanne, die angibt bis zu welchem Zeitpunkt ein Trigger spätestens gefeuert werden muß, ein wichtiger Aspekt eines Echtzeitsystems
geliefert. Aufgrund dieser neuen Funktionalitäten wurde aus dem aktiven DMBS
ein aktives Echtzeit-DBMS.
5.2 GUI von ARTA
In ARTA werden Formulare als Benutzeroberflächen eingesetzt, um Anwendern
die Möglichkeit der Verwaltung von Triggern und Ereignismustern zu geben. Zur
Ereigniserkennung werden alle Datenbankänderungen unter dem direkten Einsatz
von ARTA vorgenommen. ARTA-II wurde mit einer komplett neuen GUI versehen, siehe Kapitel 8, so daß eine weitgehend übersichtliche Arbeit ermöglicht wird.
Dies betrifft nicht nur den Anwender, sondern auch den Entwickler. In der Entwicklungsansicht der Formulare wurde sehr großen Wert darauf gelegt, jedes benutzte Objekt vernünftig zu benennen und es so anzuordnen, das eine Änderung
nicht gleich eine komplette Umgestaltung mit sich zieht. Oft werden Steuerelemente, wie z.B. Textfelder übereinander gelegt und nach Bedarf sichtbar geschaltet.
Werden jedoch in einer Benutzeroberfläche sehr viele dieser Objekte untergebracht, ist es dem Entwickler fast unmöglich eines dieser Objekte vernünftig modifizieren zu können, ohne gleich darüberliegende Objekte bewegen zu müssen.
Nach einer Modifizierung eines Objektes, müssen dann all diejenigen Objekte die
provisorisch „zur Seite gelegt wurden“, wieder in ihrer ursprünglichen Position
46
Erweiterungskonzepte für das aktive DBMS
ARTA (Active Real Time Access DBS)
angebracht werden. In ARTA-II wurden bei der Gestaltung Lösungen gefunden,
um die Verschiebung der Objekte bei einer Änderung im Rahmen zu halten. Eine
dieser Lösungen war die Verwendung von Registersteuerungselementen, um zusammengehörige Objekte gruppiert auf einer Registerkarte anzuordnen.
Abbildung 5.1:
ARTATriggerübersicht
Abbildung 5.2: ARTA II-Triggerübersicht
47
Erweiterungskonzepte für das aktive DBMS
ARTA (Active Real Time Access DBS)
5.3 Erweiterungen in ARTA II
Um den Unterschied kurz anzudeuten, ist in den obigen zwei Abbildungen eine
Gegenüberstellung einer ARTA- und einer ARTA II-Benutzeroberflächen gegeben.
Weitere Unterschiede zum ARTA-System werden hier Stichpunktartig aufgezählt.
• Die Deadline in ARTA wurde nur für Zeitereignisse implementiert. In ARTA-II werden auch Änderungsereignisse mit einer Deadline versehen.
• In ARTA II wird für jeden Trigger ein Gültigkeitsintervall angegeben, um
festzulegen, wie lange dieser überhaupt gültig ist. Das Gültigkeitsintervall
spielt auch bei der Erstellung von Triggern vom Typ periodisches Zeitereignis eine große Rolle.
• In ARTA-II wurde das Konzept der Priorität erweitert, so daß komfortabel
und übersichtlich die Priorität eines Triggers geändert werden kann. Dabei
hat man stets die Priorität der anderen Trigger im Überblick.
• In der Syntax der ARTA-Trigger wurde ein Flag (activity) angegeben, das
den Aktivierungszustand des Triggers angibt. Dieses Flag wurde aus der
Syntax entfernt. Die Notation, ob ein Trigger aktiviert oder deaktiviert ist,
erfolgt in der Datenbank.
• Die Syntax eines periodischen Zeitereignistyps wurde wesentlich erweitert,
siehe Kapitel 6.2 und 6.3.
• Der Ereignistyp eines ARTA-Triggers wird bei der Erstellung in einer eigenen Tabellen in der Datenbank gespeichert. Jeder Ereignistyp wird mit einem eindeutigen Namen versehen und kann später als „Ereignismuster“
wiederbenutzt werden. Die Wartung ist sehr aufwendig und das Löschen eines Ereignismusters, das von mehreren Triggern benutzt wird, kann zu fatalen Fehlern führen. In ARTA II wird ein Trigger komplett in einer Tabelle
in der Datenbank gespeichert. Überdies besteht die Möglichkeit, oft benutzte Ereignistypen als Ereignismuster zu definieren, die dann in einer gesonderten Tabelle gespeichert werden. Ereignismuster sind eine Kopie eines
vorher erstellten Ereignistyps, gekennzeichnet durch einen eindeutigen Namen. Bei der Erstellung eines Triggers werden die Ereignismuster in einer
Auswahlliste angeboten, um die Eingabe zu erleichtern. Um diese Änderungen an ARTA vorzunehmen, mußten sehr große Teile der Struktur geändert
werden. Ganze Klassen mußten modifiziert und ihre Routinen angepaßt
werden.
• Wie in Kapitel 4.4 erwähnt, existiert in der SQL:1999-Triggersprache kein
Konzept um mit Zyklen umzugehen. In ARTA-II wurde eine Beschränkung
der Kaskadentiefe implementiert, um zu verhindern, daß Regelausführungen
nicht terminieren. Wird die Kaskadentiefe erreicht, so werden alle Transaktionen zurückgerollt.
48
Erweiterungskonzepte für das aktive DBMS
Erweiterungen der SQL-Triggersprache
Kapitel 6 Erweiterungen der SQL-Triggersprache
Erweiterungen der SQL-Triggersprache
Ein wesentliches Merkmal von ARTA II ist es, auf Ereignistypen reagieren zu können, auf die, mittels der SQL:1999 Triggersprache, nicht reagiert werden kann. Ein
in SQL:1999 erstellter Trigger kann nur auf das Eintreten eines Änderungsereignisses mit einer Aktion reagieren. Interessant war die Überlegung SQL:1999 so
zu erweitern, das Trigger auch auf zeitliche Ereignisse mit einer Aktion reagieren
konnten. Dazu mußte natürlich die Syntax der SQL:1999 Triggersprache um neue
Konzepte erweitert werden. Zum einen benötigt man neue Ereignistypen und zum
anderen neue Steuerungskomponenten, mit der das neue Unterfangen gelingen sollte. In den folgenden Abschnitten wird das neue Konzept vorgestellt. Es wird auf
die einzelnen Komponenten eingegangen und die Problematik nahegebracht.
Die Erweiterung der Triggersprache von SQL:1999 wurde erweitert um:
• Steuerungskomponenten (Deadline, Gültigkeitsintervall, Priorität,
Aktivierungszustand)
• Zeitereignisse (absolute und periodische ZE)
6.1 Steuerungskomponenten
Ein wichtiger Bestandteil eines Triggers sind seine Steuerungskomponenten ohne
die die Umsetzung der Zeitereignistypen nicht möglich wäre. Die Steuerungskomponenten dienen, wie der Name schon sagt, der Steuerung eines Triggers. Mit ihnen kann beim Erstellen eines Triggers angegeben werden, ob dieser aktiviert oder
deaktiviert ist oder durch die Angabe eines Gültigkeitsintervall sichergestellt werden, in welche Zeitspanne ein Trigger gefeuert werden darf. Weitere Komponenten
werden in folgenden Abschnitten erläutert.
6.1.1
Gültigkeitsintervalle
Will man Zeit darstellen, geschieht dies meistens mittels eines Zeitstrahls, wie in
Abbildung 6.2 zu sehen ist. Es gilt eine totale Anordnung der Zeitpunkte, d.h. für
jeweils zwei verschiedene Zeitpunkte t1 und t2 gilt: t1 < t2. Die Zeitachse des Zeitstrahls ist in beiden Richtungen unendlich. Für jeden beliebigen Punkt auf dieser
Zeitachse gilt, daß sich alle Punkte, die links des ausgewählten Punktes liegen, in
der Vergangenheit und alle Punkte, die rechts des ausgewählten Punktes liegen, in
seiner Zukunft befinden. Der Punkt selbst spiegelt dabei die Gegenwart wieder.
Eine wichtige Steuerungskomponente eines ARTA-Triggers ist die Angabe eines
Gültigkeitsintervalls. Mit start on date und start at time werden der Start des Intervalls, mit end on date und end at time das Intervallende angegeben. Nur innerhalb dieses Intervalls darf der Trigger gefeuert werden. Wird das Intervall überschritten, so wird der Trigger gelöscht, bzw. als abgearbeitet markiert und es erfolgt ein Eintrag in eine Protokolldatei. Im Zusammenhang mit einer Deadline
49
Erweiterungskonzepte für das aktive DBMS
Erweiterungen der SQL-Triggersprache
können verschiedene Grenzfälle auftreten, auf die in Abschnitt 6.1.3 eingegangen
wird.
start on date: 21.01.2004
start at time: 09:00
t1
t2
end on date: 03.04.2004
end at time: 10:30
…
tn
t
Abbildung 6.1: Das Gültigkeitsintervall
6.1.2
Deadlines
Die Deadline ist eine der wichtigsten Steuerkomponenten der ARTA-II Trigger.
Bei der Abarbeitung eines Triggers kann nie genau der Zeitpunkt angegeben werden, wann dieser seiner Arbeit beendet hat. Während dieser Abarbeitung können
weitere Trigger gefeuert werden, die aber warten müssen, da die Trigger in ARTA
sequentiell, also nacheinander abgearbeitet werden. So kann es vorkommen, daß
der Zeitpunkt für die Abarbeitung des Triggers verpaßt wird. Um dennoch diesen
Trigger behandeln zu können wird eine gewisse Zeittoleranz einkalkuliert, in der
der Trigger doch noch gefeuert werden darf. Diese Zeittoleranz wird berechnet aus
Ausführungszeitpunkt + (angegebenen) Deadline. Die Granularität der Deadline
wird in Minuten angegeben und ist standardmäßig auf 5 Minuten eingestellt. Trigger, die nicht innerhalb dieser Zeittoleranz ausgeführt wurden, werden nicht bearbeitet. Damit der Anwender dies auch mitbekommt, wird ein Protokolleintrag in
die Datenbank erstellt. Die Deadline ist auch eine wichtige Komponente in Bezug
auf das folgende Problem:
Das ARTA-DBMS wird in der Regel nicht ununterbrochen eingesetzt. In diesen
Ruhephasen, kann das System nicht auf bestimmt eintretende Zeitereignisse reagieren. Darum ist es wichtig für solche Trigger eine längere Deadline anzugeben. So
können nach Einschalten des Systems all diejenigen Trigger mit einer gültigen Aktivierungszeit (Ausführungszeitpunkt + Deadline) ausgeführt werden.
Grenzfälle für das Feuern eines Triggers
Was passiert mit den Triggern, die zwar eine gültige Zeittoleranz (Ausführungszeitpunkt + Deadline) haben, aber außerhalb der Gültigkeitsintervalls gefeuert
werden sollen? Darf ein solcher Trigger gefeuert werden? Was passiert mit einem
Trigger der innerhalb eines Gültigkeitsintervalls gefeuert wurde, aber die Abarbeitung so viel Zeit in Anspruch nimmt, daß der Beendigungszeitpunkt außerhalb des
Intervalls liegt? In beiden Fällen muß festgelegt werden, wie ARTA II mit solchen
Situationen umgehen soll. Wird ein Trigger innerhalb des Gültigkeitsintervalls gefeuert, so darf dieser auch bis zum Ende ausgeführt werden. Ein Trigger der warten
muß bis ein zuvor gefeuerter Trigger abgearbeitet ist und dabei trotz einer gültigen
Zeittoleranz außerhalb des Intervallendes liegt, wird nicht gefeuert.
50
Erweiterungskonzepte für das aktive DBMS
start on date: 21.01.2004
start at time: 09:00
Erweiterungen der SQL-Triggersprache
end on date: 03.04.2004
end at time: 10:30
deadline
t1
t2
…
tn
t
execute time of trigger
trigger react begin
Abbildung 6.2: Die Deadline
6.1.3
Prioritäten
Während der Abarbeitung eines Triggers kann es vorkommen, daß zwei Trigger
zum selben Zeitpunkt gefeuert werden. An dieser Stelle muß klar unterschieden
werden, welcher Trigger zuerst abgearbeitet werden darf und welcher Trigger warten muß. In SQL:1999 werden die Trigger nach ihrem Erstellungsdatum (Timestamp) sortiert. Nachdem ein SQL:1999-Trigger erstellt wurde, kann seine Ausführungsreihenfolge nicht mehr verändert werden. Um diese Situation in den Griff zu
bekommen, wurde in ARTA eine weitere Steuerungskomponente entwickelt und
zwar die Triggerpriorität. Diese legt eindeutig fest, welcher Trigger zuerst abgearbeitet werden darf. Zwei Trigger dürfen nicht dieselbe Priorität besitzen. So kann
sichergestellt werden, daß bei der Abarbeitung stets eine eindeutige Reihenfolge
eingehalten werden kann. Die Priorität wird erstmals beim Erstellen eines Triggers
automatisch gesetzt. Es wird die bereits höchste vergebene Priorität ermittelt und
um 1 erhöht. Man kann die Priorität eines Triggers jederzeit manuell über den Prioritätenmanager verändern, um auch nach Erstellung des Triggers zu bestimmen,
wie sich dieser in Bezug auf andere Trigger, was die Abarbeitungsreihenfolge betrifft, zu verhalten hat.
6.2 Zeitereignisse
In diesem Abschnitt wird die Syntax für Zeitregeln in ARTA II vorgestellt. Wie
schon zuvor erwähnt, wurde die SQL-Triggersprache um neue Zeitereignistypen
erweitert, d.h. die Trigger von ARTA II können, außer auf das Eintreten eines Änderungsereignisses, auch auf das Eintreten eines Zeitereignisses reagieren. Es werden zwei Arten von Zeitereignissen unterschieden. Die absoluten Zeitereignisse,
die durch einen absoluten Zeitpunkt angegeben werden und die periodischen Zeitereignisse, die durch eine Regel, wie jeden Sonntag um 23:59 Uhr beschrieben
werden. Beim Entwurf der periodischen Zeitereignisse wurde sorgsam eine Syntax
erstellt, mit der alle gängigen periodischen Zeitereignistypen abgedeckt werden.
Was sind gängige periodischen Zeitereignistypen? Im normalen Sprachgebrauch
werden oft Zeitangaben formuliert, die sich auf den ersten Blick nicht ohne weiteres Formulieren lassen, wie z.B.
51
Erweiterungskonzepte für das aktive DBMS
Erweiterungen der SQL-Triggersprache
• jeden dritten Tag um 11:00 Uhr
• alle zweieinhalb Stunden
• alle 20 Minuten
• jeden Sonntag jeder dritte Woche um 9:00 Uhr
• jeden ersten Januar des Jahres um 9:00
• jedes zweite Jahre am jeweils zweiten Samstag im Monat Januar um 09:00
Uhr.
• alle zwei Monate jeden Montag um 09:00 Uhr.
• alle zwei Monate an jedem ersten Sonntag um 09:00 Uhr.
• alle zwei Monate am 25.Tag des Monats um 09:00 Uhr.
Es sollte eine möglichst einheitliche Formulierung gewählt werden, die für sich
selbstsprechend ist, so daß der Anwender schon an der Syntax erkennen kann, wie
der Ausdruck zu formulieren ist. In den folgenden Abschnitten werden die Zeitereignistypen und ihre Syntax anhand von Beispielen vorgestellt.
6.2.1
Absolute Zeitereignistypen
Die einfachsten Zeitereignistypen, die in ARTA II existieren, sind die absoluten
Zeitereignisse. Dies sind einmalig eintretende Ereignisse, die mittels eines Datums
und einer Zeitangabe angegeben werden können. Ein absolutes Zeitereignismuster
wird mit dem Schlüsselwort ON eingeleitet, gefolgt vom Datum. Anschließend
wird die Zeitangabe mit dem Schlüsselwort AT eingeleitet.
absolute time event type
ON
date
AT
time
Abbildung 6.3: Absolutes Zeitereignis
6.2.2
Periodische Zeitereignistypen
Periodische Zeitereignisse in ARTA II werden in sechs verschiedene Perioden unterteilt. Diese, wie in der folgenden Abbildung zu sehen ist, unterteilen sich in die
Perioden Minute, Stunde, Tag, Woche, Monat und Jahr. Die Perioden Monat und
Jahr können wiederum unterteilt werden.
52
Erweiterungskonzepte für das aktive DBMS
Erweiterungen der SQL-Triggersprache
periodic time event type
minutes event type
hours event type
days event type
weeks event type
months event type
years event type
Abbildung 6.4: Verschiedene Perioden eines Zeitereignisses
Die periodischen Zeitereignistypen unterscheiden sich von den absoluten Zeitereignistypen dadurch, daß sie mehrmals zu eintretenden Zeitpunkten passen können.
Periodische Zeitereignistypen beginnen immer mit dem Schlüsselwort EVERY,
um den Unterschied zu den absoluten Zeitereignissen deutlich zu machen.
Bei einem Zeitereignis vom Typ Minute muß nur eine Minutenzahl angegeben
werden. Anhand des Startdatums des Gültigkeitsintervalls wird der nächste Ausführungstermin, der in der Zukunft liegt, berechnet. Liegt der berechnete Ausführungszeitpunkt außerhalb des Gültigkeitsintervalls, so wird dieser Trigger als abgearbeitet markiert und gelöscht.
minutes event type
EVERY
minutes
MINUTES
Abbildung 6.5: Zeitereignis der Periode Minute
Angenommen die Periode Minute wird mit 30 Minuten und das Gültigkeitsintervall
mit start at: 9:35 und end at: 11: 30 angegeben, dann wären die nächsten Ausführungstermine: 9:35 Uhr, 10:05 Uhr und 10:35 Uhr.
start on date: 21.01.2004
start at time: 09:35
end on date: 03.04.2004
end at time: 11:00
t
09:35
10:05
10:35
11:05
Abbildung 6.6: Wiederkehrende Minutenperiode
53
Erweiterungskonzepte für das aktive DBMS
Erweiterungen der SQL-Triggersprache
Auch beim Periodentyp Stunde wird anhand der Start- und Endzeit des
Gültigkeitsintervalls des nächsten Ausführungszeittermins berechnet. Mit dem
folgenden Konstrukt kann ein periodisches Zeitereignis der Form „alle 02 Stunden
um 30 Minuten nach“ angegeben werden. Für das folgende Beispiel ist das
Gültigkeitsintervall wie folgt angegeben: start at 9:35, end at 14:30. Nächster
Ausführungstermin wäre um 12:05 Uhr. Der anschließende Termin um 14:35 Uhr
liegt nicht mehr im Gültigkeitsbereich.
hours event type
2digit
EVERY
minutes
HOURS AT
MINUTES PAST
Abbildung 6.7: Zeitereignis der Periode Stunde
Mit dem Periodentyp Tag kann man einen Ausdruck in der folgenden Form formulieren: „alle 3 Tage um 9:00 Uhr“, was im normalen Sprachgebrauch „jeden dritten
Tag um 09:00 Uhr“ entspricht.
days event type
EVERY
3digit
DAYS AT
time
Abbildung 6.8: Zeitereignis der Periode Tag
Dieses Konstrukt erlaubt die Angabe eines Ereignisses, mit der Periode Woche.
Ein möglicher Ausdruck durch dieses Syntax wäre „alle 02 Wochen am Sonntag
um 09:00 Uhr“, was im normalen Sprachgebrauch „jede zweite Woche am Sonntag
um 9:00 Uhr“ entspricht.
weeks event type
EVERY
2digit
day of week
WEEKS ON
AT
time
Abbildung 6.9: Zeitereignis der Periode Woche
Interessant sind die Konstrukte vom Periodentyp Monat und Jahr. Diese werden in
weitere Untertypen unterteilt, um die verschiedenartigen und noch sinnige periodische Zeitereignistypen abzudecken. Der Periodentyp Monat läßt sich in drei und
der des Jahres in zwei Untertypen einteilen.
months event type
EVERY
2digit
EVERY
MONTHS ON
day of week
ordined 1stTo5th
ordined digit day
day of week
DAY
Abbildung 6.10: Zeitereignis der Periode Monat
54
AT
time
Erweiterungskonzepte für das aktive DBMS
Erweiterungen der SQL-Triggersprache
Für die Periode Monat können folgende Ausdrücke formuliert werden:
• alle 02 Monate an jedem Montag um 09:00 Uhr.
• alle 02 Monate an jedem ersten Sonntag um 09:00 Uhr.
• alle 02 Monate am 25.Tag um 09:00 Uhr.
Der letzte Periodentyp der angegeben werden kann, ist der des Jahres. Auch hier
wird zu jedem Konstrukt ein Beispiel angegeben.
years event type
EVERY
2digit
YEARS ON
ordined day
month of year
ordined number
day of week
IN
month of year
AT
time
Abbildung 6.11: Zeitereignis der Periode Jahr
Für die Periode Jahr können folgende Ausdrücke formuliert werden:
• alle 02 Jahre am ersten Januar um 09:00 Uhr oder
• alle 02 Jahre am zweiten Samstag im Januar um 09:00 Uhr.
6.2.3
Korrektheit
Die Angabe einer so großen Anzahl an Konstrukten verschafft dem Anwender eine
optimale Übersicht bei der Formulierung eines Triggers. Die Syntaxüberprüfung
bei der Eingabe eines Triggers, wird teils von den Steuerelementen selbst und teils
mit Hilfe von Routinen realisiert, die in die Eingabemaske implementiert wurden.
Abbildung 6.12: Steuerelement für die Vergabe einer Priorität
In Abbildung 6.12 ist ein Textfeld dargestellt, das bei der Erstellung dafür sorgt,
daß die Triggerpriorität automatisch gesetzt wird. Im Feld „Standardwert“ wird
eine Routine (siehe Abbildung 6.13) aufgerufen, die aus der Datenbank die höchstvergebene Triggerpriorität ermittelt. Dieser ermittelte Wert wird dann um 1 erhöht
55
Erweiterungskonzepte für das aktive DBMS
Erweiterungen der SQL-Triggersprache
und als Steuerelementinhalt des Attributes „priority“ in der Datenbank abgespeichert.
Abbildung 6.13: Routine zur Ermittlung der höchstvergebenen Priorität
Um zu überprüfen, ob die getätigte Eingabe in einem Textfeld korrekt ist, kann
nach der Eingabe (nach der Aktualisierung des Textfeldes) eine Ereignisprozedur
ausgelöst werden, die die falsche Eingabe zurücksetzt. Diese Routine ist in Abbildung 6.14 mit abgebildet. Der Undo-Befehl macht die Eingabe rückgängig, wenn
der eingegebene Wert kleiner oder gleich 0 ist. An dieser Stelle könnte noch ein
Dialogfenster geöffnet werden, um den Anwender mitzuteilen, was er falsch gemacht hat. Da aber die Priorität automatisch gesetzt werden soll, erübrigt sich eine
Meldung.
Aufruf einer Ereignisprozedur
Ereignisprozedur:
Abbildung 6.14: Eingabeüberprüfung über eine Ereignisprozedur
56
Erweiterungskonzepte für das aktive DBMS
Erweiterungen der SQL-Triggersprache
6.3 Syntax der ARTA II-Trigger
In diesem Kapitel wird die komplette Syntax der ARTA II-Trigger vorgestellt. Die
Syntax wurde aufgrund der Übersichtlichkeit farbig dargestellt.
<trigger definition> :: =
CREATE TRIGGER <trigger name><priority><interval><deadline>
ON <event type> REFERENCING <old or new values alias list>
IF
<condition>
DO <action>.
<trigger name> ::= <identifier–name>.
<priority> ::=<integer>.
<interval>::= <begin validity interval> <end validity interval>.
<deadline>::= <integer>.
<event type> :: =
<modification event type>
|<absolute time event type >
|<periodic time event type>.
<old or new values alias list> :: =
OLD
ROW
AS
OLD
TABLE
AS
NEW ROW
AS
NEW TABLE
AS
<old values correlation name>
<old values table alias>
<new values correlation name>
<new values table alias>.
<condition> :: = [
WHEN [<left parent><search condition><right parent>]
<triggered SQL Statement>
].
<action> :: =
FOR EACH {ROW | STATEMENT}.
<triggered SQL Statement>
| <VBA expression>.
57
Erweiterungskonzepte für das aktive DBMS
Erweiterungen der SQL-Triggersprache
<begin validity interval> ::= <date> <time>.
<end validity interval>
::= <date> <time>.
<modification event type> :: = <trigger action time><modification type>ON<table
name>
<trigger action time> :: =
BEFORE
|AFTER.
<modification type> :: =
INSERT
|DELETE
|UPDATE.
<table name> ::= <identifier-name>.
<absolute time event type> ::= ON<date>AT<time>.
periodic time event type > ::=
<minutes event type>
|<hours event type>
|<days event type>
|<weeks event type>
|<months event type>
|<years event type>.
<minutes event type> ::= EVERY<minutes>MINUTES.
<hours event type> ::= EVERY<2digit>HOURS AT<minutes>PAST.
<days event type> ::= EVERY<3digit>DAYS AT<time>.
<weeks event type> ::= EVERY<2digit>WEEKS ON <list day of week>AT<time>.
<months event type > ::=
EVERY<2digit>MONTHS ON EVERY<day of week>AT<time>.
|<EVERY<2digit>MONTHS ON<ordined>< day of week>AT<time>.
| EVERY<2digit>MONTHS ON<ordined digit day>DAY<time>.
<years event type > ::=
58
Erweiterungskonzepte für das aktive DBMS
Erweiterungen der SQL-Triggersprache
EVERY<2digit>YEARS ON<ordined day><month>AT<time>
|EVERY<2digit>YEARS ON<ordined number><day of
week>IN<month>AT<time>.
<old values correlation name> ::= <identifier-name>.
<old values table alias>
::= <identifier-name>.
<new values correlation name> ::= <identifier-name>.
<new values table alias>
::= <identifier-name>.
<left paren> <search condition><right paren> : Ja/Nein-Abfragen an die DB.
<triggered SQL Statement>: Ein SQL-Ausdruck.
<VBA expression>: Eine Routine in Visual Basic Appication.
<identifier-name> ::=
<letter>
| <identifier-name> <letter>
|<identifier-name> <digit0>.
<day of week> ::= monday | ... | sunday.
<month>
::= january | ... | december.
<3digit>
::= <digit0><digit0><digit>.
<2digit>
::= <digit0><digit>.
<date>
::= <digit days>.<digit months>.<digit years>.
<time>
::= <hours>:<minutes>.
<ordined>
:: = 1st | ... | 5th.
<ordined digit day> ::= 1st | ... | 31th .
<minutes>
::= 00 | ... | 59.
<digit hours>
::= 01 | ... | 23.
<digit days>
::= 01 | ... | 31.
<digit months> ::= 01 | ... | 12.
<digit years>
::= 1900 | ... | 2100.
<digit0>
::= 0 | ... | 9.
<digit>
::= 1 | ... | 9.
<letter>
::= a | ... | z | A | ... | Z.
<integer> ::= <digit> | <integer> <digit>.
<boolean> ::= TRUE | FALSE.
59
Erweiterungskonzepte für das aktive DBMS
Erweiterungen der SQL-Triggersprache
6.4 Semantik der ARTA II-Trigger
Die Abarbeitungsreihenfolge der ARTA-II Trigger entspricht der, der SQL:1999
Trigger, die in Kapitel 4.4 vorgestellt wurde. Hier eine kurze Zusammenfassung.
1.Ermittlung aller Before-Statement-Trigger
2.Ermittlung aller Before-Row-Trigger
3. Ausführen des Aktionsteils
4. Überprüfung der IB (constrains)
5. Ermittlung aller After-Row-Trigger
6. Ermittlung aller After-Statement-Trigger
6.4.1
Ausführungsreihenfolge von simultan ausgelösten Triggern
Nach der Ermittlung der Before- und After-Trigger, muß eine Reihenfolge für die
Abarbeitung der Trigger festgelegt werden. SQL:1999-Trigger werden nach ihrem
Erstellungsdatum und -uhrzeit sortiert und anschließend in dieser Reihenfolge abgearbeitet. Eine Änderung der Abarbeitungsreihenfolge ist nach Erstellen eines
Triggers nicht mehr möglich, es sei denn alle Trigger würden, unter Berücksichtigung des Erstellungsdatums, neu definiert werden. Dies setzt wiederum voraus, daß
schon am Anfang bekannt ist, welche Trigger benötigt werden.
Bei der Erstellung eines ARTA II-Triggers hingegen wird, bei der Erstellung eines
neuen Triggers, eine eindeutige Priorität vergeben, die später manuell verändert
werden kann. Die Trigger werden bei der Abarbeitung nach ihrer Priorität sortiert,
so daß ein Ablaufsreihenfolgenkonflikt vermieden werden kann. Der neue Aspekt
in ARTA II beruht auf der Möglichkeit, die Priorität nach Erstellung des Triggers
ändern zu können. Diese erleichtert die Arbeit mit den ARTA II-Triggern wesentlich, da sich nicht schon bei Erstellung des Triggers darum gekümmert werden
muß, in welchem Abarbeitungsreihenfolgenbezug dieser Trigger zu anderen Triggern steht.
6.4.2
Realisierung der Triggerkaskaden
In ARTA II können Regeln zu unterschiedlichen Zeitpunkten definiert werden. Das
Verhalten der so definierten Triggermenge und die Abhängigkeiten zwischen den
einzelnen Triggern sind schwer voraussehbar. So können z.B. innerhalb der Triggermenge Kaskaden entstehen, wenn durch die Ausführung einer triggernden Aktion Ereignisse eintreten und somit weitere Trigger ausgelöst werden. Diese Kaskaden können auch zyklisch verlaufen, wenn sich ein Trigger selbst direkt oder indirekt über andere Trigger auslöst. Durch die Existenz einer zyklischen Regelkaskade
besteht die Gefahr, daß die Regelverarbeitung nicht abbricht, d.h. daß während der
Verarbeitung immer wieder neue Regeln ausgelöst werden.
Es bedarf einer guten Planung und Übersicht bei der Erstellung eines Triggers, die
dank der gut strukturierten grafischen Benutzeroberflächen wesentlich erleichtert
wird. Trotzdem mußte eine Lösung gefunden werden, um mit Triggerkaskaden
60
Erweiterungskonzepte für das aktive DBMS
Erweiterungen der SQL-Triggersprache
umgehen zu können. ARTA-II kann solche Zyklen nicht erkennen. Um dennoch zu verhindern, daß die Regelverarbeitung nicht abbricht, wurde in ARTA-II die Tiefe der Regelkaskaden beschränkt.
6.4.3
Beschränkte Kaskadentiefe
Die Regelmenge wird in diesem Fall nicht analysiert. Statt dessen wird eine feste Zahl
vorgegeben, die festlegt, wie tief sich Trigger gegenseitig auslösen dürfen, d.h. wie tief
die Triggerkaskade sein darf. Beim Erreichen dieser Schranke wird die Verarbeitung
abgebrochen. Dabei können zwei Varianten unterschieden werden:
1. Der letzte Befehl wird zurückgesetzt.
2. Die ganze Transaktion wird zurückgesetzt.
Falls eine zyklische Regelkaskade existiert, so wird mit der Beschränkung garantiert,
daß die Verarbeitung terminiert. Die Festlegung einer Kaskadentiefe hat jedoch einige
Nachteile. So kann es z.B. vorkommen, daß eine gewünschte Regelverarbeitung eine
Kaskadentiefe von 10 aufweist, die festgelegte Grenze aber nur bei 5 liegt. Die gewünschte Kaskade könnte in diesem Fall nicht verarbeitet werden, obwohl diese nicht
zu einer Endlosverarbeitung geführt hätte.
6.4.4
Transaktionskonzept
TE.doAction
ControlSystemClose!chkEnableClose = FALSE
Set wks = DBEngine.WorkSpace.(0)
wks.BeginTrans
Set TEC AS New clsTExecute
TEC.executeSQL-Statement (TE.action)
TRUE
Error
wks.Rollback
FALSE
wks.CommitTrans
ControlSystemClose!chkEnableClose = TRUE
Abbildung 6.15: Transaktionskonzept
Ausgelöste SQL-Statements und Triggeraktion laufen in unabhängigen Transaktionen
ab. Die Bedingungsprüfung und die Aktionsausführung erfolgen innerhalb der Transaktion, die den Trigger anstößt. Kommt es bei der Aktionsausführung zu einem Fehler, so
61
Erweiterungskonzepte für das aktive DBMS
Erweiterungen der SQL-Triggersprache
werden alle Aktionen, einschließlich des auszulösenden Statements, zurückgesetzt
(Rollback). Im folgenden Programmablauf wird, vereinfacht dargestellt, der Ablauf einer Transaktion verdeutlicht. Mit Begin Trans wird die Transaktion eingeleitet. Nach
erfolgreicher Ausführung eines SQL-Statements werden mit Commit Trans, die Änderungen in der Datenbank festgeschrieben. Bei einem Fehler hingegen, wird die komplette Transaktion mit Rollback zurückgesetzt. Die Rekursion für die Triggerverarbeitung
findet in Execute.SQL-Statement statt.
62
Erweiterungskonzepte für das aktive DBMS
ARTA II
Kapitel 7 ARTA II
ARTA II
Ein gängiges Konzept beim Aufbau von Access-DB ist es, die Tabellen in Datenbank A
(Back-End genannt) zu speichern und die anderen Objekte einer Datenbank in der Datenbank B (Front-End) zu verwalten. Man spricht hier von geteilten Datenbanken. Dieses Konzept bietet folgende Vorteile:
Bei der Entwicklung von ARTA II wurden die Anwendungsdaten und das neue aktive
Datenbankverwaltungssystem voneinander getrennt. Die Anwendungsdaten und ARTA
II wurden in zwei separaten .mdb-Dateien gespeichert, siehe Abbildung 7.1. Grundsätzlich ist es besser Daten und Anwendungssystem zu trennen, so ist es z.B. bei einem
Versionswechsel einfacher, eine gezielte Datensicherung vorzunehmen ohne gleich das
ganze System mit abzuspeichern. Zudem ist es einfacher das alte System durch ein neues zu ersetzen, ohne gleich alle Anwendungsdaten zu verlieren. Die Datenbank, in der
die Anwendungsdaten liegen, nennt man in einer geteilten Datenbank Back-End und die
Datenbank, die das Anwendungssystem beinhaltet Front-End.
ARTA II soll anhand eines Diplomprüfungsamtsystems vorgestellt werden. Folglich
befinden sich in der Data-Application.mdb die Daten zu den Studenten und deren Abgabefristen für eine angemeldete Diplomarbeit. Zusätzlich werden die angelegten Trigger, Ereignismuster, vordefinierten SQL-Statements, sowie eine Ereignisprotokollierung
abgespeichert. Diese Tabellen sind mit dem ARTA II-System verknüpft, so daß eine
Verbindung zwischen dem System und den Daten besteht. Bei einer Verknüpfung wird
eine Kopie der Tabellen in der Datenbank gespeichert.
Data-Application.mdb
ARTA II.mdb
(DBMS)
(ADBMS)
DB
Abbildung 7.1: ARTA II-Dateistruktur
Möchte man einen neuen Studenten oder zu einem bestehenden Studenten die Abgabefristen für die Anmeldung einer Diplomarbeit in die Datenbank eintragen, so geschieht
dies über das ARTA II-System. Dort können mit Hilfe eines Terminals SQLAnweisungen formuliert werden, die dann vom ARTA II-System ausgeführt werden.
Nur so können Datenbankänderungen vom System erkannt bzw. abgefangen und darauf
reagiert werden. In der folgenden Abbildung wird die ARTA II-Systemarchitektur mit
ihren Komponenten vorgestellt. In den darauf folgenden Abschnitten werden die einzelnen Komponenten in ihrer Arbeitsweise, zum Teil durch Programmablaufpläne (PAP),
dargestellt.
63
Erweiterungskonzepte für das aktive DBMS
ARTA II
7.1 Schichtenarchitektur
ARTA II – DBMS
Timer
SQL-Statement
Manager
Data Application
Trigger
Execution
Event
Manager
GUI
Data
Trigger
Manager
Trigger
Event
SQLStatements Log
Time Event
Manager
Event Type
Manager
Abbildung 7.2: Architekturdiagramm von ARTA II
Die Komponenten von ARTA II, die das passive DBS in ein aktives überführen, werden
wie eine aktive Schicht über das Datenbanksystem gelegt. Sämtliche Befehle eines Benutzers gelangen durch die aktive Schicht an die darunterliegende Datenbank und alle
Daten aus der Datenbank werden durch die Schicht hindurch an den Benutzer weitergereicht. Somit sind sämtliche Informationen in der Schicht verfügbar, die für die Regelausführung notwendig sind. Dieser Ansatz wird auch layered architecture genannt.
• Vorteile: Ein DBS kann ohne Modifikation in ein ADBS umgewandelt werden.
• Nachteile: Es besteht die Gefahr von geringer Performance, da der Kommunikationsaufwand zwischen der aktiven Schicht und der Datenbank hoch sein kann.
ARTA II besteht im wesentlichen aus zwei Subsystemen, die miteinander kommunizieren. Diese Systeme sind die grafische Benutzerschnittstelle (Graphic User Interface,
abgek. GUI), mit welchem die Benutzer arbeiten, und das Verarbeitungssystem
(Processing System), in dem die Regeln modelliert, analysiert, abgelegt und verarbeitet
werden. Das Verarbeitungssystem ist mit dem zugrundeliegenden DBS verbunden. Jeder Benutzerbefehl gelangt durch die grafische Benutzerschnittstelle in das Verarbeitungssystem, in dem Regeln, die durch die Benutzerbefehle ausgelöst werden, in die
Verarbeitung mit einfließen. Die notwendigen Regelaktionen sowie die Benutzerbefehle
selbst, werden sodann auf der darunterliegenden Datenbank ausgeführt.
64
Erweiterungskonzepte für das aktive DBMS
ARTA II
7.2 Systemarchitektur
SQL-Statement
Manager
Event
Manager
SQLStatements
Trigger
Execution
Event Log
GUI
Trigger
Manager
Trigger
Time Event
Manager
Event Type
Manager
Event
Types
Event Log
Timer
Abbildung 7.3: ARTA II: Systemkomponenten
ARTA II besteht aus einer grafischen-, vier Schema- und zwei Ausführungskomponenten, die untereinander in Verbindung stehen. Die GUI ist die grafische Komponente und
die Schnittstelle zur Kommunikation zwischen Anwender und ARTA-System. Die
Hauptaufgabe der GUI ist die grafische Aufbereitung, sowie die Unterstützung der Daten beim Erstellen, Ändern und Löschen. Die Erstellung der grafischen Benutzeroberflächen verlangt viel Fingerspitzengefühl, um komplizierte Zusammenhänge einfach
und verständlich darzustellen.
Die ARTA II-Schemakomponenten dienen hauptsächlich der Verwaltung, also der Erstellung, Modifizierung und Löschung von Daten. Im folgenden werden die vier Schemakomponenten kurz vorgestellt.
Der SQL-Statement Manager, der zusammen mit dem Event Type Manager und dem
Trigger Manager zur Schemakomponente gehört, dient hauptsächlich der Verwaltung
manuell eingegebener SQL-Statements. Möchte ein Anwender einen Datensatz manipulieren, so geschieht dies über eine Art Terminal, mit welchem SQL-Statements formuliert und ausgeführt werden können. Darüber hinaus können formulierte SQLStatements in die Datenbank abgespeichert werden und stehen dann dem Anwender bei
der Formulierung neuer Statements zu Verfügung. Dieser Manager dient somit zum
einen der Verwaltung von SQL-Statements und zum anderen besteht seine Aufgabe
darin, eingegebene Befehle abzufangen, sie auf ihre Richtigkeit hin zu überprüfen und,
falls diese Korrekt sind, an die Trigger Execution weiter zu reichen. Falls die Trigger
Execution mit einem anderen Befehl beschäftigt ist, so wird der auszuführende Befehl
65
Erweiterungskonzepte für das aktive DBMS
ARTA II
als nicht ausgeführt protokolliert und zurückgewiesen. Der Benutzer kann sofort die
Protokolldatei einsehen, um entsprechende Gegenmaßnahmen durchzuführen.
Der Event Type Manager verwaltet Ereignismuster. Bei der Erstellung eines Triggers
können die auslösenden Ereignisse für einen Trigger als Muster gesondert abgespeichert
werden. Diese stehen später bei der Erstellung eines neuen Triggers als Auswahlliste
zur Verfügung. So können in der Ereignismusterübersicht alle Trigger, die ein gemeinsames Ereignismuster besitzen, gruppiert angezeigt werden.
Der Event Manager verwaltet eine Protokolldatei, in der alle abgearbeiteten oder nicht
abgearbeiteten Trigger protokolliert werden. Zu einem Eintrag werden Triggername,
Ausführungszeitpunkt, Erfolgs-, bzw. Mißerfolgsmeldung und ein Timestamp eingetragen. Dieses Protokoll kann ausgedruckt werden.
Der Trigger Manager ist eine der wichtigsten Komponenten, mit dem die ARTA IITrigger verwaltet werden. Der Trigger Manager sorgt bei der Erstellung eines Triggers
von Typ Zeitereignis (TE-Trigger) dafür, daß dieser vom Time Event Manager bei der
Verarbeitung mit berücksichtigt wird. Bei der Erstellung eines TE-Triggers wird vom
Trigger Manager der nächste Ausführungszeitpunkt berechnet und zusammen mit dem
Trigger in die Datenbank gespeichert. Weitere Aufgaben dieser Komponente sind die
Überprüfung auf Korrektheit bei der Erstellung, Modifizierung sowie der Löschung
eines Triggers.
Die ARTA II-Ausführungskomponenten (Time Event Manager und Execution Manager) werden in den folgenden zwei Abschnitten genauer betrachtet, da sie das Kernstück
des Systems bilden.
7.3 Time Event Manager
Trigger
Manager
Trigger
Execution
TIME EVENT MANAGER
Time Event
Trigger
ProcessOldTimeEvents
ProcessNewTimeEvents
Event Log
Timer
Abbildung 7.4: Der Time Event Manager und seine interagierenden Komponenten
66
Erweiterungskonzepte für das aktive DBMS
ARTA II
Der Time Event Manager dient der Zeitereigniserkennung und Verarbeitung von Triggern vom Typ Zeitereignis (TE-Trigger). Die Komponenten, die mit diesem Verwaltungssystem interagieren sind der Trigger Manager und die Trigger Execution. Wird der
Time Event Manager gestartet, so werden zunächst alle „alten“ TE-Trigger und anschließend alle in der Zukunft liegenden TE-Trigger verarbeitet. Genaueres dazu in den
folgenden Routinen.
Bei der Erstellung eines Triggers vom Typ periodisches Zeitereignis, wird durch den
Trigger Manager automatisch, anhand eines Gültigkeitsintervalls und einer Periode, der
nächste Ausführungszeitpunkt berechnet und mit dem Trigger zusammen in der Datenbank abgespeichert. Bei der Abarbeitung der Trigger durch den Time Event Manager,
werden diese Informationen und zusätzliche Steuerelemente der Trigger aus der DB
geladen, um eine Abarbeitungsreihenfolge zu berechnen. Über alle Aktionen die ausgeführt werden, wird Protokoll geführt, so daß der Anwender die Ausführungsschritte
überprüfen kann. Der Zeitereignismanager selbst benutzt die Timer-Funktion des Betriebssystems, die über die API-Schnittstelle bereit gestellt wird, um Aufgaben in der
Zukunft zu planen. Nachdem ein TE-Trigger verarbeitet wurde, wird sein Status geändert. Dies geschieht in einer Routine namens Change Status, die im folgenden vorgestellt wird.
TE.ChangeStatus
TRUE
TE.isAbsolute
FALSE
TE.isPeriodic
FALSE
TRUE
TE.computeNextExecution
t1:= TE.nextExecution
t2 := Date(TE.EndOnDate, TE.EndOnTime)
t1 > t2
TRUE
TE.beDone
= FALSE
FALSE
TE.beDone = TRUE
Abbildung 7.5: PAP Change Status
Change Status: Die Zeitereignisse, auf welche ARTA II-Trigger reagieren können,
sind absolute und periodische Zeitereignisse. Der Time Event Manager verarbeitet die
Trigger vom Typ periodisches Zeitereignis (PTE-Trigger) und die vom Typ absolutes
Zeitereignis (ATE-Trigger) bis auf einen Unterschied in gleicher Weise. Der Unterschied besteht darin, daß nach Abarbeitung eines PTE-Triggers sein nächster Ausfüh67
Erweiterungskonzepte für das aktive DBMS
ARTA II
rungstermin berechnet wird, während ATE-Trigger nach der Abarbeitung sofort als abgearbeitet (beDone=TRUE) markiert werden. Nach der Berechnung des nächsten Ausführungstermins, wird für einen PTE-Trigger überprüft, ob sein berechneter Ausführungstermin innerhalb des angegebenen Gültigkeitsintervalls liegt. Zur Ermittlung wird
das Intervallende mit dem Ausführungszeitpunkt verglichen. Ist der Ausführungstermin
echt kleiner, so wird dieser noch ausgeführt, ansonsten wird der Trigger als abgearbeitet
markiert.
ProcessNewTimeEvents: Diese Routine führt zunächst eine Initialisierung durch. Dabei wird unter anderem der Timer initialisiert, auch wenn zuvor bereits einer gesetzt
wurde. Anschließend wird eine Anfrage (getNextTE) an die DB gestellt, um anhand der
Priorität und dem Ausführungstermin, den nächsten TE-Trigger zu ermitteln. Falls es
keinen Trigger gibt, der ausgeführt werden soll, wird ein interner Timer (auf 24 Stunden) gesetzt, so daß nach Ablauf des Timers erneut mit der Ermittlung begonnen wird.
Wird jedoch ein Trigger gefunden, so wird für diesen ein Timer zum nächsten Ausführungstermin gesetzt. Sobald sich der Timer meldet, was unter Umständen eine Weile
dauern kann, muß festgestellt werden, ob es sich beim zuvor gesetzten Timer um einen
internen oder normalen Timer gehandelt hat. Handelte es sich um einen normalen Timer, so wird dieser an die Ausführungskomponente (TE.doAction) weitergereicht. Nach
der Abarbeitung des Triggers durch die Ausführungskomponente, wird ein Eintrag in
die Protokolltabelle geschrieben, der Status des Triggers geändert (ChangeStatus) und
dieser anschließend aus der Datenbank gelöscht, falls er zuvor als abgearbeitet markierten wurde. Anschließend wird der Time Event Manager neu gestartet, um den nächsten
TE-Trigger zu ermitteln.
processNewTimEvent
initAllTE
TE:= getNextTE
TRUE
setTimer
(one Day)
FALSE
TE = Ø
processOldTimeEvents
setTimer
(TE.nextExecution)
deleteBeDoneTrigger
TE.ChangeStatus
wait until Timer bells
writeLog (TE)
TRUE
TE = Ø
FALSE
TE.doAction
TE:= (SELECT TimeEventTrigger FROM tbl_Trigger
WHERE Trigger.nextExecution + Trigger.Deadline > Now()
AND Trigger.beDone = FALSE
AND Trigger.activated = TRUE
ORDER BY Max (Trigger.priority))
Abbildung 7.6: PAP ProccesNewTimeEvent
68
Erweiterungskonzepte für das aktive DBMS
ARTA II
Bei der Erstellung eines neuen TE-Triggers durch den Anwender, kann es vorkommen,
daß der neue TE-Trigger vor dem TE-Trigger ausgeführt werden soll, für den schon ein
Timer gesetzt wurde. Um dieses Problem in den Griff zu bekommen, muß nach der Erstellung oder Modifizierung eines TE-Triggers der Time Event Manager vom Trigger
Manager neu gestartet werden. Dabei wird der Timer neu initialisiert. Da die Trigger in
der Datenbank immer aktuell sind (z.B. nach dem Erstellen oder Modifizieren eines
Triggers durch den Trigger Manager), stehen beim Start dieser Komponente immer die
aktuellen Trigger zur Verfügung. Die abgespeicherten Trigger in der Datenbank dienen
dem Time Event Manager als aktuelle Ausführungsliste, da bei jedem TE-Trigger der
nächste Ausführungstermin und seine Priorität bekannt sind.
Bei der Abarbeitung eines TE-Triggers kann die folgende Situation eintreten: Zum Zeitpunkt 13.04.2005 um 9:00 sollen drei TE-Trigger gefeuert werden. Dieser Zeitpunkt
wird als Soll-Ausführungszeitpunkt bezeichnet. Die Ausführungsreihenfolge ist aufgrund der eindeutigen Priorität für jeden Trigger gegeben. Es darf immer nur ein Trigger gleichzeitig ausgeführt werden. Die Abarbeitungsreihenfolge ist durch die Priorität
der Trigger gegeben. So sollen Tr1 vor Tr2 und Tr2 vor T3 ausgeführt werden. Da immer nur ein Trigger gleichzeitig abgearbeitet werden darf und erst mit Beendung der
Abarbeitungszeit eines Triggers der nächste zum Zuge kommt, kann es zum folgenden
Problem kommen.
Angenommen der erste Trigger habe eine Deadline von 60, der zweite eine von 120 und
der dritte eine von 180 Minuten. Da die Bearbeitungszeit eines Triggers nach dessen
Feuern unterschiedlich lang ausfallen kann, ist nie genau vorhersagbar, wann dieser
seine Arbeit beendet.
Soll-Ausführungszeitpunkt aller drei Trigger
Tr1.priorität = 1
Tr2.priorität = 2
09:00
10:00 11:00
Tr3.priorität = 3
12:00
Tr1
t
Tr2
t
t
Tr3
benötigte
Abarbeitungszeit
Deadline
Tr1
Tr2
Tr3
Ist-Ausführungszeitpunkt aller drei Trigger
Abbildung 7.7: Ausführungszeitpunkt
Wenn der erste Trigger seine Arbeit um 9:00 Uhr beginnt und sie erst um 11:05 beendet, findet die Routine getNextTE den dritten Trigger, während der zweite ignoriert
wird, da dieser nur bis 11:00 Uhr ausgeführt werden durfte. Da der ignorierte Trigger
nicht gefunden wurde, wurde sein Zustand durch die Routine ChangeStatus auch nicht
geändert. D.h. er wurde nicht als abgearbeitet markiert, es fand kein Protokolleintrag
statt und der Trigger wurde nicht aus der Datenbank gelöscht. Eine Lösung des Problems liegt nahe. Nach Abarbeitung der Trigger müssen eventuell nicht abgearbeitete
69
Erweiterungskonzepte für das aktive DBMS
ARTA II
und noch aktive Trigger gesammelt und behandelt werden. Dies geschieht mit einer
Routine namens processOldTimeEvents, die im folgenden Abschnitt vorgestellt wird.
Ein weiterer Grund für die Erstellung dieser Routine wird klar, wenn folgende Situation
betrachtet wird:
Das ARTA-System kann in seiner Ruhepause, d.h. zu den Zeiten, zu denen das System
ausgeschaltet ist, nicht auf eintretende vordefinierte Zeitereignisse reagieren. Diese Reaktion sollte nach dem Start des Systems erfolgen. Dafür benötigt man eine Routine, die
die „alten“ TE-Trigger sammelt und gegebenenfalls ausführt.
ProcessOldTimeEvents: Mit getAllOldTimeEvents werden alle TE-Trigger aus der
Datenbank geladen, dessen Ausführungszeitpunkte in der Vergangenheit liegen. Außerdem müssen diese Trigger aktiviert und der Bearbeitungsstatus (BeDone) auf FALSE
gesetzt sein. Nach der Ermittlung dieser Liste wird überprüft ob diese leer ist. Falls ja,
so gibt es keine „alten“ TE-Trigger und die Routine ist beendet. Falls die Liste nicht leer
ist, so wird der erste TE-Trigger aus der Liste genommen und bearbeitet. Liegt der Zeitraum, in dem der Trigger ausgeführt werden soll in der Vergangenheit, so wird dieser
Trigger als abgearbeitet markiert, protokolliert und aus der Datenbank gelöscht. Liegt
der Zeitraum in der Zukunft, so wird der Aktionsteil des Triggers, nach erfolgreicher
Auswertung der Triggerbedingung, ausgeführt und sein Status anschließend geändert.
Nachdem ein Trigger abgearbeitet wurde, wird der nächste aus der Liste genommen, bis
diese komplett leer ist.
processOldTimeEvents
allTE:= getAllOldTimeEvents
TRUE
allTE = Ø
FALSE
TE := allTE.first
nextT := TE.nextExecution + TE.deadLine
FALSE
nextT > Now
TRUE
FALSE
TE.cond
is OK
TE:= allTE.MoveNext
TRUE
TE.doAction
deleteBeDoneTrigger(TE)
TE.ChangeStatus
writeLog (TE)
processNewTimEvent
allTE = List of Time Event
WHERE Trigger.nextExecution < Now
AND Trigger.beDone = FALSE
AND Trigger.activated = TRUE
Abbildung 7.8: Process old time events
70
Erweiterungskonzepte für das aktive DBMS
ARTA II
Die doAction-Routine (siehe Abbildung 6.15) sorgt dafür, daß die Ausführung des
Triggers nicht durch den Benutzer unterbrochen wird. Dafür wird im Hintergrund ein
Formular geöffnet, das ein Schließen von ARTA II verhindert. Nach Beendigung des
Prozesses wird das Formular wieder geschlossen. Mit BeginTrans wird eine neue
Transaktion gestartet. Anschließend wird der Trigger an die Ausführungskomponente
weitergereicht. Tritt bei der Abarbeitung ein Fehler auf, so wird die komplette Transaktion mit Rollback zurückgesetzt. Mit CommtTrans wird nach einer erfolgreichen Ausführung des Triggers, die Änderungen in die Datenbank geschrieben. Im folgenden Abschnitt wird die Ausführungskomponente genauer beschrieben, die in dieser Routine
durch TEC.executeSQL-Statement(TE.action) gestartet wird. Diese Routine gehört zur
Trigger Execution-Komponente.
7.4 Trigger Execution
Diese Komponente dient der Verarbeitung eines SQL-Statements, das entweder vom
Time Event Manager oder aus einer manuellen Eingabe über den SQL-Statement Terminal an die Triggerausführungskomponente weitergereicht wurde. Die Abarbeitung
des SQL-Statements kann, wie zuvor erwähnt, zu Triggerkaskaden führen. Eine Abarbeitungsstrategie ist hier von relevanter Bedeutung.
SQL-Statement
Manager
SQL
Time Event Manager
TEC.initTEC(SQL)
Trigger
ExecuteBeforeOrAfterTrigger(Before,SQL)
executeAction (SQL)
Log
ExecuteBeforeOrAfterTrigger(After, SQL)
TRIGGER EXECUTION
Abbildung 7.9: Triggerausführungskomponente
Als erstes werden alle Before-Trigger, die vom SQL-Befehl gefeuert werden, gesammelt, nach ihrer Priorität sortiert und anschließend ausgeführt. ARTA II-Before-Trigger
dürfen keine weiteren Trigger feuern, so daß das Problem der Triggerkaskade nur bei
der Bearbeitung der After-Trigger aufkommen kann. Nachdem alle Before-Trigger ausgeführt wurden, wird das eigentliche SQL-Statement ausgeführt. Letztlich werden alle
After-Trigger, die nach ihrer Priorität sortiert werden, gesammelt und verarbeitet. Das
Ausführen eines After-Triggers kann ein weiteres Auslösen von Triggern zur Folge haben. Die Abarbeitung erfolgt rekursiv, so daß die Verarbeitung zuerst in die Tiefe geht.
71
Erweiterungskonzepte für das aktive DBMS
ARTA II
Sind alle Trigger einer Ebene abgearbeitet, so erfolgt die Bearbeitung der Trigger der
darüberliegenden Ebene. Die Routine TEC.executeSQL_Statement, (Abbilung 7.10), ist
die Routine die rekursiv bei der Abarbeitung der Trigger ausgelöst wird.
TEC. executeSQL_Statement (SQL)
TEC.initTEC(SQL)
ExecuteBeforeOrAfterTrigger(Before, SQL)
executeAction (SQL)
ExecuteBeforeOrAfterTrigger(After, SQL)
Abbildung 7.10: executeSQL-Statement-Routine
Abbildung 7.11 zeigt die Routine, mit der alle Before- und After-Trigger bearbeitet
werden. Abbildung 7.12 und Abbildung 7.13 zeigt die Bearbeitung der Row- und Statement Lever-Trigger.
ExecuteBeforeOrAfterTrigger(ActionTime, SQL)
allTrs := allModifyEvent.getTriggers & _
(ActionTime,modificationType,tablename)
TRUE
allTrs
=Ø
FALSE
Tr := allTrs.First
TRUE
Tr is
Row
FALSE
ExecuteRowLevelTrigger(Tr)
ExecuteStatementLevelTrigger(Tr)
allTrs.Remove(Tr)
TRUE
allTrs
=Ø
FALSE
TEV:= ATEVs.MoveNext
Abbildung 7.11: ExecuteBeforeOrAfterTrigger-Routine
72
Erweiterungskonzepte für das aktive DBMS
ARTA II
ExecuteRowLevelTrigger(Tr)
tec.MoveFirstRow
TRUE
tec.EOL
FALSE
FALSE
tec.cond(Tr)
TRUE
Call ExecuteAction(tec.makeAction(Tr)
tec.MoveNextRow
Abbildung 7.12: ExecuteRowLevelTrigger-Routine
ExecuteStatementLevelTrigger(Tr)
FALSE
tec.cond(Tr)
TRUE
Call ExecuteAction(tec.makeAction(Tr)
Abbildung 7.13: ExecuteStatementLevelTrigger-Routine
73
Erweiterungskonzepte für das aktive DBMS
ARTA II
Die letzte Routine die hier vorgestellt wird ist Routine, mit der der Aktionsteil ausgeführt wird. Vor der Ausführung, wird das Statement auf seine Korrektheit hin überprüft.
executeAction (action)
isNull(action)
TRUE
LOGFILE:
„Aktionsteil ist leer“
FALSE
isValid(action) FALSE
LOGFILE:
„Aktionsteil ist ungültig “
TRUE
LOGFILE:
„Ausführung des Aktionsteils“
CurrentDB.Execute action
Abbildung 7.14: ExecuteAction-Routine
74
Erweiterungskonzepte für das aktive DBMS
GUI
Kapitel 8 GUI
GUI
Die grafische Benutzeroberfläche ist eine der wesentlichen Erweiterungen des ARTA
II-Systems. Ziel war es, übersichtliche Benutzeroberflächen zu implementieren, so daß
der Benutzer sich ohne großen Aufwand schnell zurecht finden kann. Der Benutzer soll
interaktiv mit den Masken agieren. Dazu wurden alle Oberflächenobjekte möglichst
selbstsprechend eingesetzt um eine einfache und fehlerfreie Generierung eines Triggers
zu ermöglichen. Benutzerfreundlichkeit und einfache Bedienung standen bei der Implementierung der grafischen Benutzeroberflächen an höchster Stelle.
Die Schemakomponenten, die den logischen Teil der Benutzeroberflächen bilden, sind
der Trigger-, Event Log-, Event Type- und SQL-Statement Manager. Diese liegen in
Form von Ereignis- und Anwendungsprozeduren vor. Mit ihrer Hilfe werden Eingabeüberprüfungen, interne Berechnungen, Meldungen, Protokollierungen sowie Datensatzoperationen durchgeführt.
Ein Beispiel für eine Berechnung, die der Trigger Manager ausführt, ist die Kalkulation
des nächsten Ausführungstermins eines Triggers, anhand der eingestellten Periode (gilt
nur für Trigger vom Typ periodisches Zeitereignis) oder die Gültigkeitsüberprüfung
des eingestellten Gültigkeitsintervalls (siehe Trigger Editor). Einfache Eingabeüberprüfungen werden über die Gültigkeitsüberprüfung realisiert, die die Steuerelemente selbst
anbieten.
8.1 ARTA II-Menüstruktur
Für ARTA II wurden verschiedene grafische Benutzeroberflächen implementiert, die
die Arbeit mit den ARTA II-Triggern erleichtern sollen. In diesem Abschnitt wird eine
kurze Übersicht über die ARTA II- Menüstruktur gegeben und ihre Aufrufstruktur gezeigt. In den folgenden Abschnitten werden die einzelnen Benutzeroberflächen vorgestellt.
Beim Start von ARTA II gelangt man zum ARTA II-Hauptfenster. Dieses Fenster
wird erst mit der Beendung von ARTA II geschlossen. Vom Hauptfenster aus gelangt
man zur Trigger- und Ereignismusterübersicht, sowie zum SQL-Statement Terminal.
Die Triggerübersichtsoberfläche dient der Anzeige aller vorhandenen Trigger. Es
kann ein speziell ausgewählter Trigger betrachtet werden. Ist dieser vom Typ Zeitereignis, so wird auch der nächste Ausführungszeitpunkt angezeigt, da diese im voraus berechnet werden. Aus dieser Maske heraus ist es auch möglich einen Trigger zu löschen.
Möchte man einen Trigger neu anlegen oder einen existierenden bearbeiten, so kann
von hier aus der Triggereditor aufgerufen werden.
75
Erweiterungskonzepte für das aktive DBMS
GUI
Hauptfenster
Triggerübersicht
Ereignismusterübersicht
SQL-Statement-Terminal
Triggereditor
Ereignismustereditor
SQL-Statementeditor
Abbildung 8.1: ARTA II-Menüstruktur
Der Triggereditor ist die wichtigste Benutzeroberfläche von ARTA II. Aus dieser Oberfläche heraus können Trigger auf eine recht einfache Art und Weise erstellt werden
ohne daß der Benutzer die genaue Syntax eines Triggers kennen muß. Dazu mehr in den
folgenden Abschnitten.
Wie erwähnt gelangt man aus dem ARTA II-Hauptfenster in die Ereignismusterübersicht. Sie dient der Anzeige aller Trigger gruppiert nach ihrem Ereignistyp. So erhält
man z.B. eine Übersicht über alle Trigger, die am ersten Sonntag des Monats gefeuert
werden sollen. Oft benutze Ereignistypen sollten als Ereignismuster definiert werden,
was der Übersichtlichkeit zu Gute kommt.
Über einen Ereignismustereditor können Ereignismuster geändert, neue erstellt oder
gelöscht werden. Das Anlegen eines Ereignismusters kann auch beim Anlegen eines
Triggers erfolgen.
Die SQL-Statementoberfläche, die auch aus dem ARTA II-Hauptfenster heraus aufgerufen werden kann, bietet dem Benutzer die Möglichkeit, Befehle in Form von SQLStatements „direkt“ an die Datenbank abzusetzen. Dieses Fenster bietet eine Art Terminal an, um SQL-Befehle einzugeben und auszuführen. Jeder Befehl, der über das Terminal eingegeben wurde, wird vom ARTA-System zur Ereigniserkennung abgefangen.
Nur so kann eine korrekte Triggerverarbeitung sichergestellt werden. Um die Eingabe
76
Erweiterungskonzepte für das aktive DBMS
GUI
eines SQL-Befehls zu erleichtern, können SQL-Befehle abgespeichert werden so daß
sie bei der Eingabe als Auswahlliste zur Verfügung stehen. Die Erstellung, Modifizierung und Löschung eines SQL-Statements erfolgt über den SQL-Statement Editor, der
von der SQL-Statementoberfläche aus aufgerufen werden kann.
8.2 Triggerübersichtsoberfläche
1
4
2
3
Abbildung 8.2: Triggerübersicht
Dieses Fenster ist in zwei Bereiche unterteilt. Im oberen Bereich ist eine Übersichtsliste
aller vorhandenen Trigger implementiert worden. Die wichtigsten Angaben dieser Liste
sind der Triggername, Triggertyp und der nächste Ausführungszeitpunkt bei einem
Trigger vom Typ Zeitereignis. Wird ein Trigger aus der Liste markiert, so erscheinen
seine Einstellungen im unteren Bereich des Fensters. Hier werden detaillierte Informationen zum ausgewählten Trigger angezeigt. Wichtig ist dabei, daß der Aufbau der Anzeige, der Triggersyntax nahezu entspricht. Dieser Teil des Fensters wurde wiederum in
vier Teilbereiche unterteilt. Bereich 1 stellt das triggernde Ereignis, Bereich 2 die Auslösebedingung, Bereich 3 die zu triggernde Aktion und Bereich 4 die Steuerelemente
dar. Im unteren Rand der Oberfläche wurde ein Kommentarfeld integriert, in das Bemerkungen zum Trigger angezeigt werden.
77
Erweiterungskonzepte für das aktive DBMS
GUI
8.3 Triggereditor
1
2
5
3
4
Abbildung 8.3: Triggereditor
Der Triggereditor ist wie bereits erwähnt die wichtigste Benutzeroberfläche des ARTA
II-Systems. Mit ihm lassen sich Trigger erstellen und modifizieren. Darüber hinaus läßt
sich das zu triggernde Ereignis, einmal eingegeben, als Ereignismuster speichern.
Der Triggereditor ist in fünf Bereiche unterteilt. In Bereich 1 kann ein Triggername
vergeben und das Gültigkeitsintervall eingestellt werden. Bei der Eingabe des Gültigkeitsintervalls wird, mit Hilfe einer Kalenderfunktion, die Eingabe wesentlich erleichtert. Der Trigger Manager prüft das eingegebene Gültigkeitsintervall auf seine Richtigkeit. Es ist z.B. nicht möglich ein Intervallende anzugeben, das vor dem Intervallstart
liegt.
Abbildung 8.4: Bereich 1
78
Erweiterungskonzepte für das aktive DBMS
GUI
In Bereich 2 wird der Triggertyp ausgewählt. Hier kann aus einer Auswahlliste auf bereits vorhandene Ereignismuster zurückgegriffen werden.
Abbildung 8.5: Bereich 2
In Bereich 3 wird das zu triggernde Ereignis eingestellt. Abhängig vom gewählten Ereignistypen ergeben sich verschiedene Einstellungsmöglichkeiten. In den folgenden
zwei Abbildungen sind ein Änderungsereignis und ein periodisches Zeitereignis vom
Typ Jahr dargestellt.
Abbildung 8.6: Bereich 3: Änderungsereignis
Abbildung 8.7: Bereich 3: periodisches Zeitereignis vom Typ Jahr
Bereich 3 ist der wohl wichtigste, was die Gestaltung der Oberfläche betrifft. Bei der
Gestaltung wurde der Aspekt der Benutzerfreundlichkeit nicht nur für den Anwender,
sondern auch für den Entwickler in Betracht gezogen. Es müssen eine große Anzahl an
Steuerelementen, abhängig vom ausgewählten Ereignistyp oder der Periode, ein- bzw.
ausgeblendet werden. In den folgenden Abbildungen soll verdeutlicht werden wie groß
die Anzahl an Steuerelementen ist, die verwendet werden. Bei so einer großen Anzahl
an Steuerelementen taucht das folgende Problem auf. Wie legt man diese Anzahl an
Objekten so an, daß sie für einen Benutzer in der Formularansicht eine benutzerfreund79
Erweiterungskonzepte für das aktive DBMS
GUI
liche Eingabe erlauben und im Formularentwurf dem Entwickler ein einfaches Ändern
der Objekte ermöglichen. Es mußte für den Entwickler eine Möglichkeit gefunden werden die Steuerelemente auf dem Formular so anzubringen, daß diese nicht übereinander
liegen. So müssen bei einer Änderung an einem Steuerelement nicht alle darüberliegenden verschoben werden, was die Übersichtlichkeit beim Formularentwurf sehr beeinträchtigen würde.
Abbildung 8.8: verschieden Einstellungen für Bereich 3
Die Lösung dieses Problems war die Benutzung eines Registersteuerelementes, was
hierfür zweckentfremdet wurde. Der Anwender bekommt davon nichts mit, da es für ihn
stets unsichtbar geschaltet ist. Der Entwickler hingegen benutzt dieses Registersteuerelement, um die verschiedenen Steuerelemente, die zu einem Ereignistyp und gegebenenfalls zu einer Periode gehören, zusammenzuhalten. Die Reiter des Registersteuerelementes sind nach Typ bzw. Periode bezeichnet, was in der folgenden Abbildung verdeutlicht wird.
80
Erweiterungskonzepte für das aktive DBMS
GUI
Abbildung 8.9: Registersteuerungselement, Seite Jahr
In Bereich 4 wurden aus Platzgründen die Ausführungsbedingung, die zu triggernde
Aktion sowie ein Kommentarfeld in ein Registersteuerelement untergebracht. An den
Reitern kann zwischen den dreien ausgewählt werden. Um eine komfortablere Eingabe
zu ermöglichen, kann über eine Befehlsschaltfläche (Button) ein Editierfenster geöffnet
werden, was wesentlich mehr Platz und Übersicht bei der Erstellung einer Bedingung
oder auch eines Kommentars bietet.
Eingabefenster
Befehlsschaltfläche
Abbildung 8.10: Bereich 4
Bereich 5 ermöglicht die Modifikation der Deadline, die beim Erstellen eines Triggers
automatisch auf fünf Minuten gesetzt wird. Des weiteren kann eine Priorität für den
Trigger, sowie sein Aktivierungszustand verändert werden. Der Defaultwert für die Priorität ist die nächst höher verfügbare Priorität und der Default-Aktivierungszustand ist
auf aktiviert gesetzt.
Abbildung 8.11: Bereich 5
81
Erweiterungskonzepte für das aktive DBMS
GUI
8.4 SQL-Statement Terminal
Mit Hilfe dieser Benutzeroberfläche können SQL-Befehle direkt an die Datenbank gestellt werden. Das mittlere Fenster zeigt das Eingabefenster für die SQL-Befehle. Im
oberen Bereiche des Fensters ist eine Auswahlliste integriert, aus der vordefinierte SQLStatements ausgewählt werden können. Über einen Editor, der sich von diesem Fenster
aus öffnen läßt, können SQL-Statements vordefiniert oder geändert werden.
Abbildung 8.12: SQL-Statement Terminal
82
Erweiterungskonzepte für das aktive DBMS
GUI
Zusammenfassung
In dieser Arbeit wurde das bestehende ARTA-System weiterentwickelt. Die Triggersprache von ARTA II basiert auf der SQL-3-Triggersprache mit dem Unterschied, daß
in ARTA II nicht nur Änderungsereignisse, sondern auch Zeitereignisse unterstützt
werden. Dazu wurde die Syntax der SQL-3-Triggersprache um Zeitereignisse und Steuerungselemente erweitert. ARTA II kann auf absolute und auf periodisch eintretende
Zeitereignisse reagieren. Die Synchronisation der Abarbeitungsmechanismen von Änderungs- und Zeitereignissen ist dabei von relevanter Bedeutung.
Zeitereignisse sind im Gegensatz zu Änderungsereignissen prä-aktiv, d.h. sie werden im
voraus anhand der berechneten Ausführungszeitpunkte geplant. Für den jeweils nächsten Ausführungstermin eines Triggers vom Typ Zeitereignis wird ein Timer gesetzt. In
ARTA II wird die Timerfunktionalität des Betriebssystems genutzt, die über eine APISchnittstelle mit ARTA II kommuniziert, da Microsoft Access keine Timerfunktionalität besitzt. Datenbankänderungen hingegen sind post-aktiv, d.h. daß der nächste Ausführungszeitpunkt einer Änderungsanweisung nicht bekannt ist und somit eine Ereigniserkennung nur über ein „pollendes“ System zu erkennen ist. Die Nachteile dieses Vorgehens liegen in der Ereigniserkennung. Ein zu häufiges Anfragen der Datenbank kann
zur Systemüberlastung führen, während ein zu seltenes Anfragen dazu führen kann, daß
der Zeitpunkt, zu dem eine Datenbankänderung stattfindet, nicht erkannt wird. Dieses
Problem wurde gelöst, indem das ARTA-System als Präprozessor implementiert wurde.
Alle Eingaben des Benutzers gehen über die ARTA II-Benutzeroberflächen, wo sie vom
System erkannt, ausgewertet und verarbeitet werden.
ARTA-II wurde, vor allem was die Benutzeroberflächen anbetrifft, enorm erweitert.
Der Benutzer wird beim Umgang mit Triggern aktiv unterstützt. Die grafisch aufbereiteten Eingabemasken erlauben den sicheren Umgang mit Triggern. Mittels des Trigger-,
Ereignismuster-, Ereignisprotokoll- und SQL-Statementmanagers, werden die Verwaltungsaufgaben des Systems realisiert. Diese Schemakomponenten sind die Logik, die
sich hinter den Benutzeroberflächen verbirgt. So führt der Trigger Manager bei Eingabe
oder Änderung eines Triggers Syntaxüberprüfungen durch, so daß Fehleingaben vom
Benutzer direkt abgefangen und korrigiert werden können. Eine Triggerübersicht gibt
Auskunft über anstehende Ausführungstermine, was den Umgang mit den angelegten
Triggern sehr erleichtert. Über einen Protokollmanager, der die Ereignisprotokollierung
verwaltet, kann zu jeder Zeit nachvollzogen werden, welche Trigger ausgeführt wurden
und welche nicht. Ein Event Type Manager verwaltet vordefinierte Ereignismuster und
zeigt überdies alle Trigger an, die ein solches Muster besitzen. Oft benutzte Ereignisdeklarationen beim Anlegen eines Triggers können gesondert als Ereignismuster in die
Datenbank gespeichert werden, um bei Neuerstellung eines Triggers auf eben diese vordefinierten Ereignismuster zurückgreifen zu können. Der SQL-Statement Manager dient
der Verwaltung vordefinierter SQL-Statements. Um SQL-Statements nicht immer wieder neu angeben zu müssen, können diese in die Datenbank gespeichert werden. Möchte
man ein SQL-Statement ausführen, das einem bestehenden Statement ähnelt, so genügt
es, ein bestehendes zu modifizieren.
83
Erweiterungskonzepte für das aktive DBMS
GUI
Ausblick auf mögliche Erweiterungen
ARTA II unterstützt zwei primitive Ereignisse. Die absoluten und die periodischen
Zeitereignisse. Es gibt noch einen dritten Ereignistyp und zwar den der relativen Zeitereignisse. Diese wurden leider aus zeitlichen Gründen nicht in ARTA II implementiert.
Eine interessante Erweiterung des ARTA II-Systems wäre die Implementierung von
zusammengesetzten Ereignissen, bei denen zwei oder mehrere Ereignisse kombiniert
werden. Zusammengesetzte Ereignisse können wiederum mit anderen primitiven oder
zusammengesetzten Ereignissen kombiniert werden. Um diese Aufgabe zu lösen ist es
wichtig, ein Ereignisprotokoll zu führen, um festzustellen, welche Ereignisse bereits
eingetroffen sind. So kann berechnet werden, welche Ereignisse noch fehlen, um ein
zusammengesetztes Ereignis auszulösen. Ein weiterer wichtiger Aspekt ist der Ereignisverbrauch. Diese Problematik wird in den Arbeiten von [Modic00] und [Löhr97] ausführlich behandelt.
In Microsoft Access ist es möglich, gewisse Integritätsbedingungen anzugeben. Bei der
Erstellung einer Tabelle können Schlüssel vergeben und Gültigkeitsregeln für einzelne
Attribute einer Tabelle angegeben werden, was den CHECK CONTRAINTS in SQL
entspricht. Über das Beziehungskonzept von MS-Access kann eine referenzielle Integrität gesetzt werden, wodurch Änderungen an Tabellen kaskadenförmig weitergereicht
werden können. Man hat jedoch keine Möglichkeit SQL-artige Integritätsbedingungen
auszudrücken, da die Integritätsprüfung in MS-Access unmittelbar nach einer Änderung
(immediate) stattfindet. Es gibt jedoch Transaktionsänderungen, bei denen man nicht
sofort eine Integritätsprüfung vornehmen möchte. Bei einer Einfügung zum Beispiel,
die zunächst einen Zustand verletzt, aber durch eine folgende Transaktion diesen wieder
repariert. Würde die Überprüfung nach dem Einfügen stattfinden und nicht am Ende der
kompletten Transaktion, so würde das System einen Fehler melden. Will man in MSAccess deferred ausdrücken, so muß dies mit Triggern erfolgen. Es muß ein Transaktionskonzept für die ARTA-Trigger implementiert werden.
84
Erweiterungskonzepte für das aktive DBMS
GUI
Literaturverzeichnis
[Löhr97]
Torsten Löhr. „Eine Erweiterung der aktiven Regelsprache Phoenix um
temporale Ereignisse, Deadlines und Alternativen.“ Rheinische Friedrich –
Wilhelms – Universität Bonn, 1997
[Modic00]
Jürgen Modic. „Eine Erweiterung des Triggerkonzeptes von Phönix um
temporale Ereignisse.“ Rheinische Friedrich – Wilhelms – Universität
Bonn, 2000
[Fortier99] Dr.Paul J. Fortier. „SQL – 3 Implementing the Object – Relational Database.” Chapter 10 (Triggers). McGraw – Hill 1999
[MeSi02]
Jim Melton and Alan R.Simon. „SQL:1999 Understanding Relational Language Components.” Chapter 11 (Active Databases and Triggers). Morgan
Kaufmann Publishers. 2002
[Fadaei02] Kazem Fadaei. „Entwurf und Implementierung einer Triggersprache mit
Zeitereignissen für Access – Datenbanken.” Rheinische Friedrich – Wilhelms – Universität Bonn, 2002
[DiGa00]
Dittrich, Klaus R. / Gatziu, Stella: Aktive Datenbanksysteme – Konzepte
und Mechanismen, ISBN 3-932588-19-3, 2.Auflage, April 2000, dpunktVerlag.
[Mos85]
J.B.E. Moss. Nested Tranactions: An approach to Reliable Destributed
Computing. MIT Press, Cambridge, Mass. , 1985
[ToPy98]
Thomas Pydde. Semantik von Regelsystemen für aktive Datenbanken Institut für Informatik Fachgebiet Datenbanken und Informationssysteme,
Dezember 1998
[NiJo92]
Niedereichholz, Joachim.: Datenbanksysteme - Konzepte und Management. 5.Auflage. Physica-Verlag Heidelberg, 30. März 1992
[DCha98]
D. Chamberlin: A Complete Guide to DB2 Universal Database, Morgan
Kaufmann, 1998
[HoSP]
Hoffbauer, N./Spielmann Chr., Das Access 97 Buch (1997) umfaßt 1462
Seiten, inkl. CD-Rom>>Sybex-Verlag GmbH, Düsseldorf
[HoCo99]
C. Horstmann, G. Cornell: Core Java Volume II-Advanced Features, Prentice-Hall, 1999
[JoVi96]
Übersetzt von John Viescas: Microsoft Access für Windows 95. ISBN 386063-121-7, 1996, Microsoft Press.
[JeRe02]
Egbert Jeschke / Helmut Reinke : ACCESS 2002 EINFÜHRUNG, ISBN:
3-902062-33-9, Redmonds Anwendertraining
[WiPe]
http://wikipedia.t-st.de/
[AbIt]
http://www.aboutit.de/index.html
[MS-Ac00] Microsoft Access 2002 Hilfe (10.2616.2625)
85
Erweiterungskonzepte für das aktive DBMS
Anhang
86
GUI
Erweiterungskonzepte für das aktive DMS ARTA
trigger name
CREATE TRIGGER
priority
Anhang
deadline
trigger interval
START ON
date
time
AT
END ON
date
AT
time
trigger event type
modification event type
modification type
trigger action time
INSERT
BEFORE
ON
DELETE
AFTER
table name
UPDATE
FOR EACH ROW
FOR EACH STATEMENT
REFERENCING
NEW
ROW
AS
tupel name
OLD
STATEMENT
AS
relation name
absolute time event type
ON
date
AT
time
periodic time event type (period)
SEE NEXT PAGE
WHEN
condition
(DO)
action
Seite A 87
Erweiterungskonzepte für das aktive DMS ARTA
Anhang
trigger event type
modification event type
absolute time event type
periodic time event type (period)
minutes event type
minutes
EVERY
MINUTES
hours event type
2digit
EVERY
minutes
HOURS AT
MINUTES PAST
days event type
3digit
EVERY
AT
time
weeks event type
2digit
EVERY
WEEKS ON
day of week
AT
time
months event type
2digit
EVERY
EVERY
MONTHS ON
day of week
ordined 1stTo5th
day of week
ordined digit day
DAY
AT
time
years event type
EVERY
2digit
ordined day
ordined number
WHEN
condition
YEARS ON
month of year
day of week
(DO)
AT
IN
month of year
time
action
Seite A 88
Herunterladen