206
Diplomarbeit Spezifikation und Analyse von Triggern zur Integritätsüberwachung Claudia Wehrhahn Matrikelnummer 1443433 Betreuer: Prof. Dr. U. Lipeck Institut für Informatik Universität Hannover 19. Februar 1996

Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Diplomarbeit

Spezifikation und Analyse von Triggern

zur Integritätsüberwachung

Claudia WehrhahnMatrikelnummer 1443433

Betreuer: Prof. Dr. U. LipeckInstitut für InformatikUniversität Hannover

19. Februar 1996

Page 2: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Zusammenfassung:

Aktive Datenbanksysteme unterstützen Trigger-Mechanismen, mit denen situations-bezogene Reaktionen realisiert werden können. Trigger werden, neben derAutomatisierung von Abläufen, u. a. zur Integritätsüberwachung eingesetzt. EinTrigger besteht im allgemeinen aus 3 Teilen, einem Ereignis (typischerweise eineÄnderungsoperation auf einer Relation), einer oder mehrerer Bedingungen undeiner Aktion. Beim Eintreten des Ereignisses wird die Bedingung des Triggersgetestet, und falls diese erfüllt ist, die Aktion ausgeführt. Sogenannte verzögerteTrigger werden erst am Ende einer Transaktion, d.h. nach einer Menge vonÄnderungsoperationen, aktiviert.

Für den Benutzer liegt die Problematik verzögerter Trigger in einem klarenVerständnis ihrer Ausführung und möglicher Interaktionen zur Laufzeit. Durch dieAktion eines Triggers können Datenänderungen vorgenommen werden, auf die einoder mehrere andere Trigger reagieren. Durch diese Aktionen wiederum könnenweitere Trigger ausgelöst werden.

Ziel dieser Arbeit ist es, Kriterien sowie ein Werkzeug für die Analyse von Triggernzu entwickeln. Zu einer gegebenen Menge von Triggern ist zu bestimmen, ob esmöglich ist,

• daß sich die Trigger gegenseitig aufrufen und dann deren Ausführungterminiert und

• ob der Endzustand von der Ausführungsreihenfolge der Trigger unabhängigist (Konfluenz).

Die Implementierung des Analyseverfahrens basiert auf den im DBMS Oraclevorhandenen Triggermechanismen und einer in einer vorangegangenen Studien-arbeit entwickelten Simulation verzögerter Trigger.

Page 3: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Bedanken möchte ich mich hier noch bei denjenigen, die mirbei der Durchführung meiner Diplomarbeit hilfreich waren.Herr Prof. Dr. Udo Lipeck hat mir besonders durch seine sehrgute Betreuung geholfen. Mit inbegriffen seien die regel-mäßigen Gespräche über den Stand der Arbeit, seine Änder-ungsvorschläge, seine Hinweise und Anregungen. HerrnMichael Gertz möchte ich für die Möglichkeit der Diskussionüber Teile der Arbeit, seinem Interesse an der Arbeit und fürdie Hilfe bei der Auswahl der Materialien danken. Profitierenkonnte ich auch von seinem Grundwissen über das SystemStarburst. Herrn Stefan Rollert sei Dank für die Gespräche, dieich mit ihm über die Arbeit führen konnte, und fürLösungsvorschläge von Problemen, auf die ich im Laufe derProgrammierung gestoßen bin.

Page 4: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

i

Inhaltsverzeichnis

1 Einleitung 11.1 Aktive Datenbankmanagementsysteme 11.2 Problematik 21.3 Ziel der Arbeit 2

2 Grundlagen der Integritätsüberwachung 32.1 Allgemeines 32.2 Die Datenbank 5

2.2.1 Operationsblöcke 52.2.2 Beispiele zur Semantik von Operationen 10

2.3 Trigger 122.3.1 Allgemeines 122.3.2 Die Syntax der Trigger 132.3.3 Formate von Triggern 142.3.4 Die Ausführungsmodi der Trigger 152.3.5 Trigger in PL/SQL 172.3.6 Beispiele 18

2.4 Existierende Systeme 222.4.1 Das STARBURST Regel-System 222.4.2 Das Triggersubsystem 282.4.3 Analyse und Vergleich der Systeme 31

3 Analyse von Triggermengen 393.1 Eigenschaften von Triggermengen 39

3.1.1 Grundlage für weitere Beispiele 403.1.2 Beispiele 41

3.2 Ausführungsgraphen 433.2.1 Das Zeichnen von Ausführungsgraphen 433.2.2 Beispiele von Ausführungsgraphen 44

3.3 Terminierung 553.3.1 Kriterien für globale Terminierung 553.3.2 Kriterien für lokale Terminierung 57

3.4 Konfluenz 573.4.1 Mengen 593.4.2 Analyse der Konfluenz 613.4.3 Die Anwendung der Konfluenz-Analyse 723.4.4 Partielle Konfluenz 72

Page 5: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Inhaltsverzeichnis ii

4 Systemanforderungen 754.1 Die Analyse zur Entwurfszeit 76

4.1.1 Terminierung 764.1.2 Konfluenz 77

4.2 Die Analyse zur Ausführungszeit 784.2.1 Terminierung 78

4.3 Entstehendes Tool 81

5 Das Triggersubsystem 835.1 Programmbeschreibung des vorhandenen TSS 83

5.1.1 Programmablauf 845.1.2 Die Umsetzung auf Oracle7 85

5.2 Erweiterungen im TSS 865.2.1 Programmablauf 875.2.2 Prioritäten 885.2.3 Die Analyse zur Entwurfszeit auf Terminierung 905.2.4 Die Analyse zur Entwurfszeit auf Konfluenz 905.2.5 Die Analyse zur Ausführungszeit auf Terminierung 91

6 Programmbeschreibung des erweiterten TSS 936.1 Vorhandene Module des TSS 93

6.1.1 Überblick 936.1.2 Die Headerdatei main.h 936.1.3 Das Modul main_and_oracle.pc 946.1.4 Das Modul head_and_body.c 956.1.5 Das Modul my_commit.c 966.1.6 Das Modul errors.c 96

6.2 Erweiterte Module des TSS 976.2.1 Die Headerdatei main.h 976.2.2 Das Modul main_and_oracle.pc 996.2.3 Das Modul head_and_body.c 1006.2.4 Das Modul my_commit.c 1016.2.5 Das Modul errors.c 101

6.3 Neue Module für das TSS 1026.3.1 Übersicht 1026.3.2 Das Modul help_tools.c 1026.3.3 Das Modul terminate.c 1046.3.4 Das Modul confluence.c 105

7 Erweiterungsmöglichkeiten 1077.1 TSS 1077.2 Terminierungs- und Konfluenzanalyse 108

Literaturverzeichnis 109

Page 6: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Inhaltsverzeichnis iii

AnhangAnhang A: Tabellen und Triggerdefinitionen zu den Beispielen aus

Kapitel 3112

Anhang B: Ausführungsgraph zu Beispiel 5 aus Kapitel 3 116Anhang C: Benutzerhandbuch zum erweiterten TSS 120Anhang D: Beispiele zur Analyse der Terminierung und Konfluenz im

erweiterten TSS128

Anhang E: Beispiel von Triggern, die sich gegenseitig aufrufen 140Anhang F: Der Programmcode des erweiterten TSS 143

Page 7: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

1

Kapitel 1

Einleitung

1.1 Aktive Datenbankmanagementsysteme

Konventionelle Datenbankmanagementsysteme (DBMS) sind passiv, da dieAusführung von Befehlen oder Transaktionen ausschließlich durch Benutzer oderApplikationsprogramme ausgelöst wird. Viele Anwendungen erfordern aber, daß einDBMS in bestimmten Situationen selbständig reagieren kann. Durch dieseFunktionalität wird ein DBMS zum aktiven DBMS. Kern eines jeden aktiven DBMSsind Regeln, die sich in der Event-Condition-Action (ECA)-Notation beschreibenlassen. Danach besteht eine Regel aus einer Ereignis-, einer Bedingungs- und einerAktionskomponente, die genau dann ausgeführt wird, wenn das Ereignis eintritt unddie Bedingung erfüllt ist.

Mehrere kommerziell verfügbare DBMS bieten Trigger-Mechanismen an, mit denenein aktives Verhalten unterstützt wird. Beispiele dafür sind Oracle, Sybase, Informix,Ingres. Hierbei handelt es sich um relationale DBMS, die auch Grundlage dieserArbeit sind.

Forschungsprojekte von aktiven DBMS basieren sowohl auf relationalenDatenbanken (DBen), wie z. B. Starburst [2, 6, 7], POSTGRES [34] und Ariel [20],als auch auf objekt-orientierten DBen, wie z. B. HiPAC [30, 31] und Ode [20].

Das Gebiet der aktiven DBMS bildet eins der bekanntesten Bereiche der DB-Forschung. Erste Ansätze aktiver DBMS sind bereits 1983 in [9] erschienen. DieMöglichkeiten akiver DBMS finden heute zunehmend in kommerziellen SystemenAnwendung, und es ist zu erwarten, daß die Technologie aktiver Datenbanken einezentrale Komponente der nächsten Generation von DBMS und deren Anwendungendarstellen wird.

Durch aktive DBMS wird die Funktionalität der passiven Gegenstücke erweitert,indem leistungsfähige Funktionen ausgeführt werden, die in passiven DBMS inApplikationen untergebracht werden müssen. Dadurch können aktive DBMSAufgaben verrichten, wofür in passiven DBMS speziell angefertigte Subsystemeerforderlich sind.

Page 8: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 1 Einleitung 2

Die Überwachung von Integritätsbedingungen (IBen) mit Hilfe von Triggern inaktiven DBMS findet immer größeren Einsatz. Unter dem Begriff Integritäts-bedingungen wird im Bereich von DBen ein Mechanismus verstanden, der dieEingabe von unzulässigen Datenwerten verhindern soll. IBen spezifizierensemantisch korrekte DB Inhalte, die nach jeder Transaktion, d.h. Folge vonDatenänderungsoperationen, erfüllt sein müssen. IBen ergeben sich aus denApplikationen, denen die DB zugrunde liegt. Aufgestellt werden die IBen durchBenutzer oder den DB-Entwerfer. Sie bezeichnen das gewünschte aktive Verhaltenund somit wie das System auf Integritätsverletzungen reagieren soll. (vgl. [28]).

1.2 Problematik

Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevantenEreignisse, durch das DBMS überwacht. Für jeden Trigger, dessen Ereignis in einerTransaktion vorkommt, wird die Bedingung überprüft, und wenn die Bedingung wahrist, wird die Aktion ausgeführt. Die Details der Spezifikation und Ausführung vonTriggern gestalten sich erheblich komplizierter, als es auf den ersten Blick erscheint:Am Ende einer Transaktion, also nach einer Menge von Änderungsoperationen, sindeventuell mehrere Trigger ausgelöst. Es stellt sich daher die Frage, ob der DB-Endzustand von der Ausführungsreihenfolge der Trigger unabhängig ist (Konfluenz).Vermeiden ließe sich dies durch die Vergabe von Prioritäten. Der Benutzer legt alsoanfangs bereits die von ihm gewünschte Ausführungsreihenfolge der Trigger fest.Weiterhin ist zu überlegen, ob bei der Ausführung der Trigger Zyklen entstehenkönnen, ob sich die Trigger also eventuell immer gegenseitig aufrufen und somitderen Ausführung nicht terminiert.

1.3 Ziel der Arbeit

Ziel der Arbeit ist es, Analysemöglichkeiten für die Terminierung und Konfluenz vonTriggermengen aufzuzeigen. Dazu werden in Kapitel 2 die Grundlagen derIntegritätsüberwachung zusammengefaßt. Außerdem wird dort die Arbeitsweisesogenannter verzögerter Trigger anhand des DB Systems Starburst erläutert, sowiedas im Rahmen einer Studienarbeit entstandene System zur Simulation vonverzögerten Triggern (TSS) skizziert. Weiterhin werden auch Begriffe, die zumVerständnis der in Kapitel 3 erläuterten Analyse von Triggermengen, erklärt. Kapitel3 stellt die Probleme, die sich bei der Ausführung der Trigger ergeben können dar,und liefert hierzu Analysemöglichkeiten. Kapitel 4 zeigt die Anforderungen an einSystem auf, wie die in Kapitel 3 hergeleiteten Analysemöglichkeiten automatisiertwerden können. Kapitel 5 beschreibt, nach weiteren Erläuterungen zum TSS, welcheÄnderungen vorgenommen werden mußten, um die in Kapitel 3 und 4 erläuterteAnalyse durchzuführen. Kapitel 6 ist eine Programmbeschreibung der in Kapitel 5vorgenommen Änderungen und Erweiterungen, das zugehörige Benutzerhandbuch.ist im Anhang zu finden. Abschließend werden in Kapitel 7 die Erweiterungs-möglichkeiten aufgezeigt, wie die entstandene Analyse und das TSS ausgebautwerden könnten, um die eventuell unvorhersehbaren Interaktionen der gegebenenMenge von Triggern dem Benutzer zu veranschaulichen.

Page 9: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 2 Grundlagen der Integritätsüberwachung 3

Kapitel 2

Grundlagen der

Integritätsüberwachung

Ziel dieses Kapitels ist es, die Semantik der Trigger zu erläutern. Einleitend dazuwird der Sprachgebrauch festgelegt, der in dieser Arbeit verwendet wird. DenAbschluß bilden Beispiele existierender Systeme.

2.1 Al lgemeines

Integritätssicherung und -überwachung in Datenbanken hat generell zu tun mit derKorrektheit der gespeicherten Daten im Hinblick auf eine gegebene Anwendungbzw. mit der korrekten Repräsentation einer Anwendung in einer DB. Der Begriff„Integrität“ ist in der Literatur in mehreren Zusammenhängen zu finden. Bei„Integrität“ handelt es sich aber immer um Überwachungsfunktionen in einer DB.

Man unterscheidet:

• semantische Integrität (oder auch Konsistenz): Die Erhaltung der logischenKorrektheit einer DB bei Änderungen durch (berechtigte) Benutzer. Imfolgenden wird von Integritätsüberwachung gesprochen (englisch:„integrity“).

• Zugriffsintegrität: Schutz der Daten vor dem Zugriff unberechtigter Benutzer(englisch: „security“).

• Ablaufintegrität: Die Verarbeitung gleichzeitiger Zugriffe mehrerer Benutzerauf eine DB (englisch: „concurrency control“).

• physische Integrität: Die Wiederherstellung von Daten nach Zerstörungdurch technische Fehler (englisch: „recovery“).

Die Aufgabe der Integritätsüberwachung könnte dem Benutzer überlassen werden;dies ist jedoch unbefriedigend, da das Datenbankmanagementsystem dann keineeigene Kontrolle über die Konsistenz der DB hat. Viele Anwendungen erfordernaber, daß ein DBMS in bestimmten Situationen selbständig reagieren kann. EinBeispiel für eine solche Anwendung ist ein Programm, das Materialbeständeüberwacht. Fällt der Bestand eines Gegenstandes unter einen Mindestwert, so wird

Page 10: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 2 Grundlagen der Integritätsüberwachung 4

eine Neubestellung durchgeführt. In einem passiven DBMS muß diese Aufgabe vomBenutzer übernommen werden, da derartige Situationen nicht automatisch erkanntwerden können.

Möglichkeiten zur Integritätsüberwachung werden durch das Aufstellen vonIntegritätsbedingungen gegeben. Das DBMS wird dabei im allgemeinen mit einemspeziellen Monitor ausgestattet, welcher die Integritätsbedingungen überwacht. Diesbedeutet insbesondere, daß „beliebige“ Transaktionen gefahren werden dürfen unddas DBMS diejenigen zurückweist, welche die Datenbank-Konsistenz verletzen. Einsolcher Monitor ist generell unabhängig von einem speziellen DB-Schema, so daßwährend eines Schema-Entwurfs auch Eingaben für den Monitor erzeugt werdenmüssen. Die Vorteile zu diesem Überwachungsmechanismus sind offensichtlich. Essind nicht nur beliebige Transaktionen erlaubt, sondern auch Anwendungs-programme und ad hoc-Benutzer brauchen sich um die Integritätskontrolle nicht zukümmern.

Definition: Arten von IBen

Eine IB kann betreffen:

a) DB-Zustände σ (einzeln)

b) DB-Änderungen, also Zustandsübergänge(σold, σnew) oder

c) ganze DB-Entwicklungen, also Zustandsfolgen (σinitial, σ1, σ2, ... , σcurrent,..)

Dementsprechend werden IBen als

a) statisch

b) transitional

c) temporal bzw.

b/c) dynamisch bezeichnet.

Mit statischer Integrität ist die logische Korrektheit der vorkommenden DB-Inhaltegemeint, die dynamische Integrität bezieht sich auf die Korrektheit des Verhaltensvon DBen, d.h. diese bezieht sich auf Änderungen oder Entwicklungen von DB-Inhalten.

Temporale IBen werden im folgenden nicht betrachtet, da sie nach [25] auftransitionale IBen zurückgeführt werden können.

Definition:

DB-Zustände / Zustandsübergänge / Zustandsfolgen, in denen sämtliche in einemDB-Schema aufgestellten statischen / transitionalen / temporalen IBen gültig sind,heißen zulässig (oder korrekt).

Page 11: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 2 Grundlagen der Integritätsüberwachung 5

2.2 Die Datenbank

Grundlage für die später definierten Operationen sei eine relationale DB-Struktur: Essei eine Menge von Tabellen (bzw. Relationen) definiert. Jede Tabelle hat eineMenge von Spalten (bzw. Attributen) mit Spaltenname und Spaltentyp. In einemgegebenen DB-Zustand enthält jede Tabelle eine bestimmte Menge von Tupeln(null, ein oder mehrere), wobei jedes Tupel einen einzigen Wert (oder Null) in jederSpalte jeder Tabelle hat. Doppelte Tupel sollen nicht in der Tabelle vorkommen.

Vom System sei jedes Tupel, in jeder Tabelle, durch einen Tupel-Identifier (imfolgenden TI) ausgezeichnet. Dieser TI ist ein nicht benutzbarer Wert, der das Tupelund die entsprechende Tabelle eindeutig kennzeichnet.

����������� ���������� � ��������� ������� ����������� ���

2.2.1 Operationsblöcke

In einem relationalen DBS ist es dem Benutzer (oder Anwendungen) erlaubt,mehrere DB-Operationen zusammenzufassen und auch zusammen auszuführen.Wir betrachten ein Modell, in dem diese Operationen in Operations-Blöcke (imfolgenden Op-Block) gruppiert werden. Es werde angenommen, daß diese Op-Blöcke immer enden und nur als Ganzes ausgeführt werden. Während derAusführung eines Op-Blockes können Tupel eingefügt, gelöscht oder geändertwerden; genauer gesagt ist dies eine nichtleere Folge von SQL-Anweisungen(insert, delete, update1 ), die folgender Syntax genügen:��������������� ���! ��"$#��%���'&(��" #��)���'&*�����*&+� " #��%���

��" #��)��� ���! ,.-�/��0���%���'&21� � ���)���'&43��1�����5�)���,.-�/��0���)��� ���!

,�-�/��0�6,.-$���87����.9�$����:; ���3�/87 ; ��< ; ��<*�����*< ; �=:,�-�/��0�6,.-$���87����.9�$����:>?/� ���$���)���A@

1� � ��5�)��� ���! 1�$��$��CB�0.��D67��E��9�$�����:FHGEI �0.87���1�,�-�J$3�-�J�:�K3��1����5�)��� ���! 3���1�����87��E��9�$�����:/� �L7�� ��������-�:8 M7�NE3/�1�0�O������:FHGEI �0.87P���1�,.-�J 3�-�J*:�K/� ��� ���)��� ���! /�$���� �L7�����������-�:B 0.��D67��E�.9� ����:FHGEI �0.87P���1�,.-�J 3�-�J*:�K

1 Es werden hier keine /�$���� �

-Befehle betrachtet, da damit keine Änderungen an den Daten der DBvorgenommen werden.

Page 12: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 2 Grundlagen der Integritätsüberwachung 6

Die Bedingung der Q�R S�R$T�R5U5VXWY�Q�Z�T�R - und [�R SR�\$T -Operationen kann beliebig komplexsein, und weitere [�R$S�R�\$T -Operationen enthalten. Fehlt die Bedingung, so entsprichtder Bedeutung die Aussage ]_^E`R�a�R6T aWR “.

Im folgenden soll nun das Verhalten der SQL-Anweisungen unter Beachtung desgegebenen DB-Zustands beschrieben werden. Für jede Operation wird eine Mengedefiniert, die u. a. die TI der von der Operation betroffenen Tupel, beinhaltet. DieseMengen werden mit Menge der TI (im folgenden TIM2 ) bezeichnet. Für dieÄnderungsoperation ( WY�Q�Z�T�R5U)b�Y ) beinhaltet die TIM auch die Spalten, die geändertwerden. Weiterhin stehen in dieser Menge folgende Werte:

• c.d�[�R�aT�U)b�Y mit Werten: Ein neues Tupel mit den Werten e�f�g�V4f$hiV6j�j�jkVlf�d�m wirdzur betreffenden Tabelle hinzugefügt. Die TIM enthält genau die TI deseingefügten Tupels.

• c.d�[�R�aT�U)b�Y mit select-Op: Die [�R SR�\ T�U)b�Y wird ausgewertet und produziert eineMenge von Tupeln. Jeder Tupel wird in die bezeichnete Tabelle eingefügt.Die TIM enthält die TI der eingefügten Tupel.

• Q�R SR T�R5U)b�Y : In der angegebenen Tabelle werden die Tupel gelöscht, auf diedie Aussage zutrifft. Die zugehörigen TI kommen in die TIM.

• W�Y�Q�ZT�R5U)b�Y : Von den Tupeln in der entsprechenden Tabelle, die die Aussageerfüllen, werden TI in die TIM geschrieben, außerdem werden für jedesTupel die entsprechenden Ausdrücke ausgewertet und die Änderungenvorgenommen. Die TIM enthält die TI, die jedes geänderte Tupel und dieausgewählte Spalte enthalten.

Betrachten wir nun einen b�Y�U�n�So�\�p : Die Ausführung des b�Y�U�n�So�\�p�R�[ beginnt in einembestimmten DB-Zustand. Jede Operation in dem b�Y�U�n�S�o�\�p wird wie oben beschriebenausgeführt und produziert einen neuen DB-Zustand, der der jeweils folgendenOperation zugrundeliegt. Da die Operationsblöcke nur als Ganzes ausgeführtwerden, brauchen die Zwischenzustände der DB nicht betrachtet zu werden,sondern nur der Zustand, der durch Ausführen der gesamten Menge vonOperationen entsteht. Zum Beispiel können sich Operationen in einem b�Y�U�n�S�o�\�paufheben. Da dies keine Änderung an den Daten zur Folge hat, sind wir nicht andiesen Operationen interessiert.

Definition:

Die Ausführung eines Operations-Blockes wird als Transition (dt.: Übergang)bezeichnet. Das Symbol für eine Transition ist T und überführt einen DB-Zustand Sin einen neuen DB-Zustand S’. Graphische Darstellung:

2 Die TIM wird später vor allem noch dazu benutzt, um die Semantik von Operations-Blöcken genauzu definieren.

Page 13: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 2 Grundlagen der Integritätsüberwachung 7

Definition:

Die Menge E(B)=[I,D,U] wird als Nettoeffekt der Transition T nach Ausführung desOperationsblockes B bezeichnet und besteht aus folgenden Elementen:

• wird ein Tupel mehrere Male in T geändert, so erscheint nur die gesamteÄnderung in U.

• wird ein Tupel erst in T eingefügt, dann geändert, so erscheint nur dasgeänderte Tupel als Einfügung in I.

• wird ein Tupel erst in T geändert und dann gelöscht, so erscheint nur dieLöschung des Originaltupels in D.

• wird dasselbe Tupel erst gelöscht und dann in T eingefügt (oder umgekehrt),so erscheint gar nichts in E(B).

In der Menge E(B)=[I,D,U] enthalten I und D die Menge von TI und Tupeln, U enthältdie Menge von (TI und Tupel)-Paaren:

• i ∈ I ist von der Form <TI, tuplenew>

• d ∈ D ist von der Form <TI, tupleold>

• u ∈ U ist von der Form <TI, tupleold, tuplenew>

Bemerkung:

Man beachte, daß ein gegebenes Tupel in höchstens einer der Mengen vorkommenkann.

Im folgenden sollen Transitions-Effekte berechnet werden: Dazu sei angenommen,daß ein Op-Block B1 ausgeführt und eine neue Transition T1 mit dem NettoeffektE(B1)=[I1,D1,U1] erzeugt wird. Dann wird ein Op-Block B2 ausgeführt, der eineTransition T2 mit dem Nettoeffekt E(B2)=[I2,D2,U2] erzeugt.

D.h. durch den Nettoeffekt E(B1) der Transition T1 kommt man vom DB-Zustand S inden neuen DB-Zustand S’. Danach kommt man durch die Transition T2 mit demNettoeffekt E(B2) in den DB-Zustand S’’.

Nun sind wir aber an dem Nettoeffekt interessiert, der entsteht, wenn man die beidenTransitionen als eine ganze Transition ausführt:

Page 14: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 2 Grundlagen der Integritätsüberwachung 8

Definition:

Seien E(B1)=[I1,D1,U1] und E(B2)=[I2,D2,U2] wie oben Transitionseffekte. DieZusammensetzung der beiden Nettoeffekte E(B1;B2)=[I1,D1,U1] ° [I2,D2,U2] ist derNettoeffekt [I,D,U], wobei gilt:

• I = (I1 ∪ I2) - D2 I beinhaltet also alle TI der Tupel, die durch eine der beidenTransitionen eingefügt wurden. Es müssen aber noch die Tupel abgezogenwerden, die in der zweiten Transition gelöscht wurden. Die Tupel, die in derersten Transition gelöscht wurden sind nicht abzuziehen, da sie nicht in I1oder I2 vorkommen können.3

• D = (D1 ∪ D2) - I1. D beinhaltet alle TI der Tupel, die in einer der beidenTransitionen gelöscht wurden, jedoch nicht die TI, deren Tupel in der erstenTransition eingefügt, aber in der zweiten Transition wieder gelöscht wurden.

• U = (U1 ∪ U2) - (D2 ∪ I1). U beinhaltet alle TI und zugehörige Werte derTupel, die in einer der beiden Transitionen geändert wurden, jedoch ohnedie Tupel, die in der zweiten Transition gelöscht, oder in der erstenTransition eingefügt wurden.

Beispiele:

Beispiele zur Bildung des Nettoeffekts E(B1) ° E(B2).auf Tupel-Basis:

<TI,t> ∈ I1, <TI’,t’> ∈ I2 ⇒ <TI,t>, <TI’,t’> ∈ I,

<TI,t> ∈ I1, <TI,t,t’> ∈ U2 ⇒ <TI, t’> ∈ I,

<TI,t> ∈ I1, <TI’,t’,t’’> ∈ U2 ⇒ <TI, t> ∈ I, <TI’,t’,t’’> ∈ U,

<TI,t> ∈ I1, <TI,t> ∈ D2 ⇒ Tupel erscheint weder in I noch in D,

<TI,t,t’> ∈ U1, <TI,t’> ∈ D2 ⇒ <TI,t> ∈ D,

<TI,t,t’> ∈ U1, <TI’,t’,t’’> ∈ U2 ⇒ <TI, t,t’’> ∈ U,

Der Gesamteffekt der Transitionen ist so definiert, daß es derselbe Nettoeffekt wäre,als ob man jede Transition nacheinander ausführt. D.h. mit Hilfe der Definition kannman beweisen, daß gilt:

E(B1;B2) = E(B1) ° E(B2).

Die obige Definition erlaubt uns Transitions-Effekte formal zu beschreiben. Sei einOperationsblock B = op1 ; op2 ; ... ;opn gegeben. Dann ist

E(B) = E(op1) ° E(op2; ... ;opn)

Durch Induktion und unter der Annahme, daß ° assoziativ ist, kann man schreiben:

E(B) = E(op1) ° E(op2) ° ... ° E(opn)

D.h. man hat hierdurch die Möglichkeit den Nettoeffekt der Folgen von DB-Operationen zu beschreiben.

3 Die Tupel, die in B1 eingefügt, und in B2 geändert wurden, werden mit berücksichtigt, da die TIeindeutig sind.

Page 15: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 2 Grundlagen der Integritätsüberwachung 9

Definition:

Eine Transaktion ist eine Folge von Operationsblöcken,

• die die DB von einem zulässigen Zustand wieder in einen zulässigenZustand überführt (bzgl. der statischen Korrektheit der DB)

• die einen zulässigen Zustandsübergang bewirkt (bzgl. der transitionalenIBen),

• und die nur als Einheit wirksam werden kann.

Die letzte Eigenschaft heißt auch „Alles oder Nichts“ oder „Atomaritäts“-Prinzip.

Definition:

Der Nettoeffekt der Transaktion wird durch das DBMS in Transistionstabellengesichert. D. h. während der Ausführung einer Transaktion werden sogenannteDifferenztabellen q.r�s�t�uv�t�w , w�t xt v�t�w und y�z�w�{v�t�w zu jedem |�z�}�~�x������ mitgeführt. DieseTabellen enthalten den Nettoeffekt E(B) der Transaktion B. Es gilt damit (R sei einTabellenname, c sei eine Spalte):

• In der Tabelle q.r�s�t�u�v�t�w�� stehen die Tupel der Menge I. Das sind die Tupel,die durch die Transition eingefügt wurden. Ist die Menge I leer, so auch dieTabelle q.r�s�t�u�v�t�w � .

Schema der Tabelle q.r�s�t�u�v�t�w�� : Die Tabelle hat neben den Spalten derTabelle R noch eine Spalte für den TI.� �E���������*�����P�.���E��������� ���

• In der Tabelle w�t x�t$v�t�wP� stehen die TI und alte Werte der Menge D. Das sinddie Tupel, die durch die Transition gelöscht wurden. Ist die Menge D leer, soist es auch die Tabelle w�t xt vt�wC� .

Schema der Tabelle w�t$x�t$v�t�w�� : Die Tabelle hat neben den Spalten derTabelle R noch eine Spalte für den TI.� �E���������*�����P�.���E��������� ���

• In den Tabellen y�z�w�{vt�wC� stehen die Tupel und TI der Menge U. Das sind diein der Transition geänderten Tupel. In der Tabelle yz�w�{�v�t�w�� stehen nebendem TI noch die Werte des Tupels der Tabelle R vor der Änderung und dieTupel der Tabelle R nach der Änderung. Ist die Menge U leer, so ist auchdie Tabelle y�z�w�{vt�wC� leer.

Page 16: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 2 Grundlagen der Integritätsüberwachung 10

Schema der Tabelle �������� ��¢¡ : Die Tabelle hat die Spalten der Tabelle R indoppelter Ausführung: Zum einen mit dem Präfix £ ¤���¥ zur Speicherung deralten Werte vor der Ausführung des Update-Befehls, zum anderen denPräfix ¦� �§�¥ zur Speicherung der neuen Werte nach der Ausführung desUpdate-Befehls. Weiterhin ist noch eine Spalte für den TI vorgesehen.¨ ©Eª�«�¬�­�®*¯�­�°P±.ª�²E­�«�«�­�³´¶µ%¬L¯�­�´P·�°�¸5¹�µ»ºX¼�«»¯½

¨ ©Eª¾«H¬�­�®M¯ ­�°P±.ª�²E­¾«�«�­�³´¿µ%¬L¯�­�´k· °�¸5¹�µ»ºP®�­�À�½Á�Â

Die o.g. logischen Tabellen

• Ã.¦�Ä� �Å� ��C¡• ��  ¤  �� ��C¡• ��������� ��C¡

werden Transitionstabellen genannt. Transitionstabellen erlauben während derAusführung der Trigger den Zugriff auf eine Teilmenge des vorigen DB-Zustands.

D.h. es gilt:

¦� �§X¡LÆÇ£$¤��C¡PÈÉ��  ¤  �� ��C¡PÈÊ�������� ��¶Ë»£$¤�6¡ÍÌPÃ.¦�Ä� �Å��� ��6¡ÍÌC���������� ��¿Ë»¦� �§X¡(Mit updated.old R sind die Tupel der Tabelle R vor der Änderung gemeint, mitupdated.new R sind die Tupel der Tabelle R nach der Änderung gemeint.)

WICHTIG: Zu jeder Tabelle gibt es die 3 Transitionstabellen !

2.2.2 Beispiele zur Semantik von Operationen

Gezeigt werden soll nun, wie sich die Daten in der DB nach der Ausführung von DB-Operationen verhalten. Dieser Abschnitt soll nur zur Verdeutlichung desNettoeffektes dienen, und der dazugehörigen Mengen. Erst wird anhand einerOperation veranschaulicht, wie sich die Daten verhalten. Danach werden zweiOperationen hintereinander ausgeführt und deren Nettoeffekt betrachtet.

Besteht nun der Op-Block aus nur einer einzigen SQL-Operation ω auf eineneinzigen Tupel t, so kann der DB-Zustand σ nach der Ausführung des Op-Blockesnoch recht einfach beschrieben werden:

ω(R,t) ⇒ σ(R) = σ(R) ∪ {t} falls ω ≡ Ã.¦�Ä� �Å��ω(R,t) ⇒ σ(R) = σ(R) - {t} falls ω ≡ ��  ¤  � ω(R,t,t’) ⇒ σ(R) = σ(R) ∪ {t’} - {t} falls ω ≡ ��������  und t.TI = t’.TI

Besteht der Op-Block aber nun aus 2 SQL-Befehlen auf je einem Tupel, so wird dieDarstellung schon gleich etwas komplizierter. Zur Vereinfachung der Darstellungwurde eine Tabelle gewählt. Die Tabelle ist so zu lesen, daß erst der SQL-Befehl inder Spalte links, danach der SQL-Befehl in der Zeile oben ausgeführt wird. DerSchnittpunkt der Zeile und Spalte liefert das Ergebnis nach Ausführung des Op-Blockes:

Page 17: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

2.1.

ÝÞ�ß�à�á$â(R,t’’) ã3ä�å�æ â3à (R,t’’,t’’’) mit t’’.TI = t’’’.TI å à�ç3à�â3à (R,t’’)

t.TI ≠ t’’.TI t.TI = t’’.TI t.TI ≠ t’’.TI t.TI = t’’.TI t.TI ≠ t’’.TIÝ&Þ�ß�à�á�â(R,t) σ(R) ∪ {t} ∪ {t’’} σ(R) ∪ {t’’’} σ(R) ∪ {t} -

{t’’} ∪ {t’’’}σ(R) σ(R) ∪ {t} - {t’’}

ã3ä�å�æ â$à (R,t,t’) mitt.TI = t’.TI

σ(R) - {t} ∪ {t’} ∪ {t’’} σ(R) - {t} ∪{t’’’}

σ(R) - {t} ∪{t’}- {t’’} ∪{t’’’}

σ(R) σ(R) - {t} ∪ {t’} - {t’’}

å à�ç3à�â$à (R,t) σ(R) - {t} ∪ {t’’} σ(R) - {t} ∪ {t’} - {t’’} ∪ {t’’’} σ(R) - {t} * σ(R) - {t} - {t’’}

Die Fälle Ý&Þ�ß�à�á�â

(R,t’’) mit t.TI = t’’.TI können nicht vorkommen, weil die TI eindeutig sind.Die Fälle update (R,t’’,t’’’) mit t’’.TI ≠ t’’’.TI können nicht vorkommen, weil es nicht definiert ist.* Es wird zwei Mal derselbe Tupel gelöscht.

Page 18: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 2 Grundlagen der Integritätsüberwachung 12

Bemerkung

Wie aus der Schreibweise der Mengen I, U, D ersichtlich wird, wurde die Syntaxanhand von Tupel-Mengen hergeleitet. Sprachen wie SQL, PL/SQL, ORACLE-SQLsind aber mächtiger, als nur einzelne Tupel-Operationen hervorzurufen. In der Regelhandelt es sich hierbei um Mengen von SQL-Operationen, die in Mengen vonTupeloperationen aufgespalten werden müssen.

Schematisch:

STARBURST-SQL ORACLE-SQL

Folge von SQL-Operationen

Folge von Tupel-Operationen

Netto-Effekt

Z. B. wird die SQL-Operation Î�Ï$Ð�Ï ÑÏÓÒ�Ò�Ò�ÔEÕ�Ï�Ö.Ï γ in die Tupel-Operation ×�Î�Ï ÐÏ Ñ�ÏÙØ%ÑÚ?ÛEÜÎ�Ï ÐÏ ÑÏAØ%Ñ�Ý%ÛEÜ*Ò�Ò�Ò2ÞCß�à�Ö*áÐ�Ð�ÏCÑâÜ2Î�ã.Ï γ Ï�Öß�à�Ð�ÐÏ�ä umgewandelt.

Anhand dieser Tupelmengen kann erst dann der Nettoeffekt, wie oben beschrieben,werden.

2.3 T r igger

2.3.1 Allgemeines

Einfache Bedingungen, wie Primär- und Fremdschlüsselbedingungen, werden inSQL durch check- oder foreign-key Bedingungen überwacht. Diese Bedingungenwerden im Rahmen der Tabellendefinition mit angegeben. Komplexere Bedingungenkönnen dagegen hiermit gar nicht definiert werden. Im Gegensatz hierzu bietenTrigger eine prozedurale Technik zur Spezifikation und Überwachung vonIntegritätsbedingungen. Trigger sind sogar mächtiger als Bedingungen, denn diesesind im wesentlichen PL/SQL-Prozeduren. Jeder Trigger ist einer Tabellezugeordnet, und wird durch Änderungsoperationen wie Einfügungen, Löschungenoder Änderungen ausgelöst.

Im folgenden wird nicht auf check- oder foreign-key Bedingungen eingegangen, dasie, wie oben erwähnt, zur Integritätsüberwachung nicht ausreichen. Hierzu sei u.a.auf das Begleitmaterial zum ORACLE/SQL-Kurs (zur Vorlesung Datenbanksysteme[4] Kapitel 5.1) verwiesen.

Konventionelle DBen sind passiv: Sie führen Anfragen oder Transaktionen aus, dievom Benutzer oder einem Programm explizit angegeben wurden. Für einigeProgramme kann es jedoch von Interesse sein, auf gewisse Situationen gezielt zureagieren. Wie bereits in 2.1 angegeben, sollte zum Beispiel ein Inventar-Kontroll-System für Lagerbestände darauf reagieren, daß die Anzahl eines Artikels in demLager unter einem bestimmten Wert gesunken ist. Dieses Verhalten könnte auf zweiunterschiedliche Arten realisiert werden: Einerseits kann man Bedingungen in jedes

Page 19: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 2 Grundlagen der Integritätsüberwachung 13

Programm einfügen, daß die Daten in der DB ändert, was aber aus Sicht derSoftware Engineering schlecht ist, andererseits kann man die Bedingung, ob genugArtikel vorhanden sind, periodisch - z. B. alle 60 Minuten - abtesten, wobei man sichaber die Frequenz für das Testen gut überlegen sollte. Ist die Frequenz zu hoch,wird die Bedingung ständig getestet, ist sie zu niedrig, könnte die Bedingung leichtverletzt werden. Aktive DBen hingegen können auf bestimmte Situationen reagieren,und eine entsprechende Antwort auf Verletzungen der Bedingung geben. Diesesdynamische Verhalten wird durch Trigger realisiert, wodurch die DB zur aktiven DBwird.

Erste Ansätze zur Einführung von Triggern findet man in [15], erste Ansätze zuAktiven DBen in [9].

Trigger bestehen im allgemeinen aus drei (und je nach Funktionalität auch aus 4)Teilen: einem Ereignis, einer oder mehrerer Bedingungen, einer Aktion und einerMenge von Attributen. (ECA: Event-Condition-Action-Notation) Das Ereignisspezifiziert, wann der Trigger ausgelöst werden soll; die Bedingung bezeichnet eineAussage, die erfüllt sein muß, wenn die Aktion der ausgelösten Regel ausgeführtwerden soll.

Z. B. verwendet STARBURST eine SQL-ähnliche Syntax zur Definition:å æç è�é�çCæ�ê�ë�ç8ì�í�î�ï.ð�ñ$ò�ó)ô$õ�ö÷Eø ç�ù8ìEú�î.õ�ï�ð�ò�ï.û�öüÍýþ ì�ÿõ���ï�ò�ð���ò�ð�ö��é ø ç�ù8ì���í�ï��ò�ö

2.3.2 Die Syntax der Trigger

Trigger werden durch Transitionen ausgelöst, genauer gesagt durch die Ausführungeines �� �� ÿ��������õ�û . Hierbei werden nur die Nettoeffekte der Transition betrachtet.

2.3.2.1 Die Syntax des Ereignisses

Unter einem Ereignis versteht man eine Liste von DB-Transitionen, die bestimmteOperationen auf bestimmten Tabellen definieren. Die Syntax:ìEú�î�õ�ï.ð�ò�ï�û�ö �����

ì�ÿ ó.û�ï�û ��� î�ó�ò�û�ï�í�ï��ò�öì�ÿ ó.û�ï�û ��� î�ó�ò�û�ï�í�ï��ò�ö��î ì�ú�î.õ�ï.ð�ò�ï.û�öì�ÿ�ó�û�ï.û ��� î�ó.ò�û�ïí ï��ò�ö �����

ï.ò�û�õ�î�í�õ��kï�ò í�8ì � ó���õ�����õ�ö��õ���õ íõ�� ��î��ô6ì � ó���õ����õ�ö� ��óíõ��8ì � ó���õ����õ�ö

Man kann prüfen, ob ein Ereignis eingetreten ist, wenn es im Nettoeffekt derTransition erscheint, wenn also ein solches Tupel in den Transitionstabellen steht.

2.3.2.2 Die Syntax der Bedingung

Das Auslösen des Triggers alleine reicht nicht, um den Aktionsteil des Triggersauszuführen. Dazu muß auch die Bedingung des Triggers erfüllt sein. DieBedingung kann û�õ���õ�� í Operationen beinhalten, aber auch beliebig komplex sein(geschachtelte SQL-Anweisungen). Die Aussage muß sich auf den aktuellen DB-

Page 20: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 2 Grundlagen der Integritätsüberwachung 14

Zustand beziehen - den Inhalt der Tabellen zu dem Zeitpunkt, wenn die Bedingungausgewertet wird. Genauer: die Bedingung des Triggers soll sich auch auf dieÄnderungen beziehen, die den Trigger ausgelöst haben.

Bemerkung:

Ein Trigger kann sich in der Bedingung auf die Transitionstabellen beziehen unddiese z.B. in eine !�"�#�"�$�%'& Operation mit einbinden:

!�"�#�"�$�%)(�*,+'-�#�%�"�.�/0,1�2�354�4�47698 .�!�" 1 %�"�: %7%�;�- 1<6�4�4�4=?> " 1 "@(BA?C�!�!�-�D�"�/

Die Variable %�;�- 1 bezieht sich in der !�"�#�"�$�% und =?> " 1 " Aussage auf die logischeTabelle inserted t dieser Operation.

Die Syntax im formal:

(�E�"�: 8 .�D�C�.�D�/ F�F�G (�A?C�!�!'-�D�"�/�H

* bedeutet, daß sich die Aussage auch auf Transitionstabellen beziehen darf.

2.3.2.3 Die Syntax der Aktion

Die Aktion eines Triggers ist ein I�+J&�E�# 2 $'K , wie er in 2.2.1 definiert wurde. Dies ist alsoeine Aneinanderreihung von SQL-Anweisungen (in ORACLE: PL/SQL-Anweisungen). Wie auch in der Bedingung eines Triggers, kann es in der Aktionsinnvoll sein, sich auf die Änderungen zu beziehen, die den Trigger ausgelösthaben. Dazu werden eingebettete select - Operationen in dem Aktionsteilzugelassen, die sich auf Transitionstabellen beziehen können. Weiterhin wird in derAktion ein Rollback zugelassen. Formal:

(�AJKB% 8�2 .�/ F�F�G

2 +J&ML�# 2 $'K�H1�2 #�#�L'-�$'K* wie oben

Bemerkung:

Durch ein Rollback in der Aktion eines Triggers werden alle DB-Modifikationen, diein einer Transaktion getätigt wurden, rückgängig gemacht.

2.3.3 Formate von Triggern

Abbildung 1 Formate von Triggern

Page 21: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 2 Grundlagen der Integritätsüberwachung 15

Z. B. haben Starburst [6], Postgres [34], Oracle [4] und HiPAC [30, 31] separateSpezifikationsteile für Ereignis, Bedingung und Action (I). Andere Systeme bestehennur aus zwei Teilen: In OPS5 [32] wurden Ereignis und Bedingung zu einem Teilzusammengefaßt (II), in Sybase [35] und InterBase [33] wurden Bedingung undAktion zu einem Teil zusammengefaßt (III).

2.3.4 Die Ausführungsmodi der Trigger

Die Semantik eines Triggers bestimmt, wie sich der Trigger zur Laufzeit desSystems verhält. Sie bestimmt auch, wie die Trigger, die vom Benutzereingegebenen beliebigen DB-Operationen und Transaktionen beeinflussen. Einegenaue Semantik der Trigger ist aufgrund der unvorhersehbaren Kombinationen vonOperationen und deren Aufrufe, die wiederum weitere Trigger aufrufen können, sehrwichtig.

a) Immediate Mode ≡ sofortige Ausführung

TransaktionAusführung des Triggers

Abbildung 2 Die Ausführung von Triggern im immediate Mode

Beim immediate Modus wird die Transaktion unterbrochen, nachdem einEreignis aufgetreten ist, das einen Trigger auslöst. Es wird erst der Triggerabgearbeitet, bevor die Transaktion fortgeführt wird.

b) Deferred Mode ≡ verzögerte Ausführung

TransaktionAusführung des Triggers

Abbildung 3 Die Ausführung von Triggern im deferred Mode

Beim verzögerten Modus werden erst alle DB-Operationen ausgeführt,unabhängig davon, welche Ereignisse Trigger aufrufen würden. DieAbarbeitung der Trigger erfolgt erst am Ende der Transaktion.

c) Decoupled Mode ≡ abgekoppelte Ausführung

TransaktionAusführung der Trigger ineiner separaten Transaktion

Abbildung 4 Die Ausführung von Triggern im decoupled Mode

Tritt beim decoupled Mode ein Ereignis auf, das einen Trigger aufruft, so wirddie Ausführung des Triggers in einer separaten Transaktion vorgenommen.Dadurch kommt es nicht zu den Verzögerungen. Jedoch kann es hierbeipassieren, daß sich die DB (nämlich nach Abschluß der 1. Transaktion und vorEnde der Transaktion, in der die Trigger ausgelöst werden) durch falscheEingaben zwischenzeitlich in einem inkonsistenten DB-Zustand befindet. Daher

Page 22: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 2 Grundlagen der Integritätsüberwachung 16

genügt, wie auch schon der immediate Modus, der decoupled Mode nicht denAnforderungen, die man an Integritätsüberwachung stellt.

Einen wesentlichen Bestandteil der Semantik der Triggerverarbeitung bilden dieKopplungsmodi (englisch: coupling-modes)[13].

Bezüglich der Abarbeitung eines Triggers können weitere Unterschiede gemachtwerden: Man bezeichne mit E, C und A das Ereignis (event), die Bedingung(condition) und die Aktion (action) des Triggers. Der E-C Kopplungs-Modusbestimmt, wann, falls das Ereignis eingetreten ist, die Bedingung des Triggersausgewertet wird. Der C-A Kopplungs-Modus bestimmt, wann, falls die Bedingungerfüllt ist, die Aktion des Triggers ausgeführt wird.

In aktiven DBen wird nun die Möglichkeit gegeben, das Verhalten genau zuspezifizieren: Die Kopplungs-Modi werden kombiniert (siehe Abb. 3). Jedoch wärees z. B. kaum sinnvoll den E-C Mode verzögert und den C-A Mode sofortdurchzuführen. Das würde nämlich bedeuten, daß die Aktion vor dem Testen derBedingung ausgeführt werden soll.

C-A Modus

E-C Modus sofort verzögert abgekoppelt

sofort Die Prüfung derBedingung und dieAusführung der Aktionwerden direkt nachdem Ereignis vor-genommen.

Die Bedingung wird nachdem Ereignis geprüft unddie Aktion wird aber erstam Ende der Transaktionausgeführt.

Die Bedingung wird nachdem Ereignis geprüft unddie Aktion wird in einerseparaten Transaktionausgeführt.

verzögert - unsinnig - Die Prüfung derBedingung und dieAusführung der Aktionwerden am Ende derTransaktionvorgenommen.

Die Bedingung wird amEnde der Transaktiongeprüft und die Aktionwird in einer separatenTransaktion ausgeführt.

abge-koppelt

Die Prüfung derBedingung und dieAusführung der Aktionwerden in einerseparaten Trans-aktion vorgenommen.

- unsinnig - Die Bedingung wird ineiner separaten Trans-aktion geprüft, die Aktionwird in einer weiterenseparaten Transaktionausgeführt.

Die Kopplungs-Modi

Page 23: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 2 Grundlagen der Integritätsüberwachung 17

2.3.5 Trigger in PL/SQL

Die noch folgenden Beispiele sind anhand einer ORACLE-DB getestet. Die SprachePL/SQL bietet eine Möglichkeit Trigger in ORACLE einzugeben. Zur Erläuterungwerden ein paar Sprachkonstrukte mit der bisher erläuterten Semantik in Einklanggebracht:N�OPN�Q�R�S'T�U,N�Q�V

W�XJY�Z�[�\�]'^S�Q�_

Sind Einträge in der Transitionstabelle N�Q�R�S'T�U�S�_a`

vorhanden, so wird der folgendeOp-Block ausgeführt.(Die Tabelle R ist die Tabelle, auf der der Trigger definiertwurde).N�Ob_�S [ S�U,N�Q�V

W�XJY�Z�[�\�]'^S�Q�_

Wie oben, nur daß hier die Einträge in der Transitionstabelle _�S [ S�U�S�_c`

betrachtetwerden.N�O�d X _�eBU,N�Q�V

W�XJY�Z�[�\�]'^S�Q�_

Wie oben, nur daß hier die Einträge in der Transitionstabelle d X _'e�U�S�_c`

betrachtetwerden.e�O�U�S�T

N�Q�R�S�TBUgf�_�S [ S�U�S�h�d X _'e�U�SiHier wird der Trigger-Zeitpunkt festgelegt, d.h. daß ein Trigger nach dem Befehlausgelöst werden soll. Um welchen Befehl es sich hier handelt, bestimmt das darauffolgende Ereignis (

N�Q�R�S�T�U, _�S [ S�U�S

oder d X _�eBU�S

).O \ TjS'e ]�k T \�l

Dies bestimmt den Triggertyp. Man unterscheidet hier zwischen befehls- unddatensatzorientierten Triggern. Durch die Angabe „

O \ TmS'e ]�k T \�l“ handelt es sich um

einen datensatzorientierten Trigger. Dabei wird der Trigger, abhängig vomangegebenen Trigger-Zeitpunkt n S�O \ T�S oder e�O�U�S�T , für jeden durch das Ereignisbetroffenen Datensatz vor bzw. nach Ausführung des Trigger-Ereignisses ausgelöst.

oqp�rtsvu�w�x X e [ U�S�Q�Q�eMy�S�zo W�{�| u�w�x X e [ U�S�Q�Q�eMy�S�z

Ausschließlich bei Datensatztriggern ist es möglich, auf die Werte einesDatensatzes vor und nach der Änderungsoperation zuzugreifen. Bei d X _�e�U�S -Triggernwird mittels o W�{�| u�w�x X e [ U�S�Q�Q'e�y�S�z auf den Wert der Spalte vor der Änderung, und mittelsoqp,r}svu�w�x X e [ U�S�Q�Q�e�y�S�z auf den Wert nach der Änderung des Datensatzes zugegriffen. Beieinem N�Q�R�S�T�U Y Trigger kann nur oqp,r}svu�w�x X e [ U�S�Q�Q�e�y�S�z und bei _�S [ S�U�S -Triggern nuro W�{�| u�w�x X e [ U�S�Q�Q�e�y�S�z verwendet werden, um auf neue (eingefügte) bzw. alte (gelöschte)

Page 24: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 2 Grundlagen der Integritätsüberwachung 18

Werte zuzugreifen. Die alten und auch neuen Daten, auf die hier zugegriffen wird,stehen in den Transitionstabellen.

2.3.6 Beispiele

Für welche der in 2.3.4 angegebenen Kopplungs-Modi man sich entscheidet, hängtvon den Anforderungen ab, die man an ein DBMS stellt. Dazu einige Beispiele:

Beispiel 1

Dieses Beispiel soll die Grundlage für die in diesem Kapitel angegebenen Beispielebilden.

Die Beispieldatenbank ist eine stark vereinfachte DB der Deutschen Bahn AG:

Die Bahnhöfe stehen in der Tabelle ~������ Zu jedem ~���� gehört eine eindeutige Orts-Nummer �B��������� , der dazugehörige Name des Ortes ~��������t����� , und die geographischenKoordinaten � ��~���� und � ��~���� .Die Orte werden durch Gleise verbunden, die in der Tabelle ��� �'��� aufgelistet sind.Zu jedem ��� ����� gehört eine eindeutige Bezeichnung der Strecke ��� �'���B�,�?� � , der Punkt,wo die Strecke anfängt, ��~��}�J�B��������� und wo sie endet, �t�����t�J�B���B�?��� . Zur Vereinfachungwerde angenommen, daß jedes Gleis nur in einer Richtung befahrbar ist.

Züge stehen in der Tabelle ��� � . Neben der ��� � �?��� steht in der Tabelle die Zeit, zu derder ��� � abfährt (Zur Vereinfachung sei angenommen, daß die Zeit pro Tag ingewisse Einheiten (max. 3 Stellen) eingeteilt wurde). Außerdem steht in der Tabellenoch das Gleis, auf dem der Zug fahren soll.

Die Angestellten der Bahn, die entweder in einem Zug oder an einem Bahnhofarbeiten, sind in der Tabelle ���t���?� � �t���?� ��� ��� aufgelistet: Jeder Angestellte besitzt eine�?� � �?��� , einen �,������� und einen �J�������B �¡�¢�£���¤B  . Der Arbeitspunkt ist entweder eine �B���������aus der Tabelle ~���� oder eine ��� � �?��� aus der Tabelle ��� � .

¥ ������ ��  ,����¦�� ��� �����§ �'� �'�������?� �©¨ ��� ¥�ª ����« §�¬�­?® ¢'��������°¯±¤��t¯³²��~��}�J�����������b��£t�����'� §�´µ® ��¶� b��£�¦�¦·²�t�����t�J�B���B�?���b��£}������� §�´® ��¶� ¸��£�¦�¦ ® ²

��� �����B�,��� � ��~��t������B�?��� �t�����t��������?���

¥ ������ ��  ,����¦������ �§ ��� � �?���b��£t������� §�´® ¢������J����¯¹¤��}¯³²�?�,ºM�?�����P��£t������� §�´µ® ²��� �'�������?� �©¨ ��� ¥�ª ����« §�¬�­?®�® ²

��� � �?��� ���,º�������� ��� ���°���,��� �

Page 25: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 2 Grundlagen der Integritätsüberwachung 19

»�¼�½�¾�¿�½ ¿,¾�À�Á�½�Â�Ã�ÄÅ�ÆBÇ ÄBÈ?É�ÃbÊ�ËtÌ�À�½�¼ Å�ÍÎÐÏ ¼�Ñ�ÌJ¾�¼�Ò¹Ó�½}Ò³ÔÂ�Ã�ÄBÈ?ÉtÕ�Ö�×)Ø�¾�¼�»�Ù�¾�¼BÚ Å Ú�Û Î ÔÜ ×�Â�È?ÝbÊ�Ë}Ì�À�½'¼ Å�ÍßÞ Ú Î ÔÜ ×�Â�È�à�Ê�Ë}Ì�À�½'¼ Å�ÍßÞ Ú Î�Î Ô

Æ�Ç Ä�È?É�à Â�Ã�Ä�È�ÉtÕ�Ö'× Ü ×�Â�È�Ý Ü ×�Â�È�à

»�¼�½�¾�¿�½ ¿,¾�À�Á�½ á�â}È�Õ?É Ü ×}ã�Ä?×Bä�ä�Ä�×Å Õ�É Ü È?É�ÃbÊ�ËtÌ�À�½�¼ Å�ÍÎÐÏ ¼�Ñ�ÌJ¾�¼�Ò¹Ó�½}Ò³ÔÉtÕ�Ö'×jØ'¾�¼�»�Ù,¾�¼�Ú Å Ú�å Î ÔÕ?Ã�â�×�æ�Ä�ã ÆBÇ ÄPÊ�ËtÌ�À�½'¼ Å�͵Î�Î Ô

Õ?É Ü È?É�à É}Õ�Ö�× Õ?Ã�â,×'æ�Ä�ã Æ�Ç Ä

Beispiel 2

Es sei die IB gegeben:

IB1: Es dürfen nicht mehrere Züge zur selben Zeit ein Gleis befahren. (Hierzu seizur Vereinfachung vorausgesetzt, daß ein Zug immer 20 Zeiteinheiten für dasBefahren des Gleises benötigt.)

D. h. mit Hilfe eines Triggers kann man testen, ob zu der Zeit, wenn der eingefügteZug ein Gleis befährt, dort schon andere Züge zu derselben Zeit fahren. Dazu mußalso auf die Ereignisse Ñ�çèÑ�Ê�é�½'¼�¿�Ñ�Ê�ê und Ñ�çëË Ï�ì ¾�¿�Ñ�Ê�ê in der Tabelle í�î Ü reagiertwerden.

Å ætç�Ë Ï�ì ¾B¿,Ñ�Ê�ê wird hier weggelassen, würde aber ähnlich aussehen.)

Also werden alle Züge aus der Tabelle í�î Ü gesucht, die denselben Ü ä�×�æ°ã�È,ï�× Ü haben

wie der eingefügte Zug, und deren Abfahrtszeit sich um weniger als 20 Zeiteinheitenvon der Abfahrtszeit des eingefügten Zuges unterscheidet. Gibt es in der Tabelle í�î Üein oder mehrere Tupel, die diese Bedingung erfüllen, so ist die IB1 verletzt und eskommt zu der Ausgabe einer Fehlermeldung durch den Trigger.

»�¼�½�¾�¿�½�ð�¼�¼�½ Ï Á,¾�»�½ ¿,¼�Ñ�ê�ê�½�¼�Ñ�Ê�é�È í�î ܾ�ç�¿�½�¼�Ñ�Ê�é�½'¼�¿bð�Ê í�î Üì ½�»�Á,¾�¼�½¾�À�ç,¾BÙ,¼�¿�½�Ê�Ê�Ë}Ì�À�½'¼ Å Ú Îgñ�ò Û Þ

À�½�ê�Ñ�ÊÑ�çPÑ�Ê�é�½'¼�¿�Ñ�Ê�ê ¿�Ù�½�Ê

é�½�Á�½�»�¿b»�ð�Ë�Ê�¿ Å Õ�â,ó�Õ�ô�Ã�Ä Î Ñ�Ê�¿�ðõ¾�À�ç�¾�Ù�¼�¿�½�Êç�¼�ð�Ì í�î Ü@ö Ù�½�¼�½ í�î Üv÷�Ü ä,×'æ�ã�È�ï?× Ü7òøñ É,×tï ÷�Ü ä�×�æ°ã�È,ï�× Ü ¾�Ê ìÅ ¾�À�é Å í�î Ü�÷ Õ?â�ó�Õ?ô�Ã�Äúù ñ É�×tï ÷ Õ?â,óMÕ?ô�Ã�Ä Î9û Ú�Û Î ÔÑB穾�À�ç�¾�Ù,¼B¿�½�Ê7ü Û�¿�Ù�½�Ê

¼�¾�Ñ�é�½�Ⱦ Ï�Ï Á,Ñ�»�¾�¿�Ñ�ð�Ê�È�½'¼�¼�ð'¼ Å ù�Ú�Û�Ú�Ú�Û Þ�ý ×�éõÓ�ð�Ì�Ì?¿bþ�Ëb½'Ñ�Ê�½'¼ Ç ð�Á�Á,Ñ�é'Ñ�ð�Ê·ÿ�ÿ�ÿ ýtν�Ê ì Ñ�ç·Ô

½�Ê ì Ñ�ç Ô½�Ê ì Ô

Page 26: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 2 Grundlagen der Integritätsüberwachung 20

Erfolgt nun eine Einfügung eines neuen Zuges, so wird die IB überprüft. Führt dieÜberprüfung zu einem Fehler, so erfolgt meist ein Rücksetzen (englisch: rollback)der Operation.

Würde man aber diese DB-Einfügung mit weiteren Operationen in einer Transaktiondurchführen, und die IB erst am Ende, also verzögert, überprüfen, so würden - auchwenn alle anderen Operationen keine IB verletzen- alle Operationen zurückgesetztwerden. Dies passiert, weil Transaktionen nach dem „Alles oder Nichts“-Prinziparbeiten (siehe Def. der Transaktion).

Andererseits kann aber ein sofortiges Auslösen der Trigger von Nachteil sein:

Beispiel 3

Es sei die folgende IBen gegeben:

IB2: In jedem Zug müssen mindestens 2 Bahnangestellte arbeiten.

Es wird also von jedem neu eingefügten �����

die Anzahl der Angestellten in dem Zugüberprüft. (Zur vollständigen Überwachung wären auch noch Trigger nötig, die aufdie Ereignisse ������ ������ �����

, ������ �������������� ���� !���"�"�!#� und ���$��� ��%�������&����� ���& �!���"�"�!#�reagieren. Sie werden hier aber auch weggelassen.) Dazu werden alle Angestellte,die die neu eingegebenen Zugnummern als ihren Arbeitsplatz haben, durchgezählt.Ist die Anzahl kleiner als 2, kommt es zur Ausgabe einer Fehlermeldung durch denTrigger und der Zug mit weniger als zwei Angestellten wird nicht eingefügt.

' ��( ! '�)�*�* � ',+ � '.- �/0�' ���� ��1� '1' ���2$3� 0 �4 ')�*�* � '1) �5�� �2���6 �27�� ' � ) ��5� ' 8�� �2���7�� ' �9� 02:;' ��<�� 0 $3� ' �

��� + �=� ' 6 � ) �� ' ���&( 6 � '�> /�[email protected] � *�) �) 7 ) �5�� ' ) � *5��2$�� 0 0 �2���� >HG ? ) �� ��.��� + �=� ' 6 � ) �� ' 7 ' ��(A���&���#� ���& �!���"�"�!��< : � ' �I�#J�� � - ! �K�L�! BM@N� �&OQPR�2��� �JFE) 7S��� + �=� ' 6 � ) �� 'UT /1 : ���' � ) 5���=�����2$ )�0 �� ) �����2� '�' � '�>�V /�D/�/�DXW�Y � �Z<2��� )�* " �2�� ��.���[� ' � ' 6 � ) �55� ��2$�$� ��X\\�\3Y&?�E��� ) 7FE

��� ) 7FE���]E

IB3: Jeder Angestellte muß einen Arbeitsplatz (entweder im �����

oder im Bahnhof( ^�J ! )) haben.

Wird also ein neuer Angestellter eingefügt, so muß er einen Arbeitsplatz haben.Dazu wird in der Tabelle

����� und in der Tabelle ^2J ! nachgesehen, ob dieser

Arbeitsplatz existiert. Existiert der Arbeitsplatz nicht, so wird durch den Trigger eineFehlermeldung ausgegeben. (Zur vollständigen Überwachung der IB3 müßten auchTrigger auf die Ereignisse ���$��� ��S��� �2��� , ������� ��.��� ����� , ��2$��2 ��.���.^�J ! , ������ ��_��_^2J ! und����9�� ��[��4�������� �#�� !���""�!�� existieren, werden hier aber weggelassen.)

Page 27: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 2 Grundlagen der Integritätsüberwachung 21

`�a�b�c�d�b1e�a1a�b�f2g3c�`�b4d3ah�i�ib�a1h�jk�l�mn�lo�p�q#r�s�t#r�uu�t�rv b2w�e�a�b.h�j�kb�a�d8ejSmn�lo�p�q#r�s�t#r�uu�t�rw�e9a,b9c�`2x;a�e�yz b`�g3ca�b

c�j{�l=c�a v b�h�d�k�l�f�|�d8j2}�~ v b�a��&���A�C�.�X�c�j{�l�{�}�i�l2f9|�d8j�}�~ v b9a����#�����.�F�v bi�h�j

h�wSh�jk�b9a�d3h�j�i4d�x�b�jk�b2g�b`�d8`�e2}�j�d#�H����q�l#p����Ih�j2d�e.c�j{�l�{�}�i�l2f�|�d1w3a�e�~_����q

y#x�b�a�b1����q��R����q�l#p��I����p3r&�Q��o#��n�r���ts�����tQ�k�b2g�b`�d8`�e2}�j�d#������t�l#p����Ih�j2d�e.c�j{�l=c�a v b�h�d�k�l�f�|�d1w�a�e�~_����t

y#x�b�a�b1����t�������t�l#p��I����p3r&�Q��o#��n�r���ts�����tQ�h�wSc�j�{�l=c�a v b�h�d�k�l�f�|�dI�_�Sc�j z c�j{�l2{2}�i�l�f�|�dI�_�1dx�b�j

ac�h�kb�l=c�f�f2g3h�`9c�d�h�e�j�l2b9a�a�e9a���������3���X����m�b�j�o�a v b9h�d�ke�a�d8i9h v d8b�k1j9h�`�xd��������b�j z h�wF�

b�j z h�wF�b�j z �

Will man nun einen neuen Zug eingeben, so wird die IB2 verletzt, da in dem Zugmindestens 2 Angestellte arbeiten müssen. Gibt man aber erst die Angestellten ein,so existiert dieser Arbeitsplatz noch nicht und die IB3 wird verletzt.

Es ist egal welche Eingabe man zuerst vornimmt, eine IB ist in jedem Fall verletzt:

Man müßte also erst eine der IBen außer Kraft setzen, die Eingabe vornehmen unddann die IBen wieder hinzufügen. Da die IBen jedoch gerade die Eingabenüberwachen sollen, ist der immediate Mode für Trigger in solchen Fällen nichtsinnvoll, wohl aber der deferred Mode.

Beim deferred Mode ist die Transaktion erst abgeschlossen, wenn alle Triggerüberprüft sind, d.h. nicht korrekte Zwischenzustände sind erlaubt.

Zu Beispiel 2: Man könnte den Zug und die Angestellten in einer Transaktioneingeben, ohne eine IB auszuschalten. Vor allem werden dabei dann auch beideIBen geprüft.

Die DB ist am Transaktionsende in jedem Fall in einem konsistenten Zustand. Derverzögerten Modus bietet, im Gegensatz zu den beiden anderen Kopplungs-Modi,eine komfortablere, sicherere und sinnvollere Möglichkeit zur Integritäts-überwachung.

Page 28: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 2 Grundlagen der Integritätsüberwachung 22

2.4 Ex is t ierende Systeme

2.4.1 Das STARBURST Regel-System

Hier wird ein kurzer Überblick über die Sprache gegeben, die in STARBURST [6, 8]zur Realisierung der DB Produktionsregeln verwendet wird: Die Produktionsregeln inSTARBURST basieren auf der Grundlage von Transitionen. Regeln betrachten nurden Nettoeffekt ( vgl. mit der Def.) von Transitionen.

Eine formale Beschreibung der Transitionen und ihrer Netto-Effekte erscheint in[6, 8].

2.4.1.1 Syntax der Trigger in Starburst

Die Syntax eines Triggers in Starburst lautet folgendermaßen:���� �¡�¢ 4��£3¤� ¦¥�§3¨ª©2«¬8­�®¦¥�¯�¨�°�«2±�±�«¬²�³  �®¦¥�¨�´�µ�±�¶�µ«�·�¸«[¹º�«9»�¨�¼�½�¾·=¿H«·=ÀH¬Á�Â�à ¥9Ä�«¸�½�·Å�´�·�Å�¬9Æ¢ ³  �®¦¥�Ç=È�¼3½�¾�·¬ÁªÉ �� �� �Ê �ËI¥�Ì�½�µ�¼�«1Í�¾�·¦¯�»½�ÅÅ�«�»�·�¬9ÆÁ�à ­�¤�¤&­ ² Ë,¥9Ì3½�µ�¼�«1;�·¦¯�»�½�Å�Å«�»�·¬�Æ

Bemerkung:

In Starburst wird das Schlüsselwort rule für Regel benutzt. Dies ist gleichbedeutendmit Trigger oder englisch: trigger.¥�¨�´�µ�±�¶�µ�«·�¸�«�¹�º«�»�¨�¼3½�¾�·=¿Î«�·=Àά sind ein oder mehrere Einfügungen, Änderungen, oderLöschungen einer ¥¯�¨�°«�±±�«�¬ , auf die sich der Trigger bezieht. Der Trigger wird beieiner gegebenen Transition ausgelöst, wenn eine der spezifizierten Operationen als„Netto-Effekt“ der Transition entsteht. Die optionale ¥�Ä�«¸�½�·Å�´�·�Å�¬ besteht aus einerSQL-Bedingung. Die ¥�Ç=È�¼3½�¾�·¬ bestimmt eine Folge von DB-Operationen, dieausgeführt werden sollen, wenn der Trigger ausgelöst wird und wenn ihre ¥9Ä�«�¸9½�·Å�´�·Å�¬wahr ist; diese Operationen können SQL-Datenmanipulationen (Einfügungen,Löschungen und Änderungen), SQL- Datengewinnungs-operationen ( µ�«2±�«�Ï2¼ ) undTransaktionsabbrüche ¿�»�¾�±�±�°�¨�Ï�È ) sein.

Die optionalen º9»�«�Ï«�¸«�µ und Ð ¾�±±�¾�Ñ2µ Klauseln werden dazu benutzt, um eineTeilordnung auf einer Menge von definierten Triggern zu schaffen. Wenn ein Triggerr1 einen Trigger r2 in seiner º�»�«Ï�«¸�«�µ�Ò�±3½�µ�¼ aufführt, oder wenn r2 r1 in seiner Ð ¾�±±�¾�Ñ�µ#Ò±3½�µ2¼ bestimmt, dann ist r2 in der Ordnung höher als r1. (Wir sagen auch: r2 hatPriorität vor r1).

Wenn keine direkte oder transitive Ordnung zwischen zwei Triggern bestimmt wird,ist die Ordnung willkürlich. Nicht priorisierte Trigger werden vom System geordnet.

Die Bedingungen und Aktionen der Trigger beziehen sich, wie auch schon anfangserwähnt, auf Transitionstabellen.

Page 29: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 2 Grundlagen der Integritätsüberwachung 23

Durch Löschung, Einfügung oder Änderungsoperationen ändert sich der DB-Zustand. Die Transitionstabellen beinhalten die DB-Operationen, die vorgekommensind, seitdem zum letzten Mal die Triggerverarbeitung aufgerufen wurde.

2.4.1.2 Die Ausführung der Trigger

Es soll nun ein Algorithmus vorgestellt werden, der die Semantik der Trigger-Ausführung in Starburst wiederspiegelt (Dieser Algorithmus ist [6] entnommen.).Hierbei wird nach folgendem Prinzip vorgegangen: Die Transaktion wird ausgeführt,und mit Hilfe einer Funktion wird ermittelt, welche Operationen in der Transaktiondurchgeführt wurden. * Dann wird der höchst priorisierte Trigger ausgeführt. Nachjeder Triggerausführung wird wieder neu überprüft, welche Operationen - zum einenwährend der Transaktion , zum anderen während der Triggerausführung -ausgeführt wurden. Sind noch ausführbare Trigger vorhanden, so werden ab * dieSchritte solange wiederholt, bis keine Trigger mehr auszulösen sind. Die Frage -welcher Trigger noch auszulösen ist - stellt sich also nach jeder Aktion einesTriggers erneut. Außerdem fällt die Antwort nach jeder Aktion eines weiterenTriggers wieder anders aus: Durch die Aktion des Triggers können vorherausgelöste Trigger zurückgesetzt werden, da ihr Ereignis nicht mehr vorliegt(untrigger) oder es können Trigger ausgelöst werden, die durch die Transaktion garnicht ausgelöst wurden. Interessant ist daher, wann auf die Veränderungen desAuslösens der Trigger reagiert wird.

Vorab: Starburst reagiert sofort auf die Änderungen. Wie dies gesteuert wird, soll imfolgenden erläutert werden.

Folgende Variablen werden benötigt:

• Ó�Ô�Õ�Öª×�Ø�Ù�Ø�Ú als Variable vom Typ Datenbank-Zustand;

• Û als Variable deren Inhalt die TI sind;

• Ü�Ý�× sei eine Variable deren Inhalt die TI und die eingefügten Tupel sind;

• Õ�Ú�Ô sei eine Variable vom Typ wie Ü�Ý�× ;• Þ�ß�Õ sei eine Variable deren Inhalt die TI und die geänderten Tupel sind;

• à�áâà�ã seien Variablen vom Typ Trigger;

• ä�Ó�ÝÕ#Ö�å�Ó�Ô�Õ�× vom Typ Boolean;

• ØFáæØFã vom Typ Tupelidentifier;

• ä sei vom Typ Spaltenname;

• ç sei vom Typ Tupel-Wert

Zu jedem Trigger à gehört das Attribut à�èNØ3à�Ù�Ý�×�Ö�Ü�Ý2é�Óëê Dieses Attribut ist eine Menge[ Ü�Ý�×ìáRÕ�Ú2ÔFáNÞ�ß�Õ ], wobei Ü�Ý�× , Õ�Ú2Ô und Þ�ßÕ folgende Bedeutung haben:

• Ü�Ý× enthält die Menge der eingefügten Tupel (TI + Tupel);

• Õ�Ú2Ô enthält die Menge der gelöschten Tupel (TI + alte Werte);

• Þ�ßÕ enthält die Menge der geänderten Tupel (TI + geänderte Werte);

Page 30: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 2 Grundlagen der Integritätsüberwachung 24

Bemerkung: Die Variable í enthält nur die TI. In der Variable E stehen die TI desNettoeffekts.

Im Gegensatz zu den Transitionstabellen (enthalten nur die eingefügten, gelöschtenund geänderten Tupel der Tabelle) sind die Mengen î�ï�ðìñóò�ô2õ und ö�÷�ò tabellen-übergreifend.

2.4.1.3 Funktionen

Weiterhin sei angenommen, daß die folgenden Funktionen existieren:

• ø�ö�ù�ù�ôï�ú9ûªð�ú�ü�ú�ôþý�ÿ benötigt keine Parameter und gibt den aktuellen DB-Zustandzurück;

• ô��ô�ø�öú�ô�ûªô��2ú�ô�ù�ï�ü�õ�û � õ���ø���ýÿ benötigt keine Parameter, führt den nächstenOperationsblock aus und gibt den Nettoeffekt der erzeugten Transition zurück;

• ù�öõ�ô�ðþý�ÿ benötigt keine Parameter und gibt die Menge der momentan definiertenTrigger zurück;

• ù��2õ�õ � ü�ø���û�ü�ø�ú3î���ïþý�ù�ÿ nimmt einen Trigger r, und gibt ú3ù�ö�ô zurück, wenn die Aktionvon r ein Rollback ist, ansonsten wird 3ü�õ�ð�ô zurückgegeben;

• ô��ô�ø�öú�ô�û�ù�öõ�ô#û � õ��ø��9ý�ù�ÿ nimmt einen Trigger r mit einer Nicht-Rollback Aktion undführt die Aktion von r aus;

• ð�ô2õ�ô�ø2ú�û�ú3ù�î�����ô9ù�ôò#û�ù�ö�õ�ôþý ρ ÿ nimmt eine Menge ρ von Triggern und gibt alle r aus derMenge zurück, deren Ereignis durch ù� Nú3ùü�ï�ð�û�î�ï��� erfüllt ist (existiert keinTrigger, so wird ï�ö�õõ zurückgegeben);

• ø���ô�ø��2ûªø���ï�ò9î�ú3î���ïþý�ù�ÿ nimmt einen Trigger r und gibt ú�ù�ö�ô zurück, wenn dieBedingung von r im momentanen DB-Zustand und in den Transitionstabellenerfüllt ist,

• ��ô2ú�û��9ü�õö�ô=ý&úFñRð2ú3ü�ú�ô=ÿ nimmt ein Tupel t und den DB-Zustand ð�ú�ü�ú�ô und gibt denWert der Tupels t, im DB-Zustand ð2ú3ü�ú�ô zurück. Dieser wird auch wieder mit tbezeichnet (hier wird erst der TI und dann das Tupel selbst mit t bezeichnet);

• ��ô2ú�û��9ü�õö�ô�ð ist das gleiche wie �ô�ú�û���ü�õ�ö�ô , außer daß das erste Argument eineMenge von Tupeln ist und daß auch eine Menge von Werten wiederzurückgegeben wird;

• ��ô2ú�û��2õ�ò�û���ü�õ�ö�ôþý�úXñ���õ�ò#ûªð2ú3ü�ú�ô]ñNö�÷ò=ÿ nimmt den TI t, einen DB-Zustand ��õ�ò#ûªð2ú3ü�ú�ô undeine Menge ö�÷�ò . Wenn t nicht in ö�÷�ò vorkommt, dann gibt die Funktion dasTupel von t zurück, der im DB-Zustand �2õ�ò#û�ð�ú�ü�ú�ô steht. Kommt t in ö�÷�ò vor, sowerden alle Tupel (t,c,v) zurückgegeben, die in ö�÷ò stehen, und wo die TI mitdem übergebenen t übereinstimmen,

Page 31: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 2 Grundlagen der Integritätsüberwachung 25

Bedeutung von old-state:�������������� repräsentiert erst den DB-Zustand vor der Ausführung der Transaktion.Danach wird durch �����!��������� der DB-Zustand vor jeder Ausführung der Aktion einesTriggers repräsentiert. D.h. vor der Ausführung jeder Aktion des Triggers bekommt�������������� den momentanen DB-Zustand zugewiesen. Wichtig dabei ist, daß ����!�������"�� nicht, wie man meinen könnte, nur den Zustand der DB vor der Ausführung derTransaktion oder vor der Ausführung der ausgelösten Trigger repräsentiert.

Die Funktion �� ��� �#����� ���$�%�$�&��� ���'"(��� zur Auswahl des geeigneten (engl. eligible)Triggers: Es wird ein ausgelöster Trigger gesucht (1), ist keiner vorhanden (2), sowird ) (���� an das aufrufende Programm zurückgegeben. Ist ein ausgelöster Triggervorhanden (3), so wird die Bedingung des Triggers getestet (4). Wird die Bedingungnicht erfüllt, so wird ein weiterer Trigger gesucht (1), dann dessen Bedingunggetestet (4) u.s.w.. Ist die Bedingung erfüllt, so wird der Trigger an das aufrufendeProgramm zurückgegeben (5).* ( ) #���$�� ) �� ��� �#����� ���$�%�$�&�� !��'"(�� ,+�-!.'� �/� ���

' ← �� ��� �#�������'�$�%�%� �'� ��!��'"(��� 0+�'"(��� ��,+�-�-1. +�2�-$ * ' ≠ ) (����3��4� ) +65,-

#�� ) �!��4������ ← #�4� �#�7���#�� ) ��$"��$�� ) +�'�- +98�- �����

#�� ) �!��4������ ←* ���� :. +�;1-

( ) ��$"�<#�� ) �!��4�������3��'3'>= ) (����?.'� ���(�' ) +�'�-!. +A@,- ) � * ( ) #���$�� ) .

Die Funktion $ ) $������'�� ) �!��$ ) * � zur Aktualisierung der Trans-Info: An die Funktion $ ) $"�����'�� ) ����$ ) * � werden die Parameter B�C also der Nettoeffekt der Transaktioneinschließlich des Nettoeffektes der bisher ausgeführten Triggeraktionen und ����!������"�� übergeben. Die Menge der eingefügten Tupel wird in das Tupel $ ) � geladen(1), die Menge der gelöschten Tupel wird in die Menge �� �� geladen (2), die Menge(�/�� wird erst geleert (3), und dann mit den Tupeln wieder gefüllt, die im Nettoeffektgeändert werden (4). An das aufrufende Programm wird die Menge der geänderten,gelöschten und eingefügten Tupel, D $ ) � C �� �� C (�/���E zurückgegeben.

In der Funktion $ ) $������'�� ) �!��$ ) * � werden also zum DB-Zustand �������������� die Mengen$ ) � C (�/�� und �� �� gefüllt. Hier erfolgt keine Berechnung des Nettoeffekts, dieser istdurch die Menge E schon gegeben.* ( ) #���$�� ) $ ) $������'�� ) �!�$ ) * �F+ B�C ����!�������"�� ,-!.$ ) � ← G + B -1. +�2�-

�� �� ← %� �����H��"��( ��,+JI1+ B - C ����!�������"�� ,-!. +�;!-(�/�� ← ∅ . +6 50-* �� 'K ��� #�4L+��C #, - ∈ M + B -N���( /� � ← (� /� � ∪ { +� � C # C %� ����� H�� ��( ,+J �C �� �� �!�� ����� �� 0-�-} . +9 8�-'� ���(�' ) + D $ ) � C �� � � C ( /� ��E�- ) � * ( ) #� �� $� � )

Funktion O ����$ *6P ����'�� ) ����$ ) * � zum Ändern der Trans-Info: Diese Funktion repräsentiertdie Berechnung des Nettoeffekts zweier Operations-Blöcke, wie sie schon in 2.2.1Operationsblöcke beschrieben wurde. Zur Erinnerung (Bezeichnungen wie vorher):

Page 32: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 2 Grundlagen der Integritätsüberwachung 26

I = (I1 ∪ I2) - D2

D = (D1 ∪ D2) - I1

U = (U1 ∪ U2) - (D2 ∪ I1)

Beim ersten Aufruf berechnet die Funktion Q�R�S�TUAVXW�Y�Z�[�\�]!WT�\�UR den Nettoeffekt, der sichaus dem Nettoeffekt der Transaktion und dem Nettoeffekt der Aktion desausgeführten Triggers ergibt.

Bei allen weiteren Aufrufen ist es die Berechnung des Nettoeffekts, der sich zumeinen aus dem Nettoeffekt der Transaktion und den bisherigen Triggeraktionen undzum anderen aus dem Nettoeffekt der zuletzt ausgeführten Aktion des Triggerszusammensetzt.

U�\�_�Y�T�R�\KQ�R�S�T"U6V W�Y�Z�[�\�]!W�T�\�U�R0abT�\�]:c�S�d�e?cf�g�S�h�cjikc�R�e�S!W�]�Y�[Y�d0l1mT�\�] ← T�\�] ∪ n�a�i�l!o a�p�lU�R�ZKd�[�_�q3Y ∈ r1a�i�lsS�R

T"UtY ∈ T�\�]uY�qd�\vT�\�] ← T�\�]wW { Y } aJx1ld�e�]�d3y�d�z�T�\

S�d�e ← S�d�e ∪ { z� d�Y�W� R�e� S�W� {�[ e�^ d,a� YXc� R�e� S!W� ]�Y�[" Y� d:c| ^� g� S,l} o aA },lU R�ZKd�[�_�qLa�YX~�c� _:c� {0l∈ ^� g� S3S�R

T U3Y?~��vY3Y�q�d�\�^g�S← ^� g� SwW { a� YX~�c� _:c� {0l} a9 ��ld� \� S

d� \� SuU�R�ZkoU� R�ZKd�[� _�qLa�Y?c� _,l∈ �1 a� i�lNS�R

T" UtY ∉ T� \� ]v[�\�SFaJY?c� _�c� {0l∉ ^� g� SuUR�Z3[�\J V�{uY�qd�\^ g� S ← ^� g� S ∪ { a� YXc� _:c� z� d�Y�W� R�e� S�W� {�["e�^ d,a� YXc� R� e S!W� ]�Y�[" Y� d�cf ^� g� S,l�l} aA �,l

d� \� SuU�R�ZkoZ� d�Y�^�Z� \�abT� \� ]:c� S� d�e?cf ^� g� S�h�l

d� \� S�U�^�\�_�Y�T� R� \Bemerkung:

(1) entspricht der Berechnung I = (I1 ∪ I2)

(2) entspricht der Berechnung I = (I1 ∪ I2) - D2

(3) entspricht der Berechnung D = (D1 ∪ D2) - I1

(4) hier werden die gelöschten Tupel, die vorher geändert wurden von der Menge ^�g�S abgezogen

(5) entspricht der Berechnung U = (U1 ∪ U2) - (D2 ∪ I1)

Wie auch in der Definition schon erwähnt, sind an der Menge T�\�] für Y ∈ T�\�] , keineÄnderungen mehr nötig, da nur der TI in der Menge E steht, und daher dieÄnderung, die an dem Tupel vollzogen wurde, automatisch durch n�a�i�l mit beachtetwird.

Page 33: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 2 Grundlagen der Integritätsüberwachung 27

2.4.1.4 Der Ausführungsalgorithmus:

���������"� ���u����� ���3�����3���������������������������3�"���u�����3�����������3����� �!����������� � �¡�"� � �������� ������������� ¢������������!£������"��� ← ��������������£���������0¤�¥!¦§

← ������������!£��������������£�����������¤�¥!¦© �����:ª������?ªf������« ← �����"��£����������!£��� � �,¤ § ª������!£���������0¥1¦ ¤�¬�¥� ���K����� � � ∈ �"������,¤�¥N���v��­|���������!£��� � � ←

© ������ª������?ª|�����«k¦ ¤�®!¥��� ���������3�����>�1��������������� ����� ������ ← �����������£����������������!£������,¤�¥1¦ ¤60¥° � ���¡� ≠ ������� ��� ¤j±�¥

� � ����������������£�����������,¤���¥>� � ���v���������������k¦ ¤6²,¥�������� ���t�����³�1���������������������3��������!£��������� ← ��������������£��������,¤�¥!¦§

← �������������£�������!£����������¤���¥!¦ ¤�!¥�� �����>�1�����������3�K��� ��µ ��� �������t������ �!���������"����������£�¶6� � ��k­|���������!£���� � � ← �������£����������!£���� � �,¤ § ª·������£��������,¥1¦ ¤J1¥��¡µ �������� �����³�1�������������������£�¶A� � � ��� �3�����v�������������³�1������������ ���K����� � ��¹ ∈ ������0¤�¥N���� � �k¹ ≠ �³� � �����¹�­|���������!£���� � � ← º ����� �6» £�����������£���� � �0¤��k¹�­|���������!£��� � ��ª § ª������!£������"���0¥ ¤6¼,¥

����� � ����¦� ← ������������£����������������v������0¤�¥ ¤6½0¥

����� ° � �"���� ������¾����

(1) Die Mengen © �����:ª������?ªf������« werden neu gefüllt.

(2) Jeder Trigger erhält das Attribut ���������!£��� � � . In ���������!£��� � � stehen die TI und evtl.Zusatzinfo (siehe bei der Definition S.) durch die die Trigger ausgelöst wurden.

(3) Es wird ein geeigneter Trigger ausgewählt.

(4) Ist ein Trigger ausgelöst, wird die folgende Schleife so lange durchlaufen, biskein weiterer Trigger mehr durch (3) bzw. (7) ausgelöst wird.

(5) Wird in der Aktion des Triggers kein Rollback ausgeführt, so wird der Aktionsteildes Triggers ausgeführt.

(6) Die Aktion des Triggers wird ausgeführt.

(7) Da durch (6) weitere Trigger gefeuert sein könnten, erhält erst der Triggerselbst, dann

(8) erhalten alle anderen Trigger ein neues Attribut ����������£���� � � .(9) Danach wird ein geeigneter Trigger ausgewählt. Weitergearbeitet wird dann mit

Punkt (4).

Hier wird gerade das ausgeführt, was am Anfang dieses Abschnittes schon erwähntwurde: Die Trigger reagieren sofort nach der Aktion auf Änderungen der Ereignisse,wodurch nun auch andere Trigger aufgerufen werden können.

Page 34: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 2 Grundlagen der Integritätsüberwachung 28

2.4.2 Triggersubsystem

Hier und im folgenden ist mit dem Triggersubsystem (TSS) das Programm von M.Winkler gemeint, das während seiner Studienarbeit „Entwicklung einesTriggersubsystems auf dem Datenbank-Managementsystem Oracle7“ [5] entstandenist und verzögerte Trigger auf einer Oracle7 DB simuliert.

2.4.2.1 Allgemeines

Kern der Arbeit war die Implementierung verzögerter Trigger in Oracle (bzw. derenSimulation). Hier erfolgt eine Zusammenfassung der Teile der Studienarbeit die aufdie Semantik der Verarbeitung der Trigger eingehen. Dieser Teil wird danach mit2.4.1 bzw. [6] und [8] verglichen.

Eine vollständige Beschreibung des TSS ist den Kapiteln 5.1 und 6.1 zu entnehmen.

2.4.2.2 Syntax verzögerter Trigger

Ein verzögerter Trigger besteht aus drei Teilen: dem auslösenden Ereignis, derVorbedingung und der Aktion. Das auslösende Ereignis steht mit Triggername undTabellenname im Triggerkopf. Die Vorbedingung steht im Triggerprogramm, dieseswiederum im Triggerrumpf. Dies wurde zur Vereinfachung der Implementationfestgelegt. Prioritäten für Trigger werden durch die Reihenfolge gegeben, in der siein der Datei aufgeschrieben werden.

¿�À�Á�Â"Ã�Á3Ä�Á�Å�Á�À�À�Á�Ä�Ã�À�Æ�Ç�Ç�Á�ÀÉÈ�Ã�À�Æ�Ç�Ê�ÂAË�Á�Ì TriggernameÂ"Å�Ã�Á�ÀÆ�Ê�Í�Á�ÀàÎ�À³ÏÐ�Ä�Â"Ã�Á3Î�ÀKÄ�Á�Ñ�Á�ÃÁ DB-OperationÎ�Ê È�Ã�Â�Ò�Ê�Â�Ë�Á�Ì TabellennameÓ Ä�Á�¿�Ñ�Â�À�Á,Ô optionalÈ�Õ�Â�À�Æ�Â�Ò�Ñ�Á�Ê!ÖKÏ�Ê�Ät×�Ï�À�Í�Î�À�Ö�Ø�Á�ÙÑ�Â�À�Â"Ã�Æ�Î�Ê�Á�Ê�ÌÈ!ÚÛ�Ü�Ý�Þ�Û�Ö�Ú�À�Î�Ç�À�Â�Ë�Ë�Ö�×�Î�Ä�Á�Ì Triggerrumpf

(Beipiele verzögerter Trigger der TSS-Notation sind in Kapitel 2.4.3.2 und imAnhang A zu finden.)

Alle verzögerten Trigger, die die Integrität überwachen sollen, müssen zunächst ineine Datei geschrieben werden. Die Reihenfolge in der Datei gibt dabei implizit dieReihenfolge des Auslösens an. Damit wird eine prioritätsgesteuerte Feuerungermöglicht.

Der Triggerrumpf muß ein PL/SQL-Programm enthalten, wie es auch in Prozedurenvorkommen kann. Als einzige Abweichung sind die Konstrukte

Æ"ÅßÆ�Ê�Í�Á�ÀÃ�Æ�Ê�ÇÆ"Å<Ä�Á�ÑÁ�Ã�Æ�Ê�Ç

Page 35: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 2 Grundlagen der Integritätsüberwachung 29

à"átâã�ä�åæ�à�ç�è

erlaubt, um ein Verzweigung in Abhängigkeit vom auslösenden Ereignis zuermöglichen. Eine Kombination wie

àá�à�ç�é�ê�ëæ�à�ç�è3ì�ë³â�ã�ä�å"æ�à�ç�è

ist jedoch nicht gestattet.

Zu jeder Tabelle können maximal 3 verzögerte Trigger definiert werden: ein à�ç�é�ê�ë"æ�ê�ä

,ein

ä�ê�í�ê�æ�ê�ä und ein

âã�ä�å"æ�ê�ä Trigger. Die Anzahl der verzögerten Trigger ist

unabhängig von den „sofortigen“ Triggern in ORACLE.

Die Eingabe von 2 Triggern, die auf dasselbe Ereignis reagieren ist imTriggersubsystem nicht möglich. Die Hilfs- und Transitionstabellen erhalten zwarden Namen des Triggers, jedoch erhält der Trigger, der die Tabellen später - zurLaufzeit - aktualisiert, den Namen der Tabelle und dahintergehängt die Worte„ î ä�ê�á î æ�ë�à�è�è�ê�ë “. D.h. versucht man nun 2 Trigger zu definieren, die beide auf dasEreignis „

â�ã�ä�åæ�êïì�çïð�ñ�ò“ reagieren sollen, so erhalten beide Trigger den Namen

„ ó â�è î ä�ê�á î æ�ë�à�è�è�ê�ë “, was zu einer Fehlermeldung durch ORACLE führt, da eindeutigeTriggernamen in ORACLE zu vergeben sind.

Zu jeder Tabelle, für die ein verzögerter Trigger definiert ist, existieren 3 Hilfs- und 3Transitionstabellen. Würde nun ein weiterer verzögerter Trigger auf dieser Tabelledefiniert werden, so müßte man für diesen Trigger auch wieder die 6 Tabellenanlegen. Dies wiederspricht aber der Berechnung des Nettoeffekts, da sich dieDatenänderungen dann an beiden Paaren von Hilfs- und Transitionstabellenwiederspiegeln müßten. Hierzu vergleiche man in Kapitel 7 die Erweiterungs-möglichkeiten.

2.4.2.3 Ausführungssemantik

Die verzögerten Trigger æ�ë�à�è�ô�õ>æ�ë�à�è�ö?õ>æ�ë�à�è�÷

, .. werden ausgelöst, wenn die Prozedurø�ù î�ú ì ø�ø à"æ aufgerufen wird. Dies kennzeichnet auch das Transaktionsende. DieProzedur ø�ù î�ú ì ø�ø àæ sieht folgendermaßen aus:

ã�ë�ì ú ê�ä�â�ë�ê ø�ù î�ú ì ø�ø à"æû�û�ûü ê�è�à�ç

í�ì�ì�ãà"á ú ì�ç�ä�àæ�à�ì�ç î æ�ë�à�è�ô>ý¡æ�ëâ�êuæ�þ�ê�çuæ�ë�à�è�ô�ÿê�í�é�ê�àá ú ì�ç�ä�à"æ�à�ì�ç î æ�ë�à�è�öKývæ�ë"â�êuæ�þê�çuæ�ë�à�è�öXÿê�í�é�ê�àá ú ì�ç�ä�à"æ�à�ì�ç î æ�ë�à�è�÷³ývæ�ë"â�êuæ�þê�çuæ�ë�à�è�÷:ÿû�û�û����� å"í�íé���ê�à�ç�ê��1ë�à�è�è�ê�ë ü ê�ä�à�ç�è�â�ç�è ó â�æ�ë�àá�á�æ��1ë�å�ç�é�å��"æ�à�ì�ç�é�ê�ç�ä�ê � �ê�í�é�ê3ê���àæXÿ

ê�ç�äuí�ì�ì�ã�ÿê�ç�ä�ÿ

D.h. in einer Schleife werden die Trigger solange gefeuert, bis keineTriggerbedingung mehr erfüllt ist. Die Triggerbedingung reduziert sich hier nur aufdie Existenz des Auslöseereignisses. Dabei wird nach jedem Ende einerTriggerabarbeitung die Bedingung des Triggers mit der höchsten Priorität geprüft. Ist

Page 36: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 2 Grundlagen der Integritätsüberwachung 30

sie nicht erfüllt, wird die Bedingung des Triggers mit der nächst niedrigeren Prioritätuntersucht u.s.w. bis ein Trigger gefeuert werden muß. Danach beginnt dieÜberprüfung wieder beim Trigger mit der höchsten Priorität.

Im einzelnen geschieht bei der Triggerabarbeitung folgendes: Durch das TSSwerden pro verzögerten Trigger ����������� ����� ��� die folgenden Tabellen erzeugt:

• ����� �����!�!�����������• "!��� �����!�!�����������• #$��� �����!�!�����������• %���&�'$�(����� �����!�!� � �������• %���&�'$� "���� �����!�!� � �������• %���&�'$�)#*��� �����!�!� � �������

sowie die Prozedur ���������!������� ��� und einen sofortigen Trigger "�� '$�+�����!�!�,�����!-,&���� � ��� ���/.Während der Ausführung der Transaktion sorgen die Trigger "��,'$�+�������!�,�����!-,&��!� � �������dafür, daß die Datenänderungsoperationen in den Hilfstabellen %���&�'$� 0���� �����!�!� � �������( 0 = � , " oder # ) gesichert werden. Hier werden die Tabellen 0!��� �����!�!����������� noch nichtbenötigt. Die Transaktion wird aber nicht nur mitprotokolliert, es wird auch derNettoeffekt berechnet.

Um dies zu erfüllen haben die Trigger "��,'*�)�������������,��-,&��!����������� folgendes abstrahierteAussehen:

���,��-,&��!�����������!��"�� '$�)�,��������� ���'������1�!��2�� ���43��5"�� &�� ���13���#�6�"������13��������!-,&��!� � �������3��1���!7,%8��3�9"���7,&����������2:� #$��-����<;="��,&4�,#*� -����>;?#�6�"1�,#$��-�� �>;��@,6���&���� AB"����DC)�!-��,&�&������,��-,&��!�����������!�+%��E&�'5��C!F)61"����D@,6���&����GA5"�����2�� �HC+��-��,&�&����.�.�.�.��@,6���&������:"����DC)�!-��,&�&������,��-,&��!�����������!�+%��E&�'5��C!F)61"����D@,6���&����1�1"�����2�� �HC+��-��,&�&������'8����2�� �����!���

����2�� ���1I�� '��,%�&H�J���4��� #����4K,���������G���1" ����C)��-��,&�&��L%���&�'$�J����� �������!�������������'1#�6�"��E�������

C���2,�NM=3�-1"����!2��,&�-���C>OP2�7,%�3����!�1"����DC+��-�� &�&��L%,��&�'*�(���,���,������� � ��� ���:2 ��� %��.K������1Q��<R#�6�"��E���+S!I�� '��,%�&H�J���4"����1���,#�����K�� ���������E#�'4"��!��C)��-��,&�&��L%���&�'$�J����� �����!�!�����������K������1��� ���TRC���2,�NM=3�-1"����!2��,&�-���C>OP2�7,%�3����!�1"����DC+��-�� &�&��L%,��&�'*�)#$�,���,������� � ��� ���:2 ��� %��.K������1Q��<R#�6�"��E���+S!I�� '��,%�&H�J���4"����1����U!��"�� ��������K����E�������E#�'4"��!�4C+��-��,&�&��L%���&�'$�)#*��� �����!�!� � �������K������1��� ���TR����2�� ����S!I�� '��,%�&H�J���4"����1���,#�����K�� ���������E#�'4"��!��C)��-��,&�&��L%���&�'$�J����� �����!�!�����������"�� &�� ���+S!I�� '��,%�&V�!�1"�����C+��-�� &�&��L%,��&�'*�)#$�,���,������� � ��� ���8#*��"�3�6�6��,&����W ���,�,��U!���1X,#4Y�� ��%��!��"������T;

Page 37: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 2 Grundlagen der Integritätsüberwachung 31

Z�[4\�] ^�] _�Z�`�ab ]�c,_Nd=e�f1\�]�g!c�],^�f�] b>h c�i,j�e�`�Z!`1\�]�g b+k f�] ^�^�]Lj,Z�^�[*l(Z�l,m�_,g�Z�a�l ` k�n ]�o:c _�] j�_pq ]�`�`1r k<s\�] ^�] _�]+t!u�] [�],j�^VZ!`1\�]�g b+k f�] ^�^�]Lj,Z�^�[*l(Z�l,m�_,g�Z�a�l ` k�n ]�oq ]�`�`1`�] Z�` sb ]�c,_Nd=e�f1\�]�g!c�],^�f�] b>h c�i,j�e�`�Z!`1\�]�g b+k f�] ^�^�]Lj,Z�^�[*l)v$l,m�_,g�Z�a�l ` k�n ]�o:c _�] j�_q ]�`�`1r k<s\�] ^�] _�]+t!u�] [�],j�^ k v�[ \�Z!] b)k f�],^�^�] j,Z�^�[*l)v$l,m�_,g�Z�a�l ` k�n ]�o v�`�\ ] Z�` Z!`�c�]�g�_ t�u�],[�] j�^

Z!`:\�]�g b)k f�] ^�^�]Lj�ZE^�[*l \!l,m�_�g�Z�a�l ` k�n ]�o n Z�_4\�]�` k ^�_�]�` q ]�gE_�]�`q ]�`�`1`�] Z�` s

Z!`�c�] g�_ t�u�] [�],j�^8Z�`1\�Z!] b+k f�] ^�^�]8j,Z�^�[$l \�l�m�_,g�Z!a!l ` k�n ]�o n Z�_4\�]�` k ^�_�]�` q ] g�_�]�`

Bemerkung:

Die Berechung des Nettoeffekts wird anhand der TI durchgeführt. Wird nun einTupel erst gelöscht und dann dasselbe Tupel wieder eingefügt, so erhält es vomSystem einen neuen TI zugewiesen und nicht den TI, den das gelöschte Tupel hat.Daher ist hier eine kleine Abweichung von dem in 2.2.2 definierten Nettoeffekt zubeobachten. Das gelöschte Tupel würde also in der Menge D erscheinen, daseingefügte in der Menge I, und die eventuell auf diese Ereignisse reagierendenTrigger würden trotzdem beide ausgelöst. Anders ist es, wenn ein Tupel ersteingefügt, und dann gelöscht wird. Dieses Tupel erscheint, wie in der Definitionangegeben, in keiner der Mengen.

2.4.3 Analyse und Vergleich der Systeme

2.4.3.1 Allgemeines

Wie bereits in Abschnitt 2.3.2.2 angegeben, werden die Bedingungen einesTriggers mit in den Triggerrumpf geschrieben. Daher wird der Trigger wie auch in2.4.1 STARBURST [6], [8] allein durch das Vorkommen des Ereignisses gefeuert.

Prioritäten der Trigger werden im TSS durch die Reihenfolge gegeben, in der sie inder Datei stehen, in Starburst durch w g!]�i�]�\�]�c - und

[�e,^�^�e�x c+t Listen. Andere Systeme

wie z. B. Ariel [36] vergeben numerische Prioritäten. Der Nachteil an w g�]�i�]�\�]�c(t und[�e,^�^�e�x c+t Listen liegt u. a. darin, daß der Regel-Programmierer trotz einer geringen

Menge von Triggern nicht alle Konfliktsituationen4 (in denen die Möglichkeit bestehtmehr als einen Trigger zu feuern) voraussehen kann. Hierzu sind Möglichkeitengesucht, die die Triggerverarbeitung interaktiv durchlaufen (dazu weiteres inKapitel 3).

Die Verteilung von numerischen Prioritäten ist in der Hinsicht nachteilig, daßPrioritäten zwischen Triggern verteilt werden, die gar nichts miteinander zu tunhaben, und daher die Vergabe von Prioritäten für eine vollständig geordnete Mengevon Triggern nur zusätzlichen Aufwand macht.

4 Eine Konfliktsituation liegt vor, wenn mehrere Trigger zur selben Zeit ausgelöst werden können, undsich unterschiedliche DB-Zustände ergeben, die davon abhängig sind, welcher Trigger zuerstausgelöst wurde. Solche Situationen sollten daher vermieden werden.

Page 38: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 2 Grundlagen der Integritätsüberwachung 32

Bei den auslösenden Ereignissen wird im TSS auf die Angabe der Spalten ausEffizienzgründen verzichtet. In Starburst sind diese mit angegeben. Nachteilig imTSS ist hierbei, daß Regeln gefeuert werden, auch wenn keine Änderung auf derbetreffenden Spalte vorgenommen wurde.

2.4.3.2 Die zugrundeliegenden Ausführungsalgorithmen

Im TSS wird die Triggerverarbeitung am Ende der Transaktion durch die Prozedury�z,{�|�}�y�y(~E� aufgerufen. Die Prozedur läuft solange, bis kein Trigger mehr auszulösenist. Dabei wird die Bedingung jedes Triggers nach der Abarbeitung eines Triggersgetestet.

In STARBURST wird das Auslösen der Trigger durch die Funktion y }���~���zN�!�����!���+��~�� ��}gesteuert. Trotz unterschiedlicher Vorgehensweise wird der Nettoeffekt auf dieselbeWeise in beiden Systemen verarbeitet. In STARBURST ist der Nettoeffekt in derVariabelen E gespeichert, durch y }�� ~���zN���,�������+��~��,��} ständig aktualisiert, im TSS ist derNettoeffekt in den Tabellen � {,������~���{ ����y ��� gesichert, durch y�z { |�}�y�yJ~�� und densofortigen Triggern ���,�${+����~������)�����,������������y ��� ständig aktualisiert.

In Starburst wird eine Menge der ausgelösten Operationen aller Tabellenfestgehalten. Diese Menge wird mit � ~����T�����,�������� � bezeichnet. Nach Abarbeitungeines Triggers wird die Menge � ~!���/����� ���������� aktualisiert. D.h. eine eventuellausgelöste Operation wird, falls die Aktion des vorherigen Triggers die Operationrückgängig gemacht hat, aus der Menge � ~!���/����� ���������� entfernt. Die Menge� ~����/�����,�N��������� repräsentiert den Nettoeffekt der Transaktion.

Im Gegensatz hierzu wird der Nettoeffekt der Transaktion im TSS in denTransitionstabellen, also tabellenbezogen festgehalten. Um zu sehen, ob nochTrigger auszulösen sind, sind daher alle Transitionstabellen (zu jedem Trigger) aufWerte zu untersuchen. Da in Starburst eine tabellenübergreifende Mengefestgehalten wird, ist nur in der Menge � ~����T�����,�������� � nach Werten zu suchen.

Bemerkung:

Durch das TSS werden tatsächlich zu jedem Trigger Transitionstabellen angelegt:Existieren 2 Trigger, die auf derselben Tabelle definiert sind, zu zweiunterschiedlichen Ereignissen auf dieser Tabelle, so werden die Transitionstabellendoppelt geführt: Zu jedem Trigger werden die 3 Transitionstabellen, und auch die 3Hilfstabellen angelegt. Erfolgt nun eine Datenänderung in der Tabelle, auf der derTrigger definiert ist, und reagiert einer der Trigger auf dieses Ereignis, so wird dieDatenänderung in die Transitionstabellen beider Trigger geschrieben.

Einige kritische Fälle sollten jedoch anhand von Beispielen getestet werden, umu. a. auch den Ablauf der Systeme anhand von Beispielen zu betrachten:

• Es soll getestet werden, ob durch eine Transaktion ausgelöste Triggerwirklich wieder zurückgesetzt und damit nicht mehr ausgelöst werden, wennihr Ereignis nach einer Triggeraktion nicht mehr vorkommt.

Page 39: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 2 Grundlagen der Integritätsüberwachung 33

• Weiterhin soll überprüft werden, wenn ein Wert häufiger (mehr als 1 Mal)geändert wird, auf welchen alten Wert der Transitionstabellen er wiederzurückgesetzt wird. Ist es der Wert, als der Trigger zum ersten Malausgelöst wurde, oder wird er auf den Wert vom Transaktionsanfang ge-setzt?

Schematisch:

Transaktion Trigger r wirddurch ein ����� �����ausgelöst

Trigger r wird durch das �����������während der Triggerausfüh-rung noch einmal ausgelöst.

t1 → t1’ durch ein ����������� t1’ → t1’’ durchein ����� �����

t1’’ soll in Abhängigkeit desalten Wertes gesetzt werden.

Die Frage ist nun, ob der alte Wert der Wert t1 oder t1’ ist.

Beispiel 4

Folgende IBen seien gegeben:

IB2: aus dem Beispiel 3 (Wiederholung: Der Trigger ���� �¡ ¢,��£ wird ausgelöst, falls indie Tabelle ¤,¥!¦ Tupel eingefügt werden. Dann soll getestet werden, ob auch genug(mind. 2) Angestellte in dem Zug arbeiten. Weiteres entnehme man derBeispielbeschreibung.)

IB4: Wird ein Angestellter in die Tabelle §�¨*¡�©+ª�¦)«*¬�­+«�®�®!­)« eingefügt, so soll der Zug ausder Tabelle ¤,¥!¦ mit der Nummer 300 gelöscht werden.

Weiterhin beachte man die Reihenfolge: Der Trigger zur Überwachung der IB4, mitNamen ���� �¡)§�$¡�©+ª�¦)«*¬�­+«�®�®!­)« , soll vor dem Trigger zur Überwachung der IB2, mit Namen���� �¡ ¤ ¥�¦ , ausgeführt werden. (Im TSS wird dies durch die Reihenfolge der Trigger inder Datei gegeben, in STARBURST durch eine ¯�°,±�±�°�²  +³ oder � ´���µ������� +³ Klausel).

µ�´!�������1���,¯���´�´!���L��´���£�£���´1���� !¡�¤,¥�¦��¯�����´1�!�� �� ´��4°��1¤,¥!¦����µ,±���´��

µ,�,´� �°�´5µ,�,´�¡ ¤ ¥�¦�¡+ª�¶8��  ��,±���µ,�4¤,¥!¦�¡)ª�¶1¯�´�°�·¸��¡(�!�� !¡�¤,¥!¦¹�

²)º�� ´��L»4¼¸½� �� ±���µ �¾µ�°,���,�)½�¿JÀD¯�´!°!·Á§�¨*¡�©)ª!¦)«*¬�­)«E®�®�­+«²)º���´��¾©+¶�¨�« Âí�¬+Ä�Å!­:ÆÁ�<Ç�¤,¥!¦�¡)ª�¶)À+È

¢,��£�� �$·�·���´5�,�*· É�� ´�½�ÊJÀ)ÈÉ���£������¯8���� �� ´����!��£L��º����

§�¨�Ë�¬E¡ Ì,¥!­)ÄE¥�­ÍÇÎÄ�¥�­E¡)®+Â$ª�« ½�Ï�­+´��!£�£�� ´1���� �¡ ¤,¥!¦�²(��´!���E�� �£��,¯�Ð�º,´��Ç�Ñ$À°������1µ,�,´�¡�¤,¥�¦E¡)ª�¶Nȱ�°�°��

¯��,��µ º4µ,��´�¡ ¤,¥!¦�¡+ª�¶8��� ��°1¢,��£��,�*·�· � ´>È��Ò����D²+º����1µ ��´�¡�¤,¥�¦E¡)ª�¶�Ó���°,��¯�°,�����/È

§�¨�ËE¬�¡ Ì ¥�­+Ä�¥�­ÔÇÃÄ�¥!­�¡+®)Â$ª,«�½�ÏΧ�� ´B¤ ��£¾·(�E�¾����´�ª��*·�·���´ÕÏ×Ö�Ö1��°!¡�µ,º,��´�½�¢,��£��,�*·�· � ´�ÀÖ�ÖØÏÚÙ!°����,���1���!µ,º��¾� ����£��,¯�Ð�£,�D²���´������TÛ=� �:�!�1���!·�¤ ¥�¦8¢,�D² ������£¾©+ª�¦ÍÇÜ��´!É�� �������/Ñ$À+È

�����L±�°�°��/ȵ,±�°� ��:µ ��´�¡ ¤,¥!¦�¡)ª�¶È

�������E¯È�����/È

Page 40: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 2 Grundlagen der Integritätsüberwachung 34

Ý�Þ!ß�à�á�ß1â�ß,ã�ß�Þ�Þ!ß�âLá�Þ�ä�å�å�ß�Þ1ä�æ�ç!è+é�ê$è�ë)ì�í+î$ï�ð)î�ñ�ñ�ð+îà�ã�á�ß�Þ1ä!æ�ç�ß Þ�á4ò�æLé�ê*è�ë+ì�í)î*ï�ð)îEñ�ñ!ð)îó ß�å�ä�æä�ã8ä�æ�ç�ß Þ�á�ä!æ�åLá�ô�ß�æ

é�ê�õ�ïEè ö,÷!ð)øE÷�ðÍùÎø�÷�ðEè)ñ+ú$ì�î û�ü�ð+Þ�ä!å�å�ß Þ1ä�æ�ç�è)é�ê*è�ë+ì�íÍù�ùþýJä�Þ!â�àEÿ�ç�å�ß,ã���ô�ÞEáù������â�ß���ß á�ßLã�Þ!ò��,÷�í�ý+ô�ß�Þ!ß �,÷�íEè)ì������������

ß�æ�â�äEã��ß�æ�â��

Folgende Transaktion wurde durchgeführt:ä�æ�ç�ß�ÞEá8ä�æ,á�ò�� ÷�í���à���ÿ�ß�çÕû�������������� ����!�ÿ�æ�è"!�ß á��#���ä�æ�ç�ß�ÞEá8ä�æ,á�ò8é�ê$è�ë)ì�í+î$ï�ð)î�ñ�ñ�ð)î�� à$��ÿ�ß�çÕû&%�%�%'��� ï+à�ÿ�ß Þ'���(��)�*+���

Ablauf im TSS:

Die Trigger ä�æ�ç!è)é�ê$è�ë)ì�í+î$ï�ð+î�ñ�ñ�ð)î und ä�æ�ç!è�� ÷�í werden ausgelöst.

Die Tabellen �,÷!í und é�ê$è�ë)ì!í)î$ï�ð)î�ñ�ñ�ð+î waren vor der Transaktion mit denfolgenden Werten gefüllt:

é�ê*è�ë)ì!í)î*ï�ð)îEñ�ñ�ð+î �,÷!íë)ì!í�è)ì�� ì$ë õ î ë���ê�î�úÎð�ï+ø$,�ð �,÷!í�è)ì�� ë)ê"-�ë�.��!ð í ñ�î úÃï�è�!)î$í%$��� õ�ß�ä!ß�Þ /���� /���� *�� .�à!æ!è"! ÿ�æ%�%�� õ�ß�ä!ß�Þ�0 /���� /"%�� %$��� !�ÿ�æ�è�.,à�æ%$0�� ï�Ý,ô�ÿ��$1 /"%��%&��� ï�Ý,ô�ÿ��$1�0 /"%��

Nach Ausführen der Operationen sind beide Datensätze jeweils in denTabellen �,÷!í und é�ê$è�ë)ì!í)î$ï�ð)î�ñ�ñ�ð+î und in den Hilfstabellen ô�ä���ã*è(ä�èJä�æ�ç!è�� ÷�í undô�ä���ã$èJä�èJä�æ�ç�è)é�ê*è�ë+ì�í)î*ï�ð)îEñ�ñ!ð)î eingefügt.

Nach dem Aufruf der Prozedur 32 è Ý�ò�Jä�á erscheinen auf dem Bildschirmfolgende Meldungen:ð)Þ�ä�å�å�ß�Þ1ä�æ�ç!è)é�ê$è�ë)ì�íÔù�ù ý(ä�Þ�âGà�ÿ�ç�å�ß ã���ô,Þ�áé�ß Þ5ë�æ�å�ß�ç,á�ß�����á�ß4(ä�á8â�ß Þ8ì�ÿ���ß�Þ5%�%�%�6�ò�æ�æ á�ßGæ�ä�Ý ô�á�ß�ä!æ�å�ß,ã���å,á1ý ß Þ�â�ß�æ��Pâ à8â�ß�ÞÁà!æ�å�ß�å�ß ó ß�æ�ßë(Þ ó ß�äEá�ç�7���àEá311æ�ä!Ý,ô�á4ß�8�ä�ç á�ä�ß Þ�áNùø�ñ�9�ï": ñ;7�Þ�ò�Ý�ß�â ÿ�Þ!ß:ç ÿ�Ý�Ý�ß�ç�ç,ã�ÿ����<2¹Ý�ò�7���ß á�ß�âTùAn den Tabellen �,÷!í und é�ê*è�ë+ì�í)î*ï�ð+î�ñ�ñ!ð)î sind keine Änderungen vorgenommenworden, die Tabellen ô�ä���ã$èJä�èJä�æ�ç�è��,÷!í und ô�ä$��ã$èJä�è(ä!æ�ç!è+é�ê*è�ë)ì!í)î*ï�ð)îEñ�ñ�ð+î sind wiederleer.

D. h. der Trigger ä�æ�ç!è��,÷�í wurde nicht mehr ausgeführt, da die Operation, dieden Trigger ausgelöst hat, in dem Trigger ä�æ�ç!è+é�ê$è�ë)ì!í)î$ï�ð)î�ñ�ñ�ð+î aufgehoben wurde(durch das Löschen). Der Trigger ä�æ�ç�è��,÷!í wurde also nicht mehr ausgelöst.

Page 41: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 2 Grundlagen der Integritätsüberwachung 35

Ablauf in STARBURST:

Im folgenden beziehe ich mich auf die Nummerierung, die bei der Vorstellung desSTARBURST-Algorithmus auf Seite 27 angegeben wurde.

(1) Nach der Ausführung der Transaktion erhalten folgende Mengen neue Werte:=&>�? = TI1 :(300,400,’Wun_Wet’) und TI2 :(111,’Sauer’,385)@�A�B�C

∅ DFE3G @;C∅ H

(2) Der Trigger=&>�?

I�J E3K erhält die L�M�N >�?PO$=&>�Q$R TI1, der Trigger =&>�?

I�S�T�I�UPV&W�X#Y�ZPX$[�[Z�X erhältdie L"M�N >�?\O3=>�Q3R TI2.

(3) Der Trigger=&>�?

I�S�T�I�U�V&WPX�Y�ZPX$[�[&Z�X wird ausgewählt. (Hierzu sei vorausgesetzt, daßder Trigger

=&>�?I�J E3K in der

Q3R B�B R]�?-Liste des Triggers

=>�?IPS�T#I�U�VW�X�Y�Z�X�[�[&ZPX steht.)

(6) Die Aktion des Triggers =&>�?

I�S�T�I�UPV&W�X#Y�ZPX$[�[Z�X wird ausgeführt, d.h. der Zug mit derNummer 300 wird gelöscht.

(7) Die L"M�N >�?PO3=>�Q$R von =&>�?

I�S�T�I�UPV&W�X#Y�ZPX$[�[Z�X wird geändert: =&>�? C

∅ H(8) Die L"M�N >�?PO3=>�Q$R von

=&>�?I�J E3K

]\= M @ geändert: =&>�? C

∅ H(9) Es ist kein auszulösender Trigger mehr vorhanden.

D.h. der Trigger=&>�?

I�J E3K wird sowohl im TSS, als auch in STARBURST, nicht mehrausgeführt, obwohl er durch die Transaktion ausgelöst war.

Beispiel 5

Der Trigger ^�E3K > E�_�_ A M > soll ausgelöst werden, wenn nach einer Änderung in derTabelle J�`&W die Abfahrtszeit kleiner als 200 ist. Als „Reparaturmechanismus“ wirdfolgendes angeboten: Ist die neue Abfahrtszeit größer als 100, so wird die neueAbfahrtszeit um 90 verringert. Ist die neue Abfahrtszeit kleiner als 100, so wird dieneue Abfahrtszeit auf die alte Abfahrtszeit + 300 gesetzt.

Page 42: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 2 Grundlagen der Integritätsüberwachung 36

a�bc�d$e$c f�c�g$c�b�bc�fhe"b�i&j�j�c�b�k�l$j�m�l�n�n�c�b&md$g�e3c�bol$p�f�d�e3c q�m r�stf�c�a�u"d�b&ca�l�b&v�q�b�whl3p�f3x�k�l$c�j�cx�a�l"b i&vv�c�u3c�a�e;q�u$fx�k�l3j3x�m�bzy{q�u3f3x\d&|�g"d�}"b$e y{m�c~�x\d&|�g"d�}"b$e g"bqn�l�x�k�l$j�m�l#n�n�c�b&mhl~�}3c�b&chl��(m�c~�x\d&|�g"d�}"b$e��5�������l3p�fx�k�l3c�j�chl3p�fx�k�l3c�j�cx�a�l"b��bq~�e<��p�c��|�c�j�i&mi$g l3p�f�d�e"i&m�j�e�}3c�mq�p�c�mhl3p�fx�k�l3c�j�cx�a�l�b'�u3q�q�p g$c�e3a�} l3p�f3x�k�l$c�j�cx�a�l"b i&m�e3qhl3p�fx�k�l3c�j�c��c���i$e�~P}3c�mhl$p�fx�k�l3c�j�c3x�a�l�b&��m�q�e�g3q�l$m�f��i�g�l$p�f3x�k�l$c�j�c���m�c~�x+d&|�g"d$}�b$e;�5�$��� e�}3c�ml3p�f�d$e3c r�s&t�v�c�e�d|�g"d�}"b�e��5l3p�fx�k�l3c�j�c���m�c3~�x\d|�g�d$}"b�e������~�}3c�b&c k�l$jx�m�b��5l$p�fx�k�l$c�j�c���q�u$fx�k�l3j3x�m�bzyc�u3v�c l3p�f�d$e3c r�s&t�v�c�e�d|�g"d�}"b�e��5l3p�fx�k�l3c�j�c���q�u$fx\d|�g�d$}"b�e�� �����~�}3c�b&c k�l$jx�m�b��5l$p�fx�k�l$c�j�c���q�u$fx�k�l3j3x�m�bz�c�m�f5i$g �c�m�fhu3q�q�p��a�u$q�v�c�l$p�f3x�k�l$c�j�c3x�a�l"b'�c�m�f�i�g��c�m�f��

Ablauf im TSS:

Vor der Triggerausführung steht u. a. folgender Wert in der Tabelle ZUG:r�st$x���� �P�"�<�P���&� t��"���¡ �x"¢��#t£ ��� �$w�� �"dmx"¢�l3m

Folgende Transaktion, die aus nur einer Operation besteht, wird ausgeführt:l3p�f�d$e$c�r�s&t�v�c�e��P�"�¤������ �¥� £ ��~�}$c�b&c r�s&t$xP����� £ ��� �Nach Aufruf der Prozedur n3��x�a�q3n�n\i�e wird der Trigger k�l$j�m�l#n�n�c�b&m das erste Malausgelöst. Dadurch wird die �����<�����&� auf den Wert ¦ � gesetzt. Dann wird der Trigger,aufgrund des l3p�f�d$e$c Befehls, in der Aktion des Triggers k�l$j�m�l�n�n�c�bm�y ein zweites Malausgelöst. Die ���"�¤�����&� wird nun, da sie kleiner als 100 ist, auf den alten Wert + 300gesetzt. Der Trigger k�l$j�m�l�n�n�c�bm wird zwar ein drittes Mal ausgelöst, hat aber keineAuswirkungen, da es keine r�s&t�x������5����� gibt, die geändert wurden.

Der wichtige Ausschnitt aus der Tabelle ZUG sieht nun folgendermaßen aus:r�st$x���� �P�"�<�P���&� t��"���¡ �x"¢��#t£ ��� § £ � �"dmx"¢�l3m

5 Der Cursor wäre hier auch durch 2 Mengen l3p�f�d�e3c©ªv ersetzbar.

Page 43: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 2 Grundlagen der Integritätsüberwachung 37

D. h. mit dem alten Wert in einer Tabelle wird der Wert bezeichnet, der vor derÄnderung vorhanden war. Mit der obigen Schreibweise wäre dies also der Wert t1’.

Ablauf in STARBURST:

(1) Die Mengen «&¬�­ , ®�¯�° und ±3²�® werden neu gefüllt:±3²�®o³�´zµ&¶z·�¸#¹�º�º »½¼$¾�º�»�¿½À�Á&¬Â�Ã�±3¬�¿�ÄŹ�º�º »¡¶$¹�º�»�¿½À"Á¬Â"Ã�±3¬�¿�Æ«&¬�­o³ ∅ »{®�¯�°�³ ∅ Ç(2) Der Trigger ±3²�®Â�È�±3¯�É�¯ erhält die Ê"Ë�Á¬�­PÌ$«&¬�Í3Î TI1.

(3) Der Trigger ±3²�®Â�È�±3¯�É�¯ wird ausgewählt.

(4) + (5) Î�°3®\̤­�Ê"Á$Ê$¯ ← Ï�±"Ë�Ë&¯�¬�Ê�Ì�­�Ê"Á�Ê3¯ , d.h. in Î�°3®\̤­�Ê"Á$Ê$¯ steht nun das Tupel¸�¹�º�º »¡¶$¹�º�»�¿½À"Á¬Â"Ã�±3¬�¿�Æ mit den alten Werten ¸�¹�º�º�»Å¼3¾�º »�¿½À�Á&¬3Â"Ã�±$¬�¿#Æ�Ç

(6) Die Aktion des Triggers ±3²�®3Â�È�±3¯�É�¯ wird ausgeführt, d.h. beim Zug mit der Nummer700 wird die Abfahrtszeit auf den Wert 170 - 90 = 80 gesetzt.

(7) Die Ê"Ë�Á&¬�­PÌ3«¬�Í$Î von ±3²�®3Â�È�±3¯�É�¯ wird geändert:±3²�® = TI1: (700,170,’Han_Wun’;700,80,’Han_Wun’)

(8) Es sind keine weiteren Trigger vorhanden, die eine neue Ê"Ë�Á¬�­\Ì3«&¬�Í3Î erhalten.

(9) Trigger ±3²�®Â�È�±3¯�É�¯ wird ausgelöst.

(4) + (5) Î�°3®\̤­�Ê�Á$Ê$¯ ← Ï�±"Ë�˯�¬�Ê�̤­�Ê"Á$Ê$¯ , d.h. in Î�°3®\̤­�Ê�Á$Ê$¯ steht nun das Tupel¸�¹�º�º »�Ð�º »�¿ÅÀ"Á&¬3Â"Ã�±$¬�¿#Æ mit den alten Werten ¸�¹�º�º »¡¶$¹�º�»�¿½À"Á¬Â"Ã�±3¬�¿�Æ�Ç

(6) Die Aktion des Triggers ±3²�®3Â�È�±3¯�É�¯ wird ausgeführt, d.h. beim Zug mit der Nummer700 wird die Abfahrtszeit auf den alten Wert +300, also auf 170 + 300 = 470gesetzt.

(7) Die Ê"Ë�Á&¬�­PÌ3«¬�Í$Î von ±3²�®3Â�È�±3¯�É�¯ wird geändert:±3²�®o³ ∅

(8) Es sind keine weiteren Trigger vorhanden, die eine neue Ê"Ë�Á&¬�­\Ì3«¬�Í3Î erhalten.

(9) Es sind keine weiteren Trigger auszulösen.

D.h. auch die Verarbeitung der Werte in den Transitionstabellen ist in beidenProgrammen dieselbe.

ERGEBNIS:

Die Ausführung der verzögerten Trigger ist in STARBURST und in dem Programmvon M. Winkler gleich. Die Systeme besitzen einen starken Mechanismus zurEingabe der verzögerten Trigger.

Wie bereits erwähnt, unterscheidet sich die Berechnung des Nettoeffekts im TSSleicht von der in 2.2.2 angegebenen Definition. Da in STARBURST der Nettoeffektmit Hilfe der Mengen «&¬�­�» ±3²�® und ®�¯�° berechnet wird, und die Inhalte dieser Mengenauch immer den TI beinhalten, ist zu vermuten, daß die Berechnung desNettoeffekts sich in der selben Weise von der Definition unterscheidet wie im TSS.Jedoch ist dies von der Implementation der Funktion Ñ�Î�®�«�Í�Ò ÌÊ"Ë�Á&¬�­\Ì3«&¬�Í3Î abhängig.

Page 44: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 2 Grundlagen der Integritätsüberwachung 38

Die Prioritäten, die in STARBURST durch Ó�ÔÕ�Ö�Õ�×�Õ�Ø und Ù3Ú�Û�Û3ÚÜ�Ø -Listen gegeben sinderscheinen sinnvoll, daher wird das TSS um diese Möglichkeit der Eingabe vonPrioritäten erweitert.

Da mit den verzögerten Triggern aber auch erhebliche Probleme im Programmablaufentstehen können, (welche, darauf wird im Kapitel 3 eingegangen) sind die nunfolgenden Analysen für Triggermengen unbedingt notwendig.

Page 45: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

39

Kapitel 3

Analyse von Triggermengen

Eine gegebene Menge von Triggern verhält sich zur Laufzeit eventuell anders, alses vorgesehen war. Möglichkeiten dieses unvorhergesehenen Verhalten und dazu-gehörige Analysen werden vorgestellt.

3.1 Eigenschaf ten von T r iggermengen

Trigger in DB-Systemen liefern einen starken Mechanismus für viele DB-Zusätze.Sie erlauben DB-Änderungen, die automatisch ausgeführt werden, wenn gewisseEreignisse vorkommen oder gewisse Bedingungen erfüllt werden. Durch diesenAutomatismus wird ein DB-System zum aktiven DB-System.

Jedoch liegt ein Problem aktiver DBS in der korrekten Anwendung der Trigger: DieVorhersage, wie sich eine Menge von Triggern verhält, kann kompöiziert sein. Denneinige Trigger werden anfangs verwendet und lösen weitere Trigger aus. Diesesunstrukturierte, unvorhersehbare und oft nicht-deterministische Verhalten ist nichterwünscht.

Die Probleme, die sich ergeben, lassen sich in zwei Gruppen teilen:

• TERMINIERUNG: Garantiert die Verarbeitung der Trigger nach einer Mengevon DB-Operationen, in einem bestimmten DB-Zustand zu enden?

• KONFLUENZ: Hängt der DB-Endzustand davon ab, welcher nicht priorisierteTrigger zuerst ausgelöst wurde? Die Problematik bei der Konfluenz liegtdarin, daß durch eine Transaktion mehrere Trigger gleichzeitig ausgelöstwerden können. Sind alle ausgelösten Trigger nicht priorisiert und werdendie Trigger in allen möglichen unterschiedlichen Reihenfolgen ausgeführtund ist der DB-Zustand nach der Ausführung jedesmal derselbe, so ist dieTriggermenge konfluent.

Bemerkung 1:

Man könnte zu den Eigenschaften Terminierung und Konfluenz eine weitereEigenschaft hinzufügen:

Page 46: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 3 Analyse von Triggermengen 40

• BEOBACHTBARER DETERMINISMUS: Wenn die Aktion eines Triggersnach außen sichtbar ist (z.B., wenn es Daten-Wiedergewinnung oder einRollback-Statement erfordert), dann sagen wir, sie ist beobachtbar. Kann dieAusführungsreihenfolge von Triggern ohne Priorität einen Unterschied in derReihenfolge der beobachtbaren Aktionen ausmachen? Wenn nein, dann istdie Triggermenge beobachtbar deterministisch.

Da der Unterschied zwischen Konfluenz und beobachtbaren Determinismus nichtoffensichtlich ist, folgen dazu Erläuterungen:

Konfluenz ist erfüllt, auch wenn die Trigger in unterschiedlicher Reihenfolgeabgearbeitet werden, aber der Endzustand in der DB immer derselbe ist. BeiKonfluenz wird nur der DB-Endzustand nach Abarbeitung der Trigger betrachtet,beim beobachtbaren Determinismus aber wird jeder DB-Zwischen-Zustandbetrachtet, der durch die Abarbeitung der Trigger entsteht.

Ist eine Menge von Triggern beobachtbar deterministisch, so ist sie auch konfluent.Ist eine Menge konfluent, so ist sie nicht automatisch beobachtbar deterministisch.

Angenommen eine Menge von drei Triggern sei gegeben. Weiterhin sei dieseMenge konfluent. D. h. der DB-Endzustand ist unabhängig von der Ausführungs-reihenfolge der Trigger. Einer der Trigger gebe eine Meldung aus, die die DB-Änderungen betrifft, die die anderen Trigger ausführen. Ist die Meldung beiunterschiedlicher Ausführungsreihenfolge der Trigger immer gleich, so ist die Mengeder Trigger beobachtbar deterministisch, sonst nicht.

Die Eigenschaft beobachtbarer Determinismus wird im folgenden nicht genaueruntersucht, da uns nicht jeder einzelne Schritt der Ausführung der Triggerinteressiert, sondern nur das Endprodukt.

Bemerkung 2:

Sind die Eigenschaften der Triggermengen vom aktuellen DB-Zustand unabhängig,so spricht man von globaler Terminierung und globaler Konfluenz. Hängen dieEigenschaften von der Ausführungszeit ab, so spricht man von lokaler Terminierungund lokaler Konfluenz.

3.1.1 Grundlage für weitere Beispiele

Da die im vorigen Kapitel angegebenen Beispiele hier nicht ausreichen werden, sindweitere Trigger definiert. Diese Trigger beziehen sich auf ein vereinfachtes DB-Schema von Verkäufern. Dazu gibt es drei Tabellen:è�é&êPë�ì�íPë$î�î&í�ë�ï�é�ð ñFð�è�éêòñóê�ë�ô�è�îí'õ

ö3÷�é�ø&ì'ïÅè�éê$ù�é�ð�ñFö"ë#í�ð�è�ê'õú�ë$ð�û�è�ø�ü�ïÅè�é&ê�ù�é�ð ñ{ý�÷�é#è"í ñþè�é3ÿ3è�ô�î�õ

Die Tabelle è�éê�ë�ì�í�ë�î�î&íPë

enthält von jedem Angestellten seinen ð�èPé&ê

und sein ê�ë$ô#è�îí

,die Tabelle

ö3÷�é�ø&ì enthält von jedem Angestellten einen Bonus-

ö"ë#í�ð#è"ê und die Tabelleú�ë$ð�û�èPø"ü

enthält von jedem Angestellten die è�é$ÿèPô�î

der verkauften Waren in Bezug aufden

ý�÷�é�è"í.

Zu diesen Tabellen sollen folgende verzögerte Trigger definiert werden:

Page 47: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 3 Analyse von Triggermengen 41

(Die formalen Formulierungen der Tabellen in der DB und der Trigger entnehmeman dem Anhang A)

• ������������ ���� :( ��� ) Wenn der �������� �� in der Tabelle ��������� um mehr als 100 erhöhtwird, so soll der �� ���� des Angestellten um 1 erhöht werden.

• �� �������������� : ( ��� ) Wenn der �� ���� des Angestellten geändert wird, so soll der�������� �� in der Tabelle ��������� um das 10-fache des neuen �� ���� es erhöht werden.

• ������������������� ���� : ( ��� ) Wird die ����� ��� der verkauften Waren in der Tabelle �������� ����geändert, und ist diese ����� ��� > 50, so wird das ������ � �� des ������������� � ������ um 10erhöht.

• ��������!������������������� ���� : ( ����� ) Wird die ����� ��� der verkauften Waren in der Tabelle�������� ���� geändert, und ist diese ����� ��� > 100, so wird der �� ���� des ������������� � ������um 1 erhöht.

• "� $#$��������%���� - �� ���� : ( "�� ) Wird der �� ���� des ������������� � ������ geändert, und ist dieser��&�'�( = 15, so wird das ������ � �� des ������������� � ������ um 10 % erhöht. (Hier wirdvorausgesetzt, daß der �� ���� der ������������� � ������ nur erhöht, nicht aber vermindertwird.)

• ��������� - �� ���� : ( ��� ) Wird der �� ���� eines ������������� � ������ geändert, so wird einediesbezügliche Meldung mit der Nummer des ������������� � ������ , dem neuen �� ����und dem ������ � �� ausgegeben.

3.1.2 Beispiele

Beispiel 1

Die Trigger ���������)��� ���� und �� ����)���������� terminieren nicht immer. Wird der Rang einesAngestellten um mehr als 10 geändert, oder erhält ein Angestellter, mit einem Rangüber 10, einen ��*�'�+�, > 100, so rufen sich die Trigger ���$�������� ���� und �� ����)����$����� immergegenseitig auf:

Wird der Rang eines Angestellten um 10 erhöht, so löst dies den Trigger �� ��������������aus. In der Aktion des Triggers �� ����)����$����� wird der �������� �� in der Tabelle ��������� um das10-fache des neuen Ranges erhöht, also um mindestens 100. Der Trigger ���������)��� ����wird ausgelöst. Hier wird der �� ���� des ������������� � ������ um 1 erhöht, da der �������� �� in derTabelle ��������� um mehr als 100 erhöht wurde. Dadurch wird wieder der Trigger �� ������������� ausgelöst. Dieser erhöht wieder den �������� �� in der Tabelle ���$����� um mehr als100, wodurch wieder der Trigger ������������ ���� ausgelöst wird. Dies würde immer soweiterlaufen.

Erhält ein Angestellter (mit einem �� ���� > 10) einen ��������� > 100, so wird der Trigger���������)��� ���� ausgelöst. Durch Ausführen der Aktion des Triggers ������������ ���� wird derRang des Angestellten um 1 erhöht. Dies wiederum löst den Trigger �� �������������� aus.Auch hier würden sich die Trigger immer wieder gegenseitig auslösen:

Page 48: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 3 Analyse von Triggermengen 42

Beispiel 2

Die Trigger -�.�/�0�1�2�3�0�1�4�5�.�6 , 7�0�8�1�29-�.�/�0�1�2:3�0�1�4�5�.�6 und ;�5$<�8�7�0�=�>�0�1�2�1�5�=�- werden betrachtet.Würde man zwischen den Triggern ;�5$<$8�7�0�=�>�0�1�2�1�5�=�- und -�.�/�0�1�2:3�0�1�4�5�.�6 keine Prioritätensetzen, so wäre es klar, daß die Trigger nicht konfluent sind. (Beide Trigger erhöhendas Gehalt des Angestellten, der Trigger -�.�/�0�1�2:3�0�1�4�5�.�6 erhöht das Gehalt um 10, derTrigger ;�5$<$8�7�0�=�>�0�1�2�1�5�=�- erhöht das Gehalt um 10 %. Führt man die Trigger inunterschiedlicher Reihenfolge aus, so ist es offensichtlich, daß es in den meistenFällen unterschiedliche Ergebnisse für das Gehalt erhält.) Außerdem ist esoffensichtlich, daß zwischen den Triggern 7�0�8�1�29-�.�/�0�1�2:3�0�1�4�5�.�6 und ;�5�<�8�7�0�=�>�0�1�2�1�5�=�- eineOrdnung bestehen muß. (Werden beide Trigger gleichzeitig ausgelöst, so kann derTrigger 7�0�8�1�2!-�.�/�0�1�2�3�0�1�4�5�.�6 den Rang des Angestellten auf 16 erhöhen, bevor derTrigger ;�5�<�8�7�0�=�>�0�1�2�1�5�=�- ausgeführt wird und sich somit das Gehalt des Angestelltennicht ändert.)

Es sei also festgelegt, daß die Trigger -�.�/�0�1�2:3�0�1�4�5�.�6 und 7�0�8�1�2!-�.�/�0�1�2:3�0�1�4�5�.�6 vor demTrigger ;�5$<$8�7�0�=�>�0�1�2�1�5�=�- ausgeführt werden sollen.

Jedoch genügt auch diese Reihenfolge nicht, um Konfluenz zu garantieren:

Angenommen, die Trigger -�.�/�0�1�2:3�0�1�4�5�.�6 und 7�0�8�1�29-�.�/�0�1�2�3�0�1�4�5�.�6 werden zur gleichenZeit ausgelöst. Weiterhin habe ein Angestellter mit einem 1�5�=�-@?BA�C und einen -�0�8�5�D�/?BE�F einen neuen G�0�/�1�5�- in der Tabelle G�H$=�.�7 , der um mehr als 100 geändert wurde.Wird der Trigger -�.�/�0�1�2:3�0�1�4�5�.�6 als Erstes ausgeführt, so ändert sich das -�0�8�5�D�/ desAngestellten auf 70, der Trigger 7�0�8�1�2!-�.�/�0�1�2�3�0�1�4�5�.�6 ändert den 1�5�=�- des Angestelltenauf 15 und der Trigger ;�5$<$8�7�0�=�>�0�1�2�1�5�=�- wird ausgelöst und ändert das -�0�8�5�D�/ desAngestellten auf 77. Würde aber nicht der Trigger -�.�/�0�1�2�3�0�1�4�5�.�6 , sondern 7�0�8�1�2!-�.�/�0�1�23�0�1�4�5�.�6 als Erstes ausgeführt werden, so würde durch die Aktion des Triggers 7�0�8�1�2-�.�/�0�1�2:3�0�1�4�5�.�6 der 1�5�=�- des Angestellten auf 15 steigen, ;�5�<�8�7�0�=�>�0�1�2�1�5�=�- wird ausgelöst,wodurch das -�0�8�5�D�/ des Angestellten auf 66 wächst, und am Ende wird noch -�.�/�0�1�23�0�1�4�5�.�6 ausgeführt, wodurch das -�0�8�5�D�/ um 10, also auf 76 erhöht wird.

D.h. die drei Trigger terminieren, sind aber nicht konfluent.

Die Analyse von Triggermengen wird mit Hilfe von Ausführungsgraphendurchgeführt.

Page 49: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 3 Analyse von Triggermengen 43

3 .2 Ausführungsgraphen

Definition: Ein gerichteter Ausführungsgraph TGR stellt die funktionalenAbhängigkeiten der Triggermenge R = {r1,...} graphisch dar. Unter funktionalenAbhängigkeiten ist der Zusammenhang der Trigger untereinander zu verstehen:Wird ein Trigger ausgelöst, so stellt sich die Frage, wie sich die anderen Triggerdaraufhin verhalten - ändert sich nichts, werden weitere Trigger ausgelöst oderbesteht die Möglichkeit, daß andere Trigger dadurch nicht mehr ausgelöst werden.Der gerichtete Ausführungsgraph TGR besteht aus (erweiterten) DB-Zuständen(=Knoten) und gerichteten Kanten.

Jeder Knoten in einem Ausführungsgraphen hat zwei Komponenten:

1. den DB-Zustand D (bzw. eine Äquivalenzklasse von DB-Zuständen D),

2. eine Menge TR, die jeden ausgelösten Trigger und

die damit verbundenen Transitionstabellen enthält. 6

Dieser Zustand wird mit S = (D,TR) bezeichnet. Für jeden Ausführungsgraphen TGR

gibt es genau einen Anfangszustand. Der Anfangszustand des Ausführungsgraphenentspricht dem Zustand der DB, wenn man die Triggerverarbeitung startet.

Die gerichteten Ausführungsgraphen bieten die Möglichkeit einer lokalen Analyse.Das zeigt Möglichkeiten, wie man zu einer globalen Analyse gelangt.

Zwei Knoten werden durch eine gerichtete Kante verbunden, wenn ein Triggerausgelöst wurde und man von dem einen in den anderen DB-Zustand gelangt. DerName des ausgewählten Triggers wird neben die Kante geschrieben. In denBeispielen weiter unten werden die Trigger r1 und r2 verwendet. Mehrere Kantenresultieren durch Auswählen von unterschiedlichen Triggern, wenn mehr als einTrigger möglich ist. Demnach hat ein Graph einer total geordneten Menge vonTriggern immer von jedem DB-Zustand in einen nächsten nur eine Kante. Null, einoder mehrere Endzustände zeigen, daß die Triggerverarbeitung enden kann. Tretenin den Graphen Zyklen auf, so kann es sein, daß der Graph unendlich lange Pfadeenthält, und somit die Menge der Trigger nicht terminiert. (vgl. Beispiel 4)

Definition:

Der Endknoten (bzw. mehrere Endknoten) in einem Ausführungsgraphen sinddadurch charakterisiert, daß keine weiteren Trigger mehr auszulösen sind.

3.2.1 Das Zeichnen eines Ausführungsgraphen

Beim Zeichnen eines Ausführungsgraphen (im folgenden AG) beginnt man miteinem Anfangsknoten. Dieser Anfangsknoten repräsentiert einen möglichen Zustandnach Ausführung der DB-Operationen und vor Ausführung der Trigger. In diesemAnfangsknoten sollten ein oder mehrere DB-Operationen ausgeführt worden sein,die Trigger auslösen. Eine Kante entsteht, wenn man durch Ausführen der Aktioneines Triggers (unter Beachtung der Prioritäten) von einem Knoten in denselbenoder einen anderen Knoten gelangt. Werden in einem Knoten S n Trigger mitderselben Priorität ausgelöst, so entstehen auch n von S ausgehende Kanten.

6 Durch die Angabe der Transitionstabellen steht die Menge der ausgelösten Trigger auch fest. Sie istaus den Transitionstabellen abzulesen und wird daher nicht extra angegeben.

Page 50: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 3 Analyse von Triggermengen 44

In einem AG entspricht ein Knoten immer dem, daß eine Menge von Triggernausgelöst ist, also Einträge in den Transitionstabellen vorhanden sind, undBedingungen an die zugrundeliegende Datenmenge gestellt wird. Eine Ausnahmehierbei bildet der Endknoten - auch mehrere sind möglich: es sind keine Triggermehr ausgelöst, aber es werden auch hier Bedingungen an die Datenmengegestellt.

Mehrere und unterschiedliche AG entstehen aus der Annahme vonunterschiedlichen Anfangszuständen. Dabei gibt es aber höchstens endlich vieleGraphen.

Schreibweise:

Ausgehend vom Knoten S wird die Aktion des Triggers r ausgeführt, man gelangt ineinen neuen Knoten S’:

S →r S’.

3.2.2 Beispiele von Ausführungsgraphen

Beispiel 3

Man betrachte die Trigger I�J�K�L�MN�O�P�K�Q und O�P�K�Q)N�I�J�K�L�M aus Beispiel 1.

Voraussetzungen:

Folgende Einträge seien im DB-Zustand D in den Tabellen vorhanden:

Tabelle P�K�Q�R�M�S�R�T�T�S�RK�O O�P�K�Q Q�R�U�P�T�SV�W X W$Y�Y

Tabelle I�J�K�L�MP�K�Q�Z�K�O I�R�S�O�P�QV�W Y

Durch eine Änderung wird der Rang des Angestellten auf 16 gesetzt:[�\�]�^�_�` P�K�Q�R�M�S�R�T�T�S�Rba `�_ O�P�K�Qdcfe Xhg�i `�j�` K�Obc V�W

;

Man gelangt in den DB-Zustand D1. Die Transitionstabellen wurden dadurch gefülltund sehen folgendermaßen aus:

Transitionstabelle zum Trigger O�P�K�Q)N�I�J�K�L�M (TR_RB1)7 :

J$T�k K�R�lSnm K�O O�P�K�Q Q�R�U�P�T�S K�O O�P�K�Q Q�R�U�P�T�S

7 Die Transitionstabellen wurden mit einer Bezeichnung versehen, die aus den Buchstaben TRbesteht, woran der der Name des Triggers, zu dem die Transitionstabelle gehört, mit einemUnterstrich angehängt wurde. Die letzte Ziffer der Bezeichnung ist eine Zahl, die durchnummeriert dieunterschiedlichen Transitionstabellen zu einem Trigger festhält.

Page 51: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 3 Analyse von Triggermengen 45

o�o�o p�q r q$s�s p�q t�r q�s�s

Der Knoten S1 hat damit die Komponenten S1=(D1, TR_RB1).

Die Transitionstabelle u�v�w�x�yz�{�|�w�} ist im Moment noch leer.

Wird der Trigger u�v$w�x�yz�{�|�w�} ausgeführt, so wird in der Tabelle u�v$w�x�y der Betrag umdas 10fache des neuen Ranges erhöht. Man gelangt in den KnotenS2 = (D2,TR_BR1), die Transitionstabellen haben nun die folgenden Einträge:

Die Transitionstabelle des Triggers {�|�w�}z�u�v$w�x�y ist leer, die Transitionstabelle desTriggers u�v�w�x�y)z�{�|�w�} (TR_BR1):

v$~�� w�����n� |�w�}���w�{ u�� � {�|�} |�w�}���w�{ u�� � {�|�}o�o�o p�q s p�q t�r�s

D. h. der Trigger {�|�w�}z�u�v$w�x�y wird durch die Aktion des Triggers u�v�w�x�yz�{�|�w�} ausgelöst,man gelangt also in den Knoten S3=(D3, TR_RB2), die Transitionstabellen sehenfolgendermaßen aus:

Die Transitionstabelle des Triggers u�v$w�x�y)z�{�|�w�} ist leer, die Transitionstabelle desTriggers {�|�w�}z�u�v�w�x�y (TR_RB2):

v�~�� w�����n� w�{ {�|�w�} }�����|�~ � w�{ {�|�w�} }�����|�~ �

o�o�o p�q t�r q$s�s p�q t�� q$s�s

Durch die Aktion des Triggers {�|�w�})z�u�v$w�x�y wird wieder der Trigger u�v�w�x�y)z�{�|�w�}aufgerufen. Anhand der Werte in den Transitionstabellen ist zu erkennen, daß sichdie Trigger immer wieder gegenseitig aufrufen. D.h. es ergibt sich der unvollständigeAusführungsgraph:

Page 52: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 3 Analyse von Triggermengen 46

Auf die Unvollständigkeit wird in einem späteren Abschnitt (siehe 3.2) noch einmaleingegangen, insbesondere auch auf dieses Beispiel.

Beispiel 4

Voraussetzungen:

Unter anderem stehe folgender Eintrag in der Tabelle ������������� :����������� ���$����� �������������� ��� �

Man betrachte nur die Trigger ���������!������������������������� �����������!��������������������������� und �������������������������( ��������� - ������������� ). Die Trigger ���������9�����������:������������� und �����������:������������� seien nicht priorisiert.Die anderen Trigger sollen im Moment nicht berücksichtigt werden. Nun wird diefolgende Transaktion, die aus nur einer Datenänderungsoperation besteht,durchgeführt:

�� �¡�¢�£�¤ �������������b¥ ¤�£ �����������b¦ ��§©¨�ª ¤�«�¤ �����������b¦ ���­¬

Durch diese Datenänderung sind die Trigger ���������!������������������������� und �������������������������ausgelöst, d.h. die Transitionstabellen haben folgendes Aussehen:

Page 53: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 3 Analyse von Triggermengen 47

Transitionstabelle ®�¯�°�±�²�³�´�±�²�µ�¶�¯�· (TR_GV0) und ¸�±�¹�²�³!®�¯�°�±�²�³:´�±�²�µ�¶�¯�· (TR_SGV0):º�»�¼ ½ ±�¾

°n¿ ¶ ½ ®�À ½ ² Á º�½ ¶�° ¶ ½� ¶�¹ » ¶ ½ ®�À ½ ² Á º�½ ¶�° ¶ ½� ¶�¹ »

Ã�Ã�à Ä�Å Ä�Ä Æ Ä�Å Ä�Ä Å�Ç

Der Knoten S besteht also aus den Komponenten D0 und der MengeTR0 = {TR_GV0,TR_SGV0}. D0 sei der DB-Zustand nach der Ausführung derTransaktion, aber vor der Ausführung der Trigger.

Wird nun, ausgehend vom Knoten S, die Aktion des Triggers ®�¯�°�±�²�³�´�±�²�µ�¶�¯�·ausgeführt, so gelangt man in einen neuen Knoten S1= (D1, TR1) mit:

¼�ÈÊÉ˼�Ì∧ ÍÏÎ�Ð�Ñ�Ò�Ó�Ô©¶ ½ ®�±��°�± »�» °�±bÕ�Ô�Ób®�±�¹�¶ » ° É ®�±�¹�¶ » °×Ö Ä�ÆhØ�Ù Ô�Ú�Ô©¶ ½ ®�À ½ ² É Ä�Å­Û

TR1 = {TR_SGV0}

(Da der Trigger ®�¯�°�±�²�³:´�±�²�µ�¶�¯�· ausgeführt wurde und sich nicht selbst wiederaufgerufen hat, ist die Transitionstabelle des Triggers nun leer und wird hier nichtmehr aufgeführt. Dies wird auch für die folgenden leeren Transitionstabellen soaufgeschrieben.)

Wird nun, ausgehend vom Knoten S, die Aktion des Triggers ¸�±�¹�²�³!®�¯�°�±�²�³�´�±�²�µ�¶�¯�·ausgeführt, so gelangt man in einen neuen Knoten S2= (D0, TR2) mit:

TR2 = {TR_GV0}

(Der DB-Zustand bleibt derselbe, da durch die Aktion des Triggers ¸�±�¹�²�³!®�¯�°�±�²�³�´�±�²�µ�¶�¯�·keine Datenänderungen vorgenommen werden.)

Wird nun, ausgehend vom Knoten S1, die Aktion des Triggers ¸�±�¹�²�³!®�¯�°�±�²�³�´�±�²�µ�¶�¯�·ausgeführt, so gelangt man in einen weiteren Knoten S’= (D1, ∅).

(Der DB-Zustand ist derselbe wie in S1, da durch die Aktion des Triggers ¸�±�¹�²�³!®�¯�°�±�²�³´�±�²�µ�¶�¯�· auch hier keine Datenänderungen vorgenommen werden.)

Wird nun ausgehend vom Knoten S2 die Aktion des Triggers ®�¯�°�±�²�³�´�±�²�µ�¶�¯�·ausgeführt, so gelangt man auch zum Knoten S’ = (D1, ∅).

Nach diesen Vorüberlegungen ist es nun möglich einen Ausführungsgraphen zuzeichnen:

8 Die Notation ∧ bedeutet, daß die Datenänderungsoperation, die rechts vom Zeichen steht, noch ander Datenmenge, die links vom Zeichen steht vorgenommen werden muß. Folgen weitere ∧-Zeichen,so sind die Datenänderungsoperationen der Reihe (die Änderung, die als erstes kommt, soll auch alserstes durchgeführt werden) nach, an der Datenmenge, die links vom Zeichen steht, durchzuführen.

Page 54: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 3 Analyse von Triggermengen 48

Jedoch ist dies nur ein Ausführungsgraph:

Für den zweiten AG gehe man vom selben Eintrag, wie oben, in der Tabelle Ü�Ý�Þ�ß�à�á�âaus:

à�ã�ä�å�ã�Þ æ�ç$ã�à�è à�ã�é�à�ê�ëì�í ì�ì î

Man betrachte wieder die Trigger ï�Ý�ê�Þ�ð!ä�á�è�Ý�Þ�ð:Ü�Ý�Þ�ß�à�á�â und ä�á�è�Ý�Þ�ð:Ü�Ý�Þ�ß�à�á�â . Nun wird diefolgende Transaktion, die aus nur einer Datenänderungsoperation besteht,durchgeführt:

ñ�ò�ó�ô�õ�ö Ü�Ý�Þ�ß�à�á�âb÷ ö�õ à�ã�é�à�ê�ëbø ì�ù�ú©û�ü ö�ý�ö à�ã�ä�å�ã�Þbø ì�í;

Durch diese Datenänderung sind die Trigger ï�Ý�ê�Þ�ð!ä�á�è�Ý�Þ�ð�Ü�Ý�Þ�ß�à�á�â und ä�á�è�Ý�Þ�ð�Ü�Ý�Þ�ß�à�á�âausgelöst, d.h. die Transitionstabellen haben folgendes Aussehen:

Transitionstabelle ä�á�è�Ý�Þ�ð�Ü�Ý�Þ�ß�à�á�â (TR_GV0) und ï�Ý�ê�Þ�ð!ä�á�è�Ý�Þ�ð:Ü�Ý�Þ�ß�à�á�â (TR_SGV0)

ç�ë�þ ã�Ý�ÿè�� à�ã�ä�å�ã�Þ æ�ç�ã�à�è à�ã�é�à�ê�ë à�ã�ä�å�ã�Þ æ�ç�ã�à�è à�ã�é�à�ê�ë����� ì�í ì�ì î ì�í ì�ì ì�ù�ú

Der Knoten S besteht also aus den Komponenten D0 und der Menge TR0 ={TR_GV0,TR_SGV0}. D0 sei der DB-Zustand nach der Ausführung der Transaktion,aber vor der Ausführung der Trigger.

Wird nun, ausgehend vom Knoten S, die Aktion des Triggers ä�á�è�Ý�Þ�ð�Ü�Ý�Þ�ß�à�á�âausgeführt, so gelangt man in einen neuen Knoten S1= (D1, TR1) mit:

þ��ÊøËþ�� ∧ ñ�ò�ó�ô�õ�ö à�ã�ä�Ý�ï�è�Ý�ë�ë�è�Ýb÷ ö$õ ä�Ý�ê�à�ë�èdødä�Ý�ê�à�ë�è�� ì�î û�ü ö�ý�ö à�ã�ä�å�ã�Þ ø ì�í

TR1 = {TR_SGV0}

Wird nun, ausgehend vom Knoten S, die Aktion des Triggers ï�Ý�ê�Þ�ð!ä�á�è�Ý�Þ�ð�Ü�Ý�Þ�ß�à�á�âausgeführt, so gelangt man in einen neuen Knoten S2= (D2, TR2) mit:

Page 55: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 3 Analyse von Triggermengen 49

� �������∧ ��������������� � �"!�# �%$�$&# �('��)�+*"� � � � *,���&��-�.0/ 1��32&�(��� ��4���* � .�56

TR2 = {TR_GV0}

Vom Knoten S1 muß noch die Aktion des Triggers ! ��78*39:�3; #���*39,<3�%*�=,��;?> durchgeführtwerden. Man gelangt in den Zustand S’ = (D3, ∅) mit:

� @������∧ ��������������� � �"!�# �%$�$&# �('��)�+*"� � � � *,���&��-�.0/ 1��32&�(��� ��4���* � .�5

∧ ���8�3������� � ���,!�#���$8$ # �('8�A�(� ��7"� $&# � ����7,��$ #B-�.�CD/ 1��32 ��� �&��4���* � .�5E6Wird vom Knoten S2 die Aktion des Triggers �3;&# �%*39F<���*8=,� ;A> durchgeführt, so gelangtman auch von hier aus in den Zustand S’ = (D3, ∅).

Der zugehörige AG hat dasselbe Aussehen wie der Graph oben, nur daß hierandere DB-Zustände zugrundeliegen.

Würde man nun noch einen Graphen zeichnen, in dem die Spalte ����G&��7�$ in derTabelle H�I)��; ! auf einen Wert < 50 geändert wird, so würde auch dieser Graphdasselbe Aussehen, jedoch mit anderen zugrundeliegenden DB-Zustand, haben.

D.h. hier ist eine Zusammenfassung zu einem Graphen mit Äquivalenzklassen vonZuständen möglich. Dadurch sind zwei Knoten gleich, wenn sie, trotz unterschiedlichzugrundeliegender Datenmenge, dieselbe Bedingung erfüllen; also entspricht einKnoten einer Äquivalenzklasse von DB-Zuständen, die durch Bedingungencharakterisiert werden. Statt der Transitionstabellen wird nun nur noch die Mengeder ausgelösten Trigger zu jedem Knoten mitprotokolliert. D.h. hierdurch wird dieMöglichkeit einer globalen Analyse aufgezeigt.

Man beachte jedoch, daß eine derartige globale Analyse nicht immer zu einemErgebnis führt.

Der Ausführungsgraph der globalen Analyse sieht genauso aus, wie der Graph amAnfang des Beispiels, nur daß die Bezeichnungen S, S1, S2 und S’ folgendesrepräsentieren:

S = (D0,{ ��; # �%*39,<3��*8=,� ;A> , ! ��78*39:�3; #���*39,<3�%*�=,��;?> }),S1 = (D1,{ ! �%7�*�9J�3;&# �%*39F<���*�="� ;A> }),S2 = (D2,{ �3;&# �%*39F<���*8=,� ;A> }),S’ = (D3,∅)

mit:

D0 repräsentiert den DB-Zustand nach Ausführung der Transaktion, die die Triggerausgelöst haben, aber vor der Ausführung der Trigger.

D1 (bzw. D2) repräsentiert den DB-Zustand, in den man gelangt, nachdem man dieAktion des Triggers ��; # �%*39,<3��*8=,� ;A> (bzw. !���7�*�9J��; # �%*39F<���*8=,� ;A> ) ausgeführt hat.

D3 repräsentiert den DB-Zustand, in den man gelangt, nachdem man die Aktionender Trigger ! ��78*39J��; #���*39,<3��*8=,��;?> und ��; # �%*39,<3��*8=,� ;A> ausgeführt hat.

Bemerkungen:

Genauere Bezeichnungen für die DB-Zustände sind nicht nötig, da man unabhängigder zugrundeliegenden Daten, immer in den jeweils aufgezeigten nächsten Zustandgelangt.

Page 56: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 3 Analyse von Triggermengen 50

Beispiel 5

Für den dritten Ausführungsgraphen gehe man von folgenden Einträgen in denTabellen K�L M N"O�P�N�Q�Q&P N und R�SAL8T O aus:

K L&M N,O8P N%Q�Q P�NL�U U,K�L M M�N�V,K�Q PW�X Y Z)[�[

R�S)L�T OK L M%\ L�U R?N"P3U,KAMW�X [

Man betrachte nur die Trigger R�SAL�T&O^]&U,K L&M , U,K�L M_] R�S)L�T&O , `%K)aAV&O N%L�b?N%U3] U"K L&M und L?N%T?N%U3] U"K L&M .Die Trigger seien priorisiert: Die Trigger sollen in der Reihenfolge R�SAL8T O_] U,K�L M , U,K L&M^]R�SAL8T O , `�K)a)V O�N�L�bAN�U3]&U,K�L M und L?N%T?N%U3] U"K L&M ausgeführt werden. Die Trigger O N�V8U3]JM�T P�N�U3],c3N�U8d,K�T?eund M3T&P N%U3]Fc�N�U8d,K TAe sollen im Moment nicht berücksichtigt werden. Nun wird diefolgende Transaktion, die aus nur einer Datenänderungsoperation besteht,durchgeführt werden:

f�g8h3i�j�k K L M�N,O�P�N�Q8Q P N(l kAj U,K L&Mnm Z�o p k�q k K L&M�\ LAN�TAN�U3]&U,K L&Mnm W%XEr

Durch diese Datenänderung sind die Trigger U,K L&M^] R�SAL8T O , `�K3aAV&O N�L8b?N%U3] U"K L M und L?N�TAN�U�] U,K�L Mausgelöst, d.h. die Transitionstabellen haben folgendes Aussehen:

Die Transitionstabelle des Triggers R�SAL8T O^]&U,K�L M ist leer.

Die Transitionstabellen der Trigger U"K L M_] R�SAL�T&O , `%K)aAV&O N%L�b?N%U3] U"K L&M und L?N�TAN�U�] U,K�L M(Bezeichnung im folgenden: TR_RB0, TR_WR0 und TR_NR0) sind jeweils mitfolgenden Werten gefüllt:

SAQ8b L?N"`P�s L8U U,K L&M M�N�V,K�Q P L�U U"K L&M M N%V,K�Q Pt�t�t W%X Y Z)[�[ W%X Z Z)[�[

Der Knoten S besteht also aus den Komponenten D0 und der Menge{TR_RB0,TR_WR0,TR_NR0}. D0 sei der DB-Zustand nach der Ausführung derTransaktion, aber vor der Ausführung der Trigger.

S = (D0, {TR_RB0, TR_WR0, TR_NR0})

S → uwvyx{z}|�~���x���� S1 = (D1, {TR_BR0, TR_WR0, TR_NR0})

b���m�b�� ∧ f�g�h�i�j�k R�SAL�T&O�l kAj R?N"P3U"K?Mnm�RAN,P�U,K?MB� W�[�� L?N"`�\ U"K L&M r

Page 57: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 3 Analyse von Triggermengen 51

Transitionstabelle ���A�8� �^�&�,��� � (TR_BR0):

�A��� �?�"���� �8� �A� � �,�?� ��� �A� � �,�?������ �%� � ���  A�

S1 → ¡�¢�£¥¤{¦}§�¨w©y£{ª S2 = (D1, {TR_WR0, TR_NR0})

S2 → «�©�¬�­{¦�®¥£¥¯¥®�¨°§�¨w©y£{ª S3 = (D1, { TR_NR0})

S3 →NEUER-RANG S4 = (D1, ∅)

Dies ist - aus dem sehr umfangreichen Ausführungsgraphen - nur ein Pfad. (ImAnhang B wurde damit begonnen für diese Triggermenge einen Ausführungs-graphen zu zeichnen). Da das Zeichnen der Ausführungsgraphen und dieProtokollierung der Transitionstabellen sehr umfangreich ist, stellt sich daher dieFrage nach Vereinfachungen, ähnlich dem Beispiel 4.

• Inwiefern ist es möglich, die Graphen zu abstrahieren?

• Würde man anstatt der Äquivalenzklassen von DB-Zuständen nur trivialeÄquivalenzrelationen auf DB-Zuständen betrachten und anstatt derTransitionstabellen nur noch die Menge der ausgelösten Trigger betrachten,so wäre das Zeichnen der AG sicherlich einfacher, jedoch der Verlustwichtiger Ergebnisse durchaus möglich. (Hierzu betrachte man dieErgebnisse, die am Ende dieses Kapitels aus den abstrahiertenAusführungsgraphen erzielt werden.)

• Wie ist es möglich Graphen zu zeichnen, deren Triggerausführung nichtendet, aber die zugrundeliegenden Transitionstabellen sich immer wiederändern (vgl. Beispiel 3)

Das Zeichnen von abstrahierten Ausführungsgraphen soll anhand des Beipiels 5gezeigt werden:

Die Trigger ���)���&�^� �"� �&�²± �,��� �^�&���)��� �³±´���)µ)¶ �������A���3�&�,��� � und �?�%�?�%�3� �"� �&� seien nichtpriorisiert. In dem Graphen gibt es nur noch 6 verschiedene Knoten:

Knoten Ausgelöste Trigger

S �"� � �_� ���A���&�²±����3µA¶ �����8�?����� �,��� � und �?���A���3�&�,��� �S1 ���A���&�^�&�,� �&�²±����3µA¶ �����8�?����� �,��� � und �?���A���3�&�,��� �S2 �"� � �_� ���A���&� und ���)µ)¶ �������A���3�&�,��� �S3 ���A���&�^�&�,� �&�²±·�,��� �^�&���)��� ���,��� �_� ���)��� �³±����)µ)¶ �������A���3�&�,��� � und �?���A����� �,��� �S4 ���A���&�^�&�,� �&��¸�¹�º»���3µA¶&� ���8�?����� �"� � �S5 ���A���&�^�&�,� �&�²±·�,��� �^�&���)��� ��¸�¹8º»���)µ)¶ �������A���3�&�,��� �

In diesem abstrahierten Ausführungsgraphen seien die DB-Zustände vernachlässigt.

Page 58: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 3 Analyse von Triggermengen 52

Die angegebenen Pfade sind wie im gerichteten Ausführungsgraphen zu zeichnen,nur daß hier die Pfade lediglich repräsentieren, daß die Trigger ausgelöst werdenkönnen, dies aber nicht unbedingt der Fall sein muß.

Man gelangt vom Knoten Si in den Knoten Sj durch die Ausführung der Aktion desTriggers ri. Die Menge der ausgelösten Trigger im Zustand Sj ergibt sich dannfolgendermaßen:

Die Menge der ausgelösten Trigger in Sj:

Menge der ausgelösten Trigger in Si

ohneaber mit

Trigger ri

den Triggern, die auf die Ereignisse reagieren, die in der Aktiondes Triggers ri ausgeführt wurden.

Zum Verständnis, wie der Graph gezeichnet ist, folgen Erläuterungen:

Im Knoten S seien die drei Trigger ausgelöst.

Würde man vom Knoten S die Aktion des Triggers ¼,½�¾ ¿^À&Á�Â)¾�Ã Ä ausführen, so würdedurch die Aktion des Triggers der Trigger Á�ÂA¾�Ã&Ä^À&¼,½ ¾&¿ ausgelöst werden. (In der Aktiondes Trigger ¼,½ ¾&¿^À&Á�ÂA¾8Ã Ä wird der Á?Å,Æ�¼,½?¿ in der Tabelle Á�Â)¾�Ã Ä geändert.) Die Trigger

Page 59: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 3 Analyse von Triggermengen 53

Ç�È)É)Ê Ë�Ì�Í�ÎAÌ�Ï3Ð&Ï,È�Í Ñ und

Í?Ì�ÒAÌ�Ï�Ð Ï,È�Í Ñ bleiben ausgelöst. Die Bedingung in der Aktion des

Triggers wird hier nicht beachtet. Man gelangt also vom Knoten S durch die Aktiondes Triggers

Ï,È Í&Ñ^Ð&Ó�ÔAÍ8Ò Ë in den Knoten S1.

Würde man vom Knoten S die Aktion des Triggers Ç�È)É)Ê Ë Ì%Í�ÎAÌ�Ï3Ð&Ï,È Í&Ñ

ausführen, sogelangt man von hier aus wieder in den Knoten S. Das liegt daran, daß in der Aktiondes Triggers

Ç�È)É)Ê Ë�Ì�Í�ÎAÌ�Ï3Ð&Ï,È�Í Ñ eine Datenänderungsoperation in der Tabelle

È�Í Ñ Ì"Ë�Õ�Ì�Ö�Ö&Õ Ìdurchgeführt wird, und gerade die drei Trigger

Ï,È�Í Ñ_Ð Ó�Ô)Í�Ò&Ë, Ç�È)É)Ê Ë�Ì�Í�ÎAÌ�Ï3Ð&Ï,È�Í Ñ

und ÍAÌ�Ò?Ì%Ï3Ð

Ï,È Í&Ñ auf diese Datenänderung in der Tabelle ausgelöst werden.

Eigentlich wären hierdurch nun die Trigger Ï,È�Í Ñ^Ð&Ó�Ô)Í�Ò Ë

und Í?Ì%Ò?Ì%Ï3Ð Ï"È Í&Ñ

doppelt und derTrigger

Ç�È)É)Ê Ë�Ì�Í�ÎAÌ�Ï3Ð&Ï,È�Í Ñ einmal ausgelöst. Jedoch ist die Unterscheidung zwischen

Einfach- und Mehrfachauslösung nicht nötig, da die Datensätze in den Transitions-tabellen stehen, und bei der Auslösung des Triggers Mehrfachauslösungenautomatisch berücksichtigt werden.

Würde man vom Knoten S die Aktion des Triggers ÍAÌ�Ò?Ì%Ï3Ð&Ï,È Í&Ñ

ausführen, so gelangtman in einen neuen Knoten S2, in dem nur noch die Trigger

Ï,È�Í Ñ^Ð&Ó�Ô)Í�Ò Ë undÇ�È)É)Ê Ë�Ì�Í�ÎAÌ�Ï3Ð&Ï,È�Í Ñ

ausgelöst sind. Die Aktion des Triggers Í?Ì�ÒAÌ�Ï3Ð&Ï,È�Í Ñ

löst weder weitereTrigger aus, noch werden bereits ausgelöste Trigger rückgängig gemacht, daherbleiben die Trigger

Ï,È Í&Ñ^Ð&Ó�ÔAÍ8Ò Ë und

Ç�È)É)Ê Ë Ì%Í�ÎAÌ�Ï3Ð&Ï,È Í&Ñ übrig.

Im Knoten S1 sind die Trigger Ó�ÔAÍ�Ò&Ë^Ð&Ï,È Í&Ñ

, Ç�È)É)Ê Ë Ì%Í�ÎAÌ�Ï3Ð&Ï,È Í&Ñ

und ÍAÌ�Ò?Ì%Ï3Ð&Ï,È Í&Ñ

ausgelöst:

Wird Ó�Ô)Í�Ò&Ë^Ð Ï"È Í&Ñ

ausgelöst, so gelangt man wieder in den Knoten S: Die Aktion desTriggers

Ó�ÔAÍ8Ò Ë_Ð Ï,È�Í Ñ führt Datenänderungen an der Tabelle

È�Í Ñ Ì"Ë�Õ�Ì�Ö�Ö&Õ Ì aus. Dadurch

werden die Trigger Ï"È Í Ñ_Ð Ó�ÔAÍ�Ò&Ë

, Ç�È)É)Ê Ë�Ì�Í�ÎAÌ�Ï3Ð&Ï,È�Í Ñ

und Í?Ì%Ò?Ì�Ï�Ð Ï"È Í Ñ

ausgelöst.(Mehrfachauslösungen wie oben).

Wird im Knoten S1 der Trigger Ç�È)É)Ê Ë Ì%Í�ÎAÌ�Ï3Ð&Ï,È Í&Ñ

ausgelöst, so gelangt man in denKnoten S3, nämlich in einen Knoten, in dem alle vier Trigger ausgelöst sind: Durchdie Aktion des Triggers

Ç�È3ÉAÊ Ë�Ì�Í8Î?Ì�Ï�Ð Ï,È�Í Ñ werden die Trigger

Ï,È Í&Ñ^Ð Ó�ÔAÍ8Ò Ë, Ç�È)É)Ê Ë�Ì�Í�ÎAÌ�Ï3Ð&Ï,È�Í Ñ

und Í?Ì%Ò?Ì�Ï�Ð Ï"È Í Ñ

ausgelöst, der Trigger Ó�Ô)Í�Ò Ë_Ð Ï"È Í Ñ

bleibt ausgelöst.

Wird im Knoten S1 der Trigger Í?Ì%Ò?Ì%Ï3Ð Ï"È Í&Ñ

ausgelöst, so gelangt man in den KnotenS4, also in den Knoten, in dem nur noch die Trigger

Ó�ÔAÍ8Ò Ë^Ð&Ï,È�Í Ñ und

Ç�È)É)Ê Ë�Ì�Í�ÎAÌ�Ï3Ð&Ï,È�Í Ñausgelöst sind.

Im Knoten S2 sind die Trigger Ï"È Í Ñ_Ð Ó�ÔAÍ�Ò&Ë

und Ç�È3ÉAÊ&Ë Ì�Í8Î?Ì%Ï3Ð Ï"È Í Ñ

ausgelöst:

Wird die Aktion des Triggers Ï,È Í&Ñ^Ð Ó�ÔAÍ8Ò Ë

ausgeführt, so wird der Trigger Ó�ÔAÍ8Ò Ë_Ð Ï,È�Í Ñ

ausgelöst (aufgrund der Änderung des ÓAÌ,Õ3Ï"È?Ñ8Ë

in der Tabelle Ó�ÔAÍ8Ò Ë

). Der TriggerÇ�È)É)Ê Ë�Ì�Í�ÎAÌ�Ï3Ð&Ï,È�Í Ñ bleibt ausgelöst.

Wird vom Knoten S2 aus die Aktion des Triggers Ç%È)ÉAÊ&Ë Ì%Í�Î?Ì%Ï3Ð Ï"È Í&Ñ

ausgeführt, sogelangt man zurück in den Knoten S, da in der Aktion des Triggers

Ç�È)É)Ê Ë�Ì�Í�ÎAÌ�Ï3Ð&Ï,È�Í Ñeine Datenänderung in der Tabelle

È Í&Ñ Ì,Ë8Õ Ì%Ö�Ö Õ�Ì durchgeführt wird, wodurch die

Trigger Ï,È�Í Ñ_Ð Ó�Ô)Í�Ò&Ë

, Ç�È3ÉAÊ&Ë Ì�Í8Î?Ì%Ï3Ð Ï"È Í Ñ

und Í?Ì�ÒAÌ�Ï3Ð&Ï,È�Í Ñ

ausgelöst wurden. Dieunterschiedlich zugrundeliegenden Datenmengen - und damit unterschiedlichzugrundeliegenden Differenztabellen - werden nicht berücksichtigt.

Page 60: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 3 Analyse von Triggermengen 54

Im Knoten S3 sind die Trigger ×�Ø)Ù�Ú Û_Ü Ý"Þ Ù ß , Ý,Þ Ù&ß^Ü ×�ØAÙ8Ú Û , à�Þ3áAâ&Û ã�Ù8ä?ã%Ý3Ü Ý"Þ Ù ß und Ù?ã�ÚAã�Ý�Ü Ý,Þ�Ù ßausgelöst:

Durch die Aktion des Triggers ×�ØAÙ�Ú&Û^Ü&Ý,Þ Ù&ß gelangt man zurück in den Knoten S, danun nur noch die drei Trigger Ý"Þ Ù ß_Ü ×�ØAÙ�Ú&Û , à�Þ)á)â Û ã%Ù�äAã�Ý3Ü&Ý,Þ Ù&ß und ÙAã�Ú?ã%Ý3Ü&Ý,Þ Ù&ß ausgelöst sind.

Durch die Aktion des Triggers Ý"Þ Ù ß_Ü ×�ØAÙ�Ú&Û im Knoten S3 gelangt man in den Knoten S1,also den Knoten, in dem die Trigger ×�Ø)Ù�Ú Û_Ü Ý"Þ Ù ß , à�Þ3áAâ&Û ã�Ù8ä?ã%Ý3Ü Ý"Þ Ù ß und Ù?ã�ÚAã�Ý�Ü Ý,Þ�Ù ßausgelöst sind, weil in der Aktion des Triggers Ý,Þ�Ù ß_Ü ×�Ø)Ù�Ú&Û der ×?ã"å3Ý"Þ?ß in der Tabelle×�ØAÙ8Ú Û geändert wird, und keine weiteren Trigger ausgelöst werden. Die Trigger ×�ØAÙ�Ú&Û^ÜÝ,Þ Ù&ß , Ù?ã�ÚAã�Ý3Ü&Ý,Þ�Ù ß und à%Þ)áAâ&Û ã%Ù�ä?ã%Ý3Ü Ý"Þ Ù&ß bleiben ausgelöst.

Durch die Aktion des Triggers à%Þ)áAâ&Û ã%Ù�ä?ã%Ý3Ü Ý"Þ Ù&ß im Knoten S3 gelangt man wieder inden Knoten S3, da durch die Aktion des Triggers à�Þ3áAâ&Û ã�Ù8ä?ã%Ý3Ü Ý"Þ Ù ß die Trigger Ý,Þ Ù&ß^Ü×�ØAÙ8Ú Û , à�Þ)á)â Û ã%Ù�äAã�Ý3Ü&Ý,Þ Ù&ß und Ù?ã�ÚAã�Ý3Ü&Ý,Þ�Ù ß ausgelöst werden und der Trigger ×�ØAÙ8Ú Û_Ü Ý,Þ�Ù ßausgelöst bleibt.

Wird im Knoten S3 die Aktion des Triggers Ù?ã%Ú?ã%Ý3Ü Ý"Þ Ù&ß ausgeführt, so werden keineweiteren Trigger ausgelöst, und man gelangt in den Knoten S5.

Im Knoten S4 sind noch die Aktionen der Trigger ×�Ø)Ù�Ú Û_Ü Ý"Þ Ù ß und à�Þ)á)â Û�ã�Ù�äAã�Ý3Ü&Ý,Þ�Ù ßauszuführen. Durch jede der beiden Aktionen werden Datenänderungen an derTabelle Þ Ù ß�ã,Û�å�ã�æ8æ å ã vorgenommen. Dadurch werden wieder die Trigger Ý,Þ�Ù ß_Ü ×�Ø)Ù�Ú&Û ,à�Þ)á)â Û�ã�Ù�äAã�Ý3Ü&Ý,Þ�Ù ß und Ù?ã�ÚAã�Ý3Ü&Ý,Þ�Ù ß ausgelöst, d.h. man gelangt in den Knoten S.

Im Knoten S5 sind die Trigger ×�ØAÙ�Ú&Û^Ü&Ý,Þ Ù&ß , Ý,Þ Ù&ß^Ü ×�ØAÙ8Ú Û und à%Þ)áAâ&Û ã%Ù�ä?ã%Ý3Ü Ý"Þ Ù&ß ausgelöst:

Durch die Aktionen der Trigger ×�ØAÙ8Ú Û^Ü&Ý,Þ�Ù ß und à�Þ)á)â Û ã%Ù�äAã�Ý3Ü&Ý,Þ Ù&ß gelangt man wieder inden Knoten S (Erläuterungen s.o.), durch die Aktion des Trigger Ý"Þ Ù ß_Ü ×�ØAÙ�Ú&Û gelangtman in den Knoten S4, da durch die Aktion des Triggers Ý,Þ Ù&ß^Ü ×�ØAÙ8Ú Û keine weiterenTrigger ausgelöst werden.

Bemerkung:

Zur Vereinfachung wurden zwei Trigger an eine Kante geschrieben, wenn mansowohl durch die Ausführung der Aktion des einen, wie auch durch die Ausführungder Aktion des anderen Triggers, in denselben Knoten kommt. Man hätte hierselbstverständlich auch zwei Kanten zeichnen, und diese jeweils mit dem Trigger-namen versehen können.

Der Nachteil dieser Art von Graphen wird hier sehr deutlich: Da die Datenmengennicht berücksichtigt werden, werden Zyklen gezeichnet, die bezüglich derzugrundeliegenden Datenmengen eventuell gar keine Zyklen verursachen. D.h. dieabstrahierten Ausführungsgraphen liefern nur Indizien für Nichtterminierung. Die andem Zyklus eventuell beteiligten Trigger sind aus dem Ausführungsgraphen einfachabzulesen.

Kommen aber in dem abstrahierten Ausführungsgraphen keine Zyklen vor, so istdies ein eindeutiges Indiz dafür, daß die Menge der Trigger terminiert.

Eine Analyse der Konfluenz ist in den abstrahierten Ausführungsgraphen nichtmöglich.

Ergebnis:

Die sich gegenseitig wieder aufrufenden Trigger ×�Ø)Ù�Ú Û_Ü Ý"Þ Ù ß und Ý,Þ�Ù ß^Ü&×�Ø)Ù�Ú Û könntenmehrere Zyklen verursachen. Ein weiterer eventueller Zyklus wird durch den Trigger

Page 61: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 3 Analyse von Triggermengen 55

ç�è)é)ê ë�ì�í�îAì�ï3ð&ï,è�í ñ verursacht, da auch hierdurch wieder die Trigger

ï,è�í ñ_ð ò�ó)í�ô&ë,ç�è)é)ê ë�ì�í�îAì�ï3ð&ï,è�í ñ

und í?ì�ôAì�ï�ð ï,è�í ñ

ausgelöst werden. D. h. die Trigger ò�óAí8ô ë^ð&ï,è�í ñ

, ï,è í&ñ^ð

ò�óAí8ô ë, ç�è)é)ê ë ì%í�îAì�ï3ð&ï,è í&ñ

und í?ì�ôAì�ï3ð&ï,è�í ñ

könnten nicht terminieren. Über Konfluenz kannhier keine Aussage getroffen werden.

3.3 T erminierung

Es soll bestimmt werden, ob eine Menge von Triggern in R unabhängig vom DB-Zustand garantiert terminiert (globale Analyse). Das heißt, daß bestimmt werdensoll, ob die Triggerverarbeitung für alle möglichen Operationen und alle möglichenDB-Zustände in jedem Fall an einem Punkt ankommt, an dem keine weiteren Triggermehr zu betrachten sind.

3.3.1 Kriterien für globale Terminierung

Terminierung einer Triggermenge R ist garantiert, wenn die Triggerverarbeitung aneinem Punkt angelangt, an dem keine weiteren Trigger mehr ausgelöst sind.

Wir sagen, daß ein Trigger r1 einen anderen Trigger r2 aktivieren kann, wenn durchdie Aktion des Triggers r1 Datensätze entstehen, die den Trigger r2 auslösen. (ZumVergleich: Unter „Auslösen“ wird nur die Datenänderungssoperation betrachtet.Beim „Aktivieren“ des Triggers wird neben der Datenänderungsoperation auchgetestet, auf welche Spalte der Tabelle der Trigger, der ausgelöst werden kann,basiert.)

Terminierung wird durch Konstruktion eines Aktivierungsgraphen analysiert: Ineinem Aktivierungsgraphen seien die Knoten Trigger. Direkte Kanten bedeuten, daßein Trigger einen anderen Trigger aktivieren kann: Eine Kante vom Trigger ri zumTrigger rj wird gezeichnet, wenn durch die Aktion des Triggers ri Daten entstehen,die die Bedingung des Triggers r2 erfüllen.

Durch Aktivierungsgraphen gelangt man von einer lokalen Analyse zu einer globalenAnalyse. Diese globale Analyse ist zur Entwurfszeit durchzuführen.

Sind in dem Aktivierungsgraphen AGR der Triggermenge R keine Zyklen, soterminiert die Triggerverarbeitung der Menge R garantiert.

Beispiel 6:

Hier wurde der Aktivierungsgraph für die Trigger ò�óAí�ô&ë^ð&ï,è í&ñ

, ï,è�í ñ_ð ò�ó)í�ô&ë

, ñ3ô&õ ì�ï�ðFö�ì�ï�÷"è ô?ø

,ë ì�ê8ï3ð:ñ3ô õ�ì�ï3ð,ö3ì%ï�÷,è�ô?ø, ç�è3éAê&ë ì�í8î?ì%ï3ð ï"è í ñ

und í?ì%ô?ì�ï�ð ï"è í ñ

gezeichnet:

Page 62: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 3 Analyse von Triggermengen 56

RB

BR

GV

SGV

WRNR

Die Kanten im einzelnen:

Schreibweise: ù�ú)û�ü&ý^þ ÿ�� û�� → û���ü���ÿ3þ&ÿ���û�� bedeutet: Der Trigger ù�ú)û�ü&ý^þ ÿ�� û�� kann denTrigger û���ü���ÿ�þ ÿ���û�� aktivieren.

ù�úAû8ü ý_þ ÿ���û�� → ÿ���û��^þ&ù�ú)û�ü ý , ù�úAû�ü&ý^þ&ÿ�� û�� → ���� ý��%û�����ÿ3þ&ÿ�� û�� , ù�ú)û�ü ý_þ ÿ�� û�� → û��%ü��%ÿ3þ ÿ�� û�� : In derAktion des Triggers ù�úAû8ü ý_þ ÿ���û�� wird ein ��������� in der Tabelle � û����,ý����������� durchgeführt,und dabei der Rang des Angestellten um 1 erhöht. Die Trigger ÿ�� û��_þ ù�úAû�ü&ý , ����� &ý��%û����%ÿ3þÿ�� û�� und û��%ü��%ÿ3þ ÿ�� û�� können dadurch aktiviert werden. Der Trigger ù�ú)û�ü&ý^þ ÿ�� û�� kann sichnicht selbst aktivieren, da dieser auf eine Änderung der Spalte ù����3ÿ���� in der Tabelleù�úAû8ü ý reagiert.

ÿ�� û��^þ&ù�úAû8ü ý → ù�úAû8ü ý_þ ÿ���û�� : Der Trigger ÿ�� û��^þ&ù�úAû8ü ý ändert in der Tabelle ù�ú)û�ü ý die Spalteù�����ÿ���� . Dadurch wird der Trigger ù�ú)û�ü&ý^þ ÿ�� û�� aktiviert.

Der Trigger �3ü����%ÿ3þ�� ��ÿ�!�� ü�" kann weder von einem anderen Trigger ausgelöst werden,noch können durch die Aktion dieses Triggers weitere Trigger ausgelöst werden.Dies ist darin begründet, daß kein Trigger auf eine Änderung der Spalte ���� ������ in derTabelle � û����"ý������������ reagiert.

ý�� 8ÿ3þ#�3ü�����ÿ3þ����%ÿ�!���ü�" → ÿ���û��_þ ù�ú)û�ü&ý , ý�� 8ÿ3þ$��ü�����ÿ3þ�����ÿ�!���ü�" → ���� ý���û�����ÿ3þ&ÿ���û�� , ý�� 8ÿ3þ$��ü�����ÿ3þ�����ÿ�!���ü�"→ û���ü���ÿ�þ ÿ���û�� : In der Aktion des Triggers ý�� 8ÿ3þ$��ü�����ÿ3þ�����ÿ�!���ü�" wird die Spalte ÿ���û�� derTabelle � û����,ý������������ geändert. Die Trigger ÿ���û��^þ&ù�ú)û�ü ý , ���� ý���û�����ÿ�þ ÿ���û�� und û���ü���ÿ�þ ÿ���û��werden durch diese Änderungsoperation aktiviert.

In der Aktion des Triggers ���� ý��%û�����ÿ3þ&ÿ�� û�� wird das ��� ������ des � û����,ý�����������%û erhöht,worauf aber kein Trigger ausgelöst wird.

Der Trigger û��%ü���ÿ�þ ÿ�� û�� gibt lediglich eine Meldung aus. Dadurch werdenselbstverständlich auch keine weiteren Trigger aktiviert.

Ergebnis:

Zwischen den Triggern ù�úAû8ü ý_þ ÿ���û�� und ÿ�� û��_þ ù�úAû�ü&ý ist ein Zyklus zu erkennen. D. h. dieAnalyse zur Terminierung sagt aus, daß die Trigger eventuell nicht terminieren.Auch im Beispiel wurde bereits festgestellt, daß die Ausführung der Trigger ù�úAû�ü&ý^þÿ�� û�� und ÿ���û��_þ ù�ú)û�ü&ý in bestimmten Fällen nicht terminiert.

Page 63: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 3 Analyse von Triggermengen 57

Vergleicht man die abstrahierten Ausführungsgraphen und Aktivierungsgrahen, sostellt man fest, daß sich beide Arten von Graphen nicht auf zugrundeliegende Datenbeziehen, und daß das Zeichnen auch nicht an Daten und deren Änderungengebunden ist. Der Aktivierungsgraph ist im abstrahierten Ausführungsgraph bereitsenthalten: Bei jeder Auslösung eines Triggers im Ausführungsgraphen wird überlegt,welche weiteren Trigger durch die Aktion des gerade ausgeführten Triggers nunausgelöst wurden.

Bemerkung:

Der Aktivierungsgraph könnte auch als Grundlage zum Zeichnen derAusführungsgraphen benutzt werden.

3.3.2 Kriterien für lokale Terminierung

Durch die Aktivierungsgraphen ist eine Möglichkeit der globalen Analyse gegeben.Jedoch ist diese Analyse in einigen Fällen zu grob, so daß Zyklen festgestelltwerden, die, bei einer genaueren Analyse, auch diese Trigger als terminierendbezeichnen. Diese Analyse sollte jedoch, da sie erheblich aufwendiger ist, nur fürdie Trigger durchgeführt werden, die in eventuellen Zyklen im Aktivierungsgraphenenthalten sind.

Die lokale Analyse sollte daher die Bedingungen in den Triggern so genaubetrachten, daß festgestellt wird, ob hier ein Zyklus gegeben ist, der nach einerbestimmten Anzahl von Triggerausführungen eventuell doch endet, und somit dieTeilmenge der Trigger dann doch terminiert.

3.4 Konf luenz

Hier soll bestimmt werden, ob der Endzustand der DB bei Beendigung derTriggerverarbeitung davon abhängen kann, welcher Trigger zur Betrachtungausgewählt wurde, wenn mehrere nicht priorisierte Trigger gleichzeitig ausgelöstwerden.

Die in diesem Abschnitt verwendeten Begriffe und die verwendete Methode zurAnalyse der Konfluenz sind größtenteils dem Artikel von A. Aiken, J. Widom undJ.M. Hellerstein [8] entnommen.

Konfluenz von Triggern ist nicht unproblematisch, da die Wechselwirkungenzwischen dem Auslösen des Triggers mitberücksichtigt werden müssen. ZumBeispiel genügt es nicht, nur den kombinierten Effekt der Aktion von zwei Triggernzu betrachten, es ist nötig alle Trigger zu betrachten. Denn es ist notwendig alleTrigger zu betrachten, die sowohl direkt als auch indirekt ausgelöst werden können.Desweiteren sind die Prioritäten der Trigger mit zu berücksichtigen.

Um Konfluenz formal zu beschreiben, ist vorab die Einführung des Begriffs „Folgeder Triggerausführung“ nötig:

Page 64: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 3 Analyse von Triggermengen 58

Definition:

Eine Folge der Triggerausführung ist eine Folge σ, bestehend aus DB-Zuständen,die durch Kanten (ausgeführte Trigger) verbunden sind.

Eine Folge der Triggerausführung ist vollständig, wenn der letzte Zustand von derForm (D,∅) ist, wenn also ein Endzustand vorliegt. (vgl. Def. auf S.42)

Eine Folge der Triggerausführung ist gültig, wenn sie eine korrekteAusführungsfolge repräsentiert: nur die Aktion ausgelöster Trigger wird ausgeführt;jeder nachfolgende Zustand repräsentiert den Effekt nach Ausführung der Aktiondes zugehörigen Triggers.

Definition:

Eine Menge von Triggern ist konfluent, wenn für alle Anfangszustände S jedevollständige und gültige Folge der Triggerausführung, die mit S beginnt, denselbenEndzustand hat.

Ein Hilfsmittel zur Bestimmung, ob eine Menge von Triggern konfluent ist oder nicht,ist die Kommutativität. Im folgenden werden ausreichende Bedingungen fürKonfluenz angegeben, die auf Kommutativität von Triggerpaaren basieren.

Definition:

Zwei Trigger ri und rj kommutieren, wenn man ausgehend von einem beliebigenZustand S, in dem die Trigger ri und rj ausgelöst sind, jeweils unabhängig von derAusführungsreihenfolge der Trigger, zum gleichen DB-Zustand S’ gelangt.

Hinreichende Kriterien:

Zwei verschiedene Trigger ri und rj kommutieren, wenn

1. die Aktion von ri nicht das Ereignis, auf das rj reagiert, ändert;

2. die Ausführung der Aktion von ri keine Auswirkungen auf die Ausführung derAktion von rj hat, also in der Aktion von ri nicht dieselben Werte geändert werden,die auch in rj geändert werden;

3. die 1. und 2. Bedingungen, jedoch mit i und j vertauscht, erfüllt sind.

Bemerkung:

Jeder Trigger ist zu sich selbst kommutativ.

Beispiel 7

Die Trigger %�&�'�()�*�+�(�)�,�-�&�. und /�(0�)�*$% &�'�()�*�+�()�,�-�&�. sind kommutativ: Unabhängig derAusführungsreihenfolge werden %�(0�-�1�' und )�-�2�% des Angestellten verändert, wenn dieBedingungen in der Aktion des Triggers erfüllt sind.

Überprüft man die Bedingungen der hinreichenden Kriterien, so kommt manebenfalls zu dem Ergebnis, daß die Trigger konfluent sind:

Page 65: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 3 Analyse von Triggermengen 59

1. Die Aktion des Triggers 3�4�5�67 8�9 67�:�;�4�< ändert nicht das Ereignis, auf das derTrigger =�6>�7�8#3�4�5�67�8�9�6�7�:�;�4�< reagiert. Die Aktion des Triggers =�6>�7�8$3 4�5�67�8�9�67�:�;�4�<ändert nicht das Ereignis, auf das der Trigger 3 4�5�6�7�8�9�67�:�;�4�< reagiert.

2. In der Aktion des Triggers 3�4�5�6�7�8�9 67�:�;�4�< wird das 3�6>�;�?�5 des Angestellten geändert,in der Aktion des Triggers =�6>�7 8$3 4�5�6�7�8�9 67�:�;�4�< wird der 7�;�@�3 des Angestelltengeändert. Die Aktionen haben nichts miteinander zu tun.

Daß Kommutativität und Konfluenz eng zusammenhängen, kann man bereits denzugehörigen Definitionen entnehmen. Jedoch fehlt noch eine „handfeste“Möglichkeit die Kommutativität, und damit auch die Konfluenz, zu analysieren. Imfolgenden sollen Möglichkeiten aufgezeigt werden, wie Konfluenz undKommutativität bestimmt werden können. Dazu ist die Einführung von bestimmtenMengen, die sich auf Trigger beziehen, nötig.

3.4.1 Mengen

Sei R = {r1,r2,...,rn} eine beliebige Menge von Starburst Produktionsregeln/ Triggern,die analysiert werden sollen. Die Analyse wird anhand einer festen Menge vonTriggern durchgeführt - wird die Menge der Trigger geändert, muß die Analysewiederholt werden. Sei P die Menge der benutzer-definierten Prioritätsordnung in R(durch die A�B�C�D�C�E�C�F und GH�I�IH�J�F Listen gegeben) einschließlich der durch Transitivitäteingeschlossenen Trigger.

P = {ri > rj, rk > rl,...}, wobei ri > rj bedeutet, daß der Trigger r i Vorrang vor rj hat. SeiZ = {z1, z2, ..., zm} die Menge der Tabellen im Datenbankschema, undC = {zi.cj, zk.cl,...} bezeichne die Spalten der Tabellen in Z. Außerdem sei O dieMenge der Datenbankmodifikationsoperationen:

O= { ⟨ I,z ⟩ | z ∈ Z } ∪ { ⟨ D,z ⟩ | z ∈ Z } ∪ { ⟨ U,z.c ⟩ | z.c ∈ C }

⟨ I,z ⟩ beschreibt die Einfügungen in die Tabelle z, ⟨ D,z ⟩ beschreibt die Löschungenin der Tabelle z, ⟨ U,z.c ⟩ beschreibt die Änderungen in Spalte c der Tabelle z.

Zur Analyse werden folgende Mengen und Prädikate gebildet:

• Triggered-By(r) nimmt einen Trigger r und liefert die Menge der Operationenin O, die r auslösen.

• Performs(r) nimmt einen Trigger r und produziert eine Menge vonOperationen in O, die in der Aktion von r ausgeführt werden.

• Triggers(r) nimmt einen Trigger r und produziert alle Trigger r’, die durch einErgebnis der Aktion von r ausgelöst werden können (möglicherweise auch rselbst).

Triggers(r) = {r’ ∈ R | Performs(r) ∩ Triggered-By(r’) ≠ ∅}

Page 66: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 3 Analyse von Triggermengen 60

• Uses(r) nimmt einen Trigger r und produziert alle Spalten in C, dieherangezogen werden, wenn die Bedingung von r ausgewertet wird oderdurch die Aktion von r eine Datenmodifikations-Operation vorgenommenwird, d.h. Uses(r) enthält alle Spalten mit zugehörigem Tabellennamen,

• auf die in der Bedingung des Triggers r Bezug genommen wird,

• auf die in der Aktion des Triggers r Bezug genommen wird (z.B. in derK�LM�N�M -Klausel einer Löschungs - oder Änderungsoperation),

• auf dessen Spalten von Transitionstabellen Bezug genommen wird. Wirdalso in der Aktion von r auf die Spalte O�P�Q M�NRM�SUTVK�M NR�W der Tabelle X�YZ�[�YBezug genommen, so wird die Spalte X�YZ�[�Y T\K�M NR�W mit in die Menge Uses(r)aufgenommen.

• Can-Untrigger nimmt eine Menge von Operationen O’ ⊆ O und produziertalle Trigger, deren Auslösung als Ergebnis von Operationen in O’rückgängig gemacht werden können. Eine Regel wird nicht ausgelöst, wennsie zu einem bestimmten Zeitpunkt während der Regelverarbeitungausgelöst wird, aber nicht zur Betrachtung herangezogen wird, undschließlich nicht mehr ausgelöst wird, weil alle ausgelösten Änderungendurch andere Regeln ungeschehen gemacht werden.9

Can-Untrigger(O’) = {r ∈ R | ⟨D,t⟩ ∈ O’ und ⟨I,t⟩ oder ⟨U,t.c⟩ ∈ Triggered-By(r) für einige t∈T , t.c ∈ C}.

• Choose betrachtet eine Menge von Triggern R’ ⊆ R und gibt zu R’ dieMenge der Trigger mit niedrigster Priorität aus:

Choose(R’) = { ri | ri ∈ R’ und es gibt kein weiteres rj ∈ R’ so daß r j > ri

∈ P}

• Rollback nimmt einen Trigger r und weist darauf hin, ob nach Ausführungder Aktion von r die Transaktion garantiert abgebrochen wird. InSTARBURST ist Rollback(r) TRUE, wenn eine der Operationen, die dieAktion von r einschließen, ein rollback ist.

Bemerkung:

Zwei Trigger ri und rj sind ungeordnet, falls weder die Bedingung ri > rj noch rj > ri inder Menge P steht. Besteht eine der Bedingungen, so sind sie geordnet. Sind 2Trigger ri und rj geordnet, so bedeutet dies, daß die Aktion des Triggers mit derhöheren Priorität vor der Aktion des Triggers mit niedrigerer Priorität ausgeführtwird.

9 Ein Beispiel: Durch eine Transaktion wurden 2 Operationen durchgeführt, wodurch die Trigger r1.undr2 ausgelöst werden. Wird nun die Aktion des ersten Triggers ausgeführt, und wird in dieser Aktion dieOperation rückgängig gemacht, durch die der zweite Trigger aufgerufen wurde, so wird die Aktion deszweiten Triggers selbstverständlich nicht mehr ausgeführt. D. h. der zweite Trigger wurde„untriggered“.

Page 67: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 3 Analyse von Triggermengen 61

3.4.2 Analyse der Konfluenz

Anhand dieser Mengen soll nun u. a. die Analyse der Kommutativität und damit derKonfluenz weitergeführt werden:

Lemma 1

Trifft keine der folgenden Bedingungen zu, so sind die Trigger ri und rj kommutativ.

1. ri ∈ Triggers(rj)

2. ri ∈ Can-Untrigger(Performs(rj))

3. ⟨ I,t ⟩, ⟨ D,t ⟩, oder ⟨ U,t.c ⟩ ist in der Menge Performs(rj) und t.c ist in der MengeUses(ri) für einige t.c ∈ C

4. ⟨ I,t ⟩ ist in der Menge Performs(rj) und ⟨ D,t ⟩ oder ⟨ U,t.c ⟩ ist in der MengePerforms(ri) für t ∈ T oder t.c ∈ C10

5. ⟨ U,t.c ⟩ ist in beiden Mengen Performs(rj) und Performs(ri) enthalten.

6. jeder der Fälle 1 - 5 nur mit dem Austausch von ri und rj.

Beweis:

Sind die Bedingungen 1 bis 6 alle nicht erfüllt, so ergeben sich daraus diehinreichenden Kriterien von S. 58.

Durch die Bedingungen 1 und 2 ist das Kriterium 1 für Kommutativität erfüllt. DieBedingungen 4 und 5 liefern dieselben Aussagen, die auch in 1 und 2 getroffenwerden, nur daß die Aussagen in 4 und 5 spaltenbezogen sind. D. h. durch dieBedingungen 1, 2, 4 und 5 ist das Kriterium 1 für Kommutativität erfüllt.

Durch die Bedingung 3 des Lemmas ist das Kriterium 2 für Kommutativität erfüllt.

Sind die Kriterien für Kommutativität nicht erfüllt, so folgt daraus, daß einer derPunkte 1 bis 6 zutrifft:

Wird in der Aktion des Triggers ri das Ereignis geändert, auf das rj reagiert, so gilt1 ∨ 2 ∨ 4 ∨ 5 des Lemmas. Hat die Ausführung der Aktion von ri Auswirkungen aufdie Ausführung der Aktion von rj, so gilt die Bedingung 3 des Lemmas.

Aus den hinreichenden Kriterien folgt wiederum Kommutativität.

Bemerkung:

Wird eine der Bedingungen des Lemmas 1 erfüllt, so kann es sein, daß zweiverschiedeneTrigger ri und rj nicht kommutativ sind.

Es folgen Erläuterungen, wann die Punkte 1 bis 5 eintreten können:

1. Der 1. Fall tritt ein, wenn ein Trigger durch die Aktion eines anderen Triggersausgelöst wird.

10 In SQL ist es möglich etwas von einer Tabelle zu löschen oder zu ändern, ohne die Spalte derTabelle zu referenzieren. Daher sind die Fälle 4 und 5 anders als Fall 3.

Page 68: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 3 Analyse von Triggermengen 62

2. Dieser Fall tritt ein, wenn die Aktion eines Triggers eine Änderung, Löschung oderEinfügung aufhebt, auf die ein anderer Trigger reagiert hätte. Auf Seite 43 wurdendie Trigger ]�^�_�`�a�b�c und ]�^�_�`�d�e�`�f�g�c�h�i�j�h�k�k�j�h definiert, um genau dieses Verhalten zuzeigen. D. h. es gilt:

]�^�_�`�a�b�c ∈ lnm�oqpr�ots�uwv�xnxzy{uw|�}~y{ut���{u�t�q|�]�^�_�`�d�e�`�f�g�c�h�i�j�h�k�k�j�h����3. Dieser Fall tritt ein, wenn durch die Aktion eines Triggers Werte geändert und

diese in der Aktion eines weiteren Triggers benutzt werden.

4. Hier ändert der eine Trigger Werte derart, so daß ein weiterer Trigger ausgelöstwird. Daraus folgt, daß der zweite Trigger nur aufgrund der Änderungen, die dererste Trigger vollzogen hat, ausgelöst wird.

5. Die Änderungen die in der Aktion eines Triggers vollzogen werden, haben zurFolge, daß weitere Trigger aufgerufen und zusätzliche Änderungen vollzogenwerden.

Die Bedingungen des Lemma 1 könnten selbstverständlich durch Verfeinerungen -eine komplexere Analyse - erweitert werden, um auch speziellere Fälle zubetrachten: Zwei interessante Beispiele dazu:

1. ri fügt Tupel in die Tabelle t ein, rj löscht Tupel der Tabelle t, wobei die durch ri

eingefügten Tupel nie die Löschbedingung von rj erfüllen werden.

2. rk und rn ändern Tupel derselben Tabelle und Spalte, aber nie denselben Tupel.

Aufgrund der Bedingung 4 von Lemma 1 sind die Trigger ri und rj nicht kommutativ,auch die Trigger rk und rn sind nicht kommutativ, allerdings infolge der Bedingung 5von Lemma 1.

Vergleicht man sich aber mit der Definition der Kommutativität, so sind die Triggeraus den Beispielen kommutativ:

Führt man erst den Trigger ri (rk) dann den Trigger rj (rn) aus, so gelangt man indenselben DB-Zustand, als ob man erst den Trigger rj (rn) und danach den Trigger ri

(rk) ausführt.

D.h. daß auch hier die Bedingungen zur vollständigen Analyse nicht ausreichen.Daher sollte dem Benutzer die Möglichkeit gegeben werden, Paare von Triggern, dienach Lemma 1 nicht kommutieren, als kommutativ zu deklarieren.

Beispiele zum Lemma 1

• Die Trigger e���g�b�i�����f�g�c und ��f�g�c���e���g�b�i sind nach Lemma 1, Bedingung 1 nichtkommutativ, da gilt:

��f�g�cn��e���g�b�i ∈ Triggers( e���g�b�in����f�g�c )Durch die Aktion des Triggers e���g�b�in����f�g�c wird der Rang des Angestellten um1 erhöht. D. h. dadurch wird der Trigger ��f�g�c���e��g�b�i ausgelöst.

(Daß der Rang des Angestellten nur dann um 1 erhöht wird, wenn der e�h�j���f�cin der Tabelle e���g�b�i um mehr als 100 erhöht wird, wird hier nichtberücksichtigt.)

• Die Trigger c�b�j�h������h�����f�b�� und i�h�����$c b�j�h������h����f�b�� sind kommutativ, da keine derBedingungen 1 - 5 (bzw. 6) zutrifft.

Page 69: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 3 Analyse von Triggermengen 63

• Die Trigger ������������������������ und � sind nach der Bedingung 5 des Lemmas nichtkommutativ, da gilt:

⟨ � , ���������������������� . ����������� ⟩ ∈ Performs( � ���������������������� )⟨ � , ��������������������� . ���������� ⟩ ∈ Performs( ���������������� ��������� )

Sowohl in der Aktion des Triggers �������� ��� ���������� als auch in der Aktion desTriggers ��������������������������� wird das Gehalt des Angestellten geändert.

• Die Trigger ������� �$������������� ���������� und �������������������������� sind nach Bedingung 3 desLemmas nicht kommutativ, da gilt:

⟨ � , ��������������������� . ������� ⟩ ∈ Performs( ������� �$������������� ���������� )����������������������� ������� ∈ Uses ¡¢����������������������������~£

(Es gilt: ��������������������{� ������� ∈ Uses( �������������������������� ), da auf den neuen ������� desAngestellten in dem Trigger ��������������������������� Bezug genommen wird und dieTabelle ��������������������� die auslösende Tabelle ist.)

Die Trigger ��������$� ��������������������� und ��������������������������� sind auch nach derBedingung 1 des Lemma 1 nicht kommutativ, da gilt

��������������������������� ∈ Triggers( ������� �$������������� ���������� )• Die Trigger �������� ��� ���������� und ������� ��������� sind kommutativ, die Trigger

��������������������������� und ������������������� ebenfalls. (Die Trigger kommutieren mit demTrigger �������� ��������� , obwohl der Trigger ������������������� auf die Spalte�������������������� . ���������� zugreift. Diese Spalte ist allerdings nicht in der MengeUses( �������� ��������� ) enthalten.)

• Die Trigger ¤�¥������n��������� und � ���������������������� sind kommutativ.

• Die Trigger ¤�¥������n��������� und ������������������ sind nach der Bedingung 1 des Lemmasnicht kommutativ, da gilt:

�������� ��������� ∈ Triggers( ¤�¥������n��������� )

Page 70: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 3 Analyse von Triggermengen 64

Übersicht:

Kommutativ ? ¦�§��©�ªn«�¬�­��® ¬�­��®�«�¦§��©�ª°®�©�±�²¬ «³ ²¬��­�©�µª�²¶�¬�«®�©�±�²¬ «³ ²¬��­�©�µ

· ­��¶�ª�²�¹�²�¬«�¬�­��®

�²�©�²¬ «¬�­��®

¦�§�¨�©�ª�«�¬�­�¨�® JA JA JA NEIN* NEIN* JA

¬�­�¨�®n«�¦�§�¨�©�ª JA JA JA* NEIN* JA* JA*

®�©�±�²¬ « ³ ²¬�´�­�©�µ JA JA* JA JA NEIN JA

ª�²�¶�¬�«#®�©�±�²¬ « ³ ²�¬�´�­�©�µ NEIN* NEIN* JA JA NEIN JA*

· ­�¸�¶�ª�²¨�¹�²¬ «�¬�­�¨�® NEIN* JA* NEIN NEIN JA JA

¨�²�©�²¬ «�¬�­�¨�® JA JA* JA JA* JA JA

* Wurde oben nicht gezeigt, ist aber leicht nachvollziehbar.

Bemerkungen:

In der Diagonalen der Tabelle steht nur die Antwort „JA“, weil jeder Trigger zu sichselbst kommutativ ist.

Die Diagonalgestalt der Tabelle war zu erwarten, weil gilt: Ist der Trigger r1 zumTrigger r2 kommutativ, so ist auch der Trigger r2 zum Trigger r1 kommutativ.

Schreibweise:

Für zwei Zustände Si und Sj in einem Ausführungsgraphen bezeichne Si → Sj, sodaß ausgehend vom Zustand S i eine Kante zum Zustand Sj existiert.

Si →→* Sj bedeutet, daß es einen Pfad der Länge 0 oder größer von dem Knoten Si

nach Sj gibt.

Lemma 2 (Pfad-Konfluenz)

Gibt es in einen beliebigen Ausführungsgraphen AG für jeweils drei DB-Zustände S,Si, Sj in AG, S →* Si, S →* Sj einen vierten Zustand S’ mit den Pfaden

Si →* S’ und Sj →* S’.

Dann hat AG höchstens einen Endzustand.

Page 71: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 3 Analyse von Triggermengen 65

Graphisch:

Bild 1

Beweis: (Beweis durch Widerspruch) Angenommen, AG hätte 2 Endzustände F1 undF2 (vgl. Definition des Endzustandes von Seite 42). Sei S der Anfangszustand, sodaß gilt S →* F1 und S →* F2. D. h. es gibt Pfade von Anfangs- zu Endzuständen.Nach der Voraussetzung muß es dann einen vierten Zustand S’ geben, so daßF1 →* S’ und F2 →* S’ gilt. Da F1 und F2 beides Endzustände sind, gilt demnachS’ = F1 und S’ = F2 im Widerspruch zu F1 ≠ F2. Damit hat EG höchstens einenEndzustand.

Es ist im allgemeinen sehr schwierig zu bestimmen, ob die Voraussetzungen vonLemma 2 (Pfad-Konfluenz) erfüllt sind, da die Behauptung auf beliebig langenPfaden basiert. Durch das folgende Lemma erhält man eine etwas schwächereBedingung, jedoch ist diese einfacher zu überprüfen:

Page 72: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 3 Analyse von Triggermengen 66

Lemma 3 (Kanten-Konfluenz)

In einem beliebigen Ausführungsgraphen ohne Zyklen gebe es für jeweils dreiZustände S, Si, Sj mit den Pfaden S → Si, S → Sj einen vierten Zustand S’ mit denPfaden:

Si →* S’ und Sj →* S’.

Dann gibt es für alle Zustände Sl und Sk in dem Ausführungsgraphen mit

S →* Sl, S →* Sk

einen Zustand S’’ mit Pfaden

Sl →* S’’ und Sk →* S’’.

Graphisch:

Bild 2

Beweis:

Voraussetzung: Für jeweils drei Zustände S, Si, Sj mit den PfadenS → Si, S → Sj gebe es einen vierten Zustand S’ mit den Pfaden:

Si →* S’ und Sj →* S’.

Induktion über die Pfadlänge: Die Pfade der Länge 1: S → Si, S → Sj

Induktionsannahme: Dann gibt es für alle Zustände Sl und Sk in demAusführungsgraphen mit

S →* Sl, S →* Sk

einen Zustand S’’ mit Pfaden

Sl →* S’’ und Sk →* S’’.

Induktion: Aufgrund des Pfades S → Si schließt man auf einen Pfad S → Si →* Sl derLänge n, mit S → Sj schließt man ebenfalls auf einen Pfad S → Sj →* Sk derLänge n.

Fallunterscheidung:

Fall 1: S = Sl: Man wähle dann S’’ = Sk.

Page 73: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 3 Analyse von Triggermengen 67

Fall 2: S = Sk: Analog mit S’’ = S l.

Fall 3: Es gibt Knoten Si und Sj mit: S → Si →* Sl und S → Sj →* Sk . Nach derVoraussetzung existiert ein Knoten S’ mit Si →* S’ und Sj →* S’. Nun wenden wir dieVoraussetzung auf Sl an und schließen aus S i →* Sl und Si →* S’ auf die Existenzeines Knoten S’’’ mit sowohl S l →* S’’’ als auch S’ →* S’’’.

Also gibt es einen Pfad S →* S’’’.

Damit und mit Sj →* Sk liefert die Voraussetzung, diesmal angewendet auf Sj, ein S’’mit S’’’ →* S’ und Sk →* S’’; also auch S l →* S’’.

Bemerkung:

Eine andere Möglichkeit das Lemma 3 zu beweisen ist in [23] nachzulesen. Der dortbeschriebene Beweis arbeitet mit Termersetzungssystemen.

Zusammenfassung:

Also ergeben sich als Bedingungen für Konfluenz der Triggermenge R folgendeAnforderungen:

1. In den Ausführungsgraphen von R existieren keine unendlich langen Pfade, d.h.es existieren keine Zyklen.

Page 74: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 3 Analyse von Triggermengen 68

2. In den Ausführungsgraphen von R gibt es zu jeweils drei Zuständen S, Si, Sj mitden Pfaden S → Si, S → Sj einen vierten Zustand S’ mit

Si →* S’ und Sj →* S’.

Die Bestätigung der ersten Bedingung kann man erhalten, indem man dieAusführungsgraphen nach Zyklen untersucht.

Es fehlen aber noch Analysetechniken, um die zweite Bedingung zu erfüllen.

Man betrachte Ausführungsgraphen für R und die drei DB-Zustände S, Si, und Sj

derart, daß gilt S → Si und S → Sj. Diese Konfiguration ist für alle Zustände S erfüllt,in denen zwei ungeordnete ausgelöste Trigger zur Betrachtung herangezogenwerden. Der Trigger ri bezeichne die Kante S → Si und der Trigger rj die KanteS → Sj. Zu beweisen ist nun, daß es einen weiteren Zustand S’ gibt, so daß S i →* S’und Sj →* S’ gilt. Es ist naheliegend anzunehmen, daß wenn ri und rj kommutativsind, man rj im Zustand Si und ri im Zustand Sj betrachtet, sie denselben Zustand S’liefern. Leider ist dies nicht immer möglich: Wenn ri einen Trigger r mit höhererPriorität als rj auslöst, so wird nicht rj im Zustand Si betrachtet (mit ri im Zustand Sj

ebenso), sondern der Trigger mit der höchsten Priorität, nämlich r. Dann kann rweitere Trigger mit höherer Priorität als rj auslösen.

Auf obiges wird später noch einmal eingegangen, begründet wird erst die Anforder-ung für die Existenz eines Zustandes S’, der von den beiden Zuständen Si und Sj,durch Erzeugen eines Pfades von Si und Sj nach S’, erreicht werden kann,. DiesePfade werden durch Auslösen von Triggern erzeugt. Wir nennen diese Pfade p1 undp2. Vom Zustand Si ausgelöste Trigger mit höherer Priorität als rj werden betrachtet,bevor rj ausgewählt wurde. Diese Trigger bilden die Menge R1. Ebenso werden dievom Zustand Sj ausgelösten Trigger mit höherer Priorität als ri betrachtet, bevor ri

ausgewählt wurde. Diese Trigger bilden die Menge R2. Danach kann ri auf dem Pfadp1 und rj auf dem Pfad p2 betrachtet werden. Die Pfade p1 und p2 haben bis zudiesem Punkt folgendes Aussehen:

Bild 3

Page 75: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 3 Analyse von Triggermengen 69

Angenommen, wir können vom Zustand Si’ dem Pfad p1, durch Betrachtung derTrigger in R2 (in derselben Reihenfolge), weiter folgen, z. B. sei angenommen dieTrigger in R2 sind ebenso ausgelöst und betrachtet. Ebenso sollen vom Zustand Sj’die Trigger aus R1 betrachtet werden. Dann werden auf beiden Pfaden dieselbenTrigger betrachtet. Daher, wenn jeder Trigger in {ri} ∪ R1 mit jedem Trigger {rj} ∪ R2

kommutiert, sind die Trigger paarweise kommutativ. Die beiden Pfade sind somitäquivalent und erreichen denselben Zustand S’ wie im folgenden Bild gezeichnet.

Bild 4

Leider ist es jedoch nicht unbedingt so, daß die Trigger in R2 vom Zustand Si’ausgelöst und betrachtet werden. Das gleiche gilt für die Trigger in R1 vom ZustandSj’. (Z. B. könnte es möglich sein, daß ein Trigger in R2 nicht vom Zustand Si’ausgelöst wird, weil rj einen Trigger mit höherer Priorität ausgelöst hat.) Diegewünschte Reihenfolge ist nur dann anzunehmen, wenn wir alle Trigger, die in R1

vorkommen, daraufhin ausweiten, daß alle möglichen Trigger mit einer höherenPriorität als die Trigger in R2 betrachtet werden, ebenso mit den Triggern in R2.Benutzt man diese gegenseitige rekursive Definition von R1 und R2, so garantiert diepaarweise Kommutativität von Triggern in {ri} ∪ R1 mit den Triggern {rj} ∪ R2 dieExistenz des Zustandes S’, und somit Konfluenz.

Um Konfluenz für die Trigger in R zu bestimmen, müssen nun alle Paare vonTriggern ri und rj betrachtet werden, die von einem Zustand desAusführungsgraphen gleichzeitig ausgelöst werden können.

Page 76: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 3 Analyse von Triggermengen 70

Lemma 4 (Konfluenz Lemma)

Voraussetzung:

Man betrachte jedes Paar Trigger ri und rj aus der Menge R, die ungeordnet sind.Seien R1 ⊆ R und R2 ⊆ R nach dem folgenden Algorithmus konstruiert:

R1 ← {ri}

R2 ← {rj}

wiederhole solange bis nichts mehr geändert wird:

R1 ← R1 ∪ {r ∈ R | r ∈ Triggers(r1) für ein r1 ∈ R1

und r > r2 ∈ P für ein r2 ∈ R2 und r ≠ rj}

R2 ← R2 ∪ {r ∈ R | r ∈ Triggers(r2) für ein r2 ∈ R2

und r > r1 ∈ P für ein r1 ∈ R1 und r ≠ ri}

Für jedes Paar von Triggern r1 ∈ R1 und r2 ∈ R2 müssen r1 und r2 kommutieren.

Behauptung:

Gilt die Voraussetzung für alle ungeordneten Paare der Menge R, so gibt es injedem Ausführungsgraphen AG von R für jeweils drei Zustände S, Si, und Sj in EG,S → Si und S → Sj, einen vierten Zustand S’ mit den Pfaden

Si →* S’ und Sj →* S’.

Beweisidee:

Es ist zu zeigen, daß es einen Zustand S’ mit Si →* S’ und Sj →* S’ gibt. Dies wirddurch Konstruktion der Pfade

p1‘ = S →riSi →* S’ und p2‘ = S →rj Sj →* S’ 11

gezeigt.

Der Beweis wird in 3 Schritten vollzogen:

1. Es wird ein Algorithmus angegeben, um die eindeutigen Pfade p1’ und p2’ zuerzeugen.

2. Die Pfade p1’ und p2’ werden derart erweitert, daß Trigger hinzugefügt werden,deren Auslösung keine Änderung am Pfad (in Bezug auf Anfangs- undEndzustand ) verursacht. Diese erweiterten Pfade werden mit p1 und p2

bezeichnet. Damit haben die Pfade p1’ und p1 und die Pfade p2’ und p2 denselbenAnfangs- und Endzustand.

3. Es wird gezeigt, daß p1’ und p2’ denselben Endzustand haben. Da die Pfade p1’und p1 und die Pfade p2’ und p2 denselben Anfangs- und Endzustand besitzen,genügt es zu zeigen, daß die Pfade p1 und p2 denselben Endzustand besitzen.Dies wird mit Hilfe der paarweisen Kommutativität der Trigger auf den Pfaden p1

und p2 bewiesen.

11 S →ri Si bedeutet, daß man durch Ausführen der Aktion des Triggers ri vom Zustand S in denZustand Si gelangt.

Page 77: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 3 Analyse von Triggermengen 71

Theorem 1 (Konfluenz Theorem)

Angenommen die Anforderungen für Konfluenz werden von der Menge R erfüllt undes gibt keine unendlichen Pfade in den Ausführungsgraphen von R. Dann haben dieAusführungsgraphen von R genau einen Endzustand oder auch: Dann sind dieTrigger in R konfluent.

Beweis:

Sei EG ein Ausführungsgraph von R. Durch das Konfluenz Lemma existieren zujeweils drei Zuständen S, Si, Sj in EG mit S → Si und S → Sj jeweils ein vierterZustand S’ derart, daß gilt: S i →* S’ und Sj →* S’. Durch das Kanten-KonfluenzLemma 3 existiert zu jeweils drei Zuständen S, Si und Sj in EG mit S →* Si undS →* Sj, ein vierter Zustand S’ derart, daß S i →* S’ und Sj →* S’. Durch das Lemma 2(Pfad Konfluenz) hat EG höchstens einen Endzustand, daher hat EG genau einenEndzustand.

Darum erfordert die Analyse, ob die Trigger in R konfluent sind, jedes Paar vonungeordneten Triggern ri und rj in R zu betrachten. Die Mengen R1 und R2 werdennach den Voraussetzungen des Lemmas 4 gebildet, und die Trigger in R1 und R2 aufpaarweise Kommutativität getestet.

Beispiel 8

Betrachten wir die Trigger º�»�¼�½¾�¿�À�½�¾�Á�Â�»�à , Ä�½Å�¾ ¿$º »�¼�½�¾�¿�À ½¾�Á�Â�»�à und ÆÂ�Ç�Å�Ä�½È�É�½�¾�¿�¾�Â�È�º .Weiterhin sei festgelegt, daß der Trigger Æ�Â�Ç�Å�Ä�½�È�É�½�¾�¿�¾�Â�È�º nach den Triggern º »�¼�½�¾�¿À�½¾�Á�Â�»�à und Ä�½Å�¾�¿#º�»�¼�½¾�¿�À�½�¾�Á�Â�»�à ausgelöst werden soll. Es bliebe daher zu überprüfen,ob die Trigger º�»�¼�½¾ ¿�À ½¾�Á�Â�»�à und Ä�½Å�¾�¿$º »�¼�½¾�¿�À�½¾�Á�Â�»�à konfluent sind. Dazu sei ri = º »�¼�½�¾�¿À�½¾�Á�Â�»�à und rj = Ä�½Å�¾�¿#º�»�¼�½¾�¿�À�½�¾�Á�Â�»�à . Die Mengen R1 und R2 werden nach denVoraussetzungen des Lemmas 4 gebildet: Da in Triggers( º�»�¼�½¾ ¿�À ½¾�Á�Â�»�à ) keine Triggervorkommen, gilt:

R1 = { º�»�¼�½¾ ¿�À ½¾�Á�Â�»�à }Da Æ�Â�Ç�Å�Ä�½�È�É�½�¾�¿�¾�Â�È�º ∈ Triggers( Ä�½Å�¾�¿$º »�¼�½¾�¿�À�½¾�Á�Â�»�à ) und ÆÂ�Ç�Å�Ä�½È�É�½�¾�¿�¾�Â�È�º > º�»�¼�½¾�¿�À�½�¾�Á�Â�»�Ãgilt:

R2 = { Ä�½Å�¾ ¿$º »�¼�½�¾�¿�À ½¾�Á�Â�»�à , ÆÂ�Ç�Å�Ä�½È�É�½¾�¿�¾�Â�È�º }Da der Trigger º�»�¼�½�¾�¿�À ½¾�Á�Â�»�à ∈ R1 und ÆÂ�Ç�Å�Ä�½È�É�½¾�¿�¾�Â�È�º ∈ R2 nicht kommutieren (vgl.Beispiele zu Lemma 1), so können wir nach dem Lemma 4 nicht schließen, daß dieMenge dieser drei Trigger konfluent ist.

Man betrachte die drei Trigger º�»�¼�½¾�¿�À�½�¾�Á�Â�»�à , ÆÂ�Ç�Å�Ä�½È�É�½¾ ¿�¾�Â�È�º und È�½»�½¾ ¿�¾�Â�È�º . Es seiwieder vorausgesetzt, daß gilt: º�»�¼�½�¾�¿�À ½¾�Á�Â�»�à > ÆÂ�Ç�Å�Ä�½�È�É�½¾�¿�¾�Â�È�º . Es bleiben daher zweiPaare von ungeordneten Triggern zu untersuchen, um deren Konfluenz zu zeigen:

Die Trigger º�»�¼�½¾ ¿�À ½¾�Á�Â�»�à und È�½�»�½�¾�¿�¾�Â�È�º : Bildet man die Mengen R1 und R2, sobeinhaltet die Menge R1 nur den Trigger º�»�¼�½�¾�¿�À ½¾�Á�Â�»�à und keine weiteren Trigger, dakeiner der beiden anderen Trigger in der Menge Triggers( º�»�¼�½¾�¿�À�½�¾�Á�Â�»�à ) enthalten ist.Die Menge R2 beinhaltet auch nur den Trigger È�½»�½¾�¿�¾�Â�È�º , da auch hier keiner derbeiden anderen Trigger in der Menge Triggers( È�½�»�½�¾�¿�¾�Â�È�º ) enthalten ist.

Daher sind die Trigger kommutativ und mit Hilfe des Theorems (Konfluenz-Theorem)sind die Trigger º »�¼�½�¾�¿�À�½¾�Á�Â�»�à und È�½»�½�¾�¿�¾�Â�È�º konfluent.

Man betrachte die Trigger Ê�Ë�È�»�Ä�¿�¾�Â�È�º , º�»�¼�½¾ ¿�À�½�¾�Á�Â�»�à und È�½�»�½¾ ¿�¾�Â�È�º . Der Trigger È�½»�½�¾�¿¾�Â�È�º soll nach den Triggern Ê�Ë�È�»�Ä�¿�¾�Â�È�º und º�»�¼�½¾�¿�À�½�¾�Á�Â�»�à ausgeführt werden. Bleibt

Page 78: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 3 Analyse von Triggermengen 72

also noch das ungeordnete Triggerpaar Ì�Í�Î�Ï�ÐnÑ�Ò�Ó�Î�Ô und Ô Ï�Õ�Ö�Ò�Ñ�×�ÖÒ�Ø�Ó�Ï�Ù zu untersuchen:Es sei dazu ri = Ì�Í�Î�Ï�Ð�Ñ�Ò�Ó�Î�Ô und rj = Ô�Ï�Õ�Ö�Ò�Ñ�× ÖÒ�Ø�Ó�Ï�Ù . Die Mengen R1 und R2 werden nachder Definition (Konfluenz Anforderungen) gebildet:

Die Menge R2 besteht nur aus dem Trigger Ô�Ï�Õ�ÖÒ Ñ�×�Ö�Ò�Ø�Ó�Ï�Ù , da keine der beidenanderen Trigger in der Menge Triggers( Ô�Ï�Õ�ÖÒ Ñ�× ÖÒ�Ø�Ó�Ï�Ù ) enthalten ist. Die Menge R1

besteht nur aus dem Trigger Ì�Í�Î�Ï�ÐnÑ�Ò�Ó�Î�Ô , obwohl der Trigger Î�ÖÏ�Ö�Ò�Ñ�Ò�Ó�Î�Ô ∈Triggers( Ì�Í�Î�Ï�ÐnÑ�Ò�Ó�Î�Ô ) ist, aber es ist in r2 ∈ R2 kein Trigger vorhanden, der dieBedingung Î�ÖÏ�Ö�Ò - Ò�Ó�Î�Ô > r2 erfüllt. Da die Trigger Ô�Ï�Õ�Ö�Ò - ×�Ö�Ò�Ø�Ó�Ï�Ù und ÌÍ�Î�Ï�Ð - Ò�Ó�Î�Ôkommutieren, ist die Menge nach Lemma 4 und dem Theorem 1 konfluent.

3.4.3 Die Anwendung der Konfluenz-Analyse

Bestimmt die Analyse der Trigger einer Menge R, daß die Triggermenge nichtkonfluent ist, so kann dies auf Paare von ungeordneten Triggern ri und rj

zurückgeführt werden, die die Mengen R1 und R2 derart erzeugt haben, daß dieTrigger r1 ∈ R1 und r2 ∈ R2 nicht kommutieren. (In den meisten Fällen sind r1 und r2

selbst ri und rj.). Anhand dieser Information hat der Benutzer dann dreiMöglichkeiten, um für die Triggermenge Konfluenz zu erreichen:

1. Der Benutzer entscheidet, daß die Trigger r1 und r2 doch kommutieren.

2. Der Benutzer gibt zwischen den Triggern ri und rj eine Ordnung an, wodurchdas Paar ri und rj konfluent ist.

3. Der Benutzer lösche benutzerdefinierte Prioritäten, so daß r1 und r2 nichtmehr in die Mengen R1 oder R2 aufgenommen werden.

Die Möglichkeit 1 ist selbstverständlich die Beste, aber auch nur wenn sie gültig ist.Die Möglichkeit 3 ist nicht so offensichtlich und eigentlich unnütz: Löscht man diePrioritäten, um die Trigger r1 und r2 von R1 und R2 zu eliminieren, so erfüllen sie dieAnforderungen der Konfluenz auch nicht. Daher sollte die Möglichkeit 2 gewähltwerden, wenn die Möglichkeit 1 nicht in Frage kommt (z. B. die Trigger r1 und r2 sindnicht kommutativ). Man beachte hierbei nur, daß das Hinzufügen einer Ordnungzwischen zwei Triggern ri und rj trotzdem noch keine Konfluenz garantiert - dieMengen R1 und R2 können durch andere Paare wachsen und bestimmen, daß dieMenge R immer noch nicht konfluent ist.

3.4.4 Partielle Konfluenz

Konfluenz kann für einige Applikationen eine zu strenge Bedingung sein. Manchmalkann es sehr nützlich sein zu erlauben, daß eine Triggermenge R für einige„unwichtige“ Tabellen der Datenbank nicht konfluent ist, die Konfluenz bei anderen„wichtigeren“ Tabellen aber erfüllt ist. Dies wird mit „partieller Konfluenz“ oder auch„Konfluenz in Bezug auf T’“ bezeichnet, wobei T’ eine Teilmenge der Tabellen T inder DB ist.

Page 79: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 3 Analyse von Triggermengen 73

Hinsichtlich der Ausführungsgraphen sind die Trigger in Bezug auf T’ konfluent,wenn zu den Ausführungsgraphen EG von R und den zwei Endzuständen,F1 = (D1, ∅) und F2 = (D2,∅) in EG, die Tabellen aus der Menge T’ im DB Zustand D1

und D2 gleich sind. (Selbstverständlich ist partielle Konfluenz durch Konfluenzgegeben, da Konfluenz nur einen DB-Endzustand garantiert).

Partielle Konfluenz wird genauso wie Konfluenz analysiert, nur daß man statt dergesamten Menge lediglich eine Teilmenge der Trigger betrachtet: Ausschließlich dieTrigger, die direkt oder indirekt den Endzustand der Tabellen in T’ ändern können.

Definition (Signifikante Trigger):

Sei T’ ⊆ T eine Menge von Tabellen. Die Menge der Trigger, die unter Beachtungvon T’ signifikant ist, wird durch den folgenden Algorithmus gebildet:

Sig(T’) ← {r ∈ R | ⟨I,t⟩, ⟨D,t⟩, oder ⟨U,t.c⟩ ist in der Menge Performs(r) für ein t ∈ T’}

Man wiederhole folgendes, so lange bis die Menge sich nicht mehr verändert:

Sig(T’) ← Sig(T’) ∪ {r ∈ R | es gibt ein r’ ∈ Sig(T’) derart, daß r’ und r nichtkommutieren}

Das bedeutet, daß die Menge Sig(T’) alle Trigger enthält, die Tabellen in T’ ändern.Außerdem werden alle Trigger (rekursiv) hinzugefügt, die nicht mit den Triggern inSig(T’) kommutieren. Dieser Algorihmus bestimmt, ob Trigger kommutieren, wenndie Bedingungen für Nicht-Kommutativität von Lemma 1 benutzt werden.

Wie in dem Konfluenz-Theorem, erfordert partielle Konfluenz, daß die Menge vonTriggern terminiert. In dem Fall, wird auch nur die Menge Sig(T’) für Terminierungbetrachtet. Daher muß man mit Hilfe der in Kap. 3.3 aufgezeigten Möglichkeit erstfür die Menge Sig(T’) Terminierung garantieren, bevor die Konfluenz untersuchtwird.

Theorem 2 (Partielle Konfluenz)

Sei T’ ⊆ T eine Menge von Tabellen. Angenommen, die Menge Sig(T’) genügt denKonfluenz-Anforderungen von Lemma 4 und es gibt keine unendlichen Pfade in denAusführungsgraphen von Sig(T’). Dann sind die Tabellen in T’ in den EndzuständenF1 und F2 des Ausführungsgraphen von Sig(T’) immer gleich. Das bedeutet, daß dieTrigger in R unter Beachtung von T’ konfluent sind.

Beweisidee: Die folgende Methode soll angewandt werden: Die Konfluenz derTriggermenge Sig(T’) ⊆ R wird benutzt, um partielle Konfluenz für die Trigger in R zubestimmen. Konfluenz ist eine Eigenschaft von Ausführungsgraphen, wobei aberSig(T’) und R nicht dieselben Ausführungsgraphen haben müssen. Dies hat zurFolge, daß, um die Korrektheit der Methode zu beweisen, eine Übersetzungzwischen den Ausführungsgraphen von Sig(T’) und den Ausführungsgraphen von Rgeschaffen werden muß.

Dazu seien p1 und p2 zwei Pfade aus einem beliebigen Ausführungsgraphen, die zuden Endzuständen F1 und F2 führen. Zu zeigen ist dann, daß die Tabellen in T’ inden beiden Endzuständen identisch sind. Da keiner der Trigger, die in den Pfadenp1 und p2 ausgeführt werden, die Tabellen in Sig(T’) ändert, müssen die Tabellen inT’ in den Endzuständen F1 und F2 identisch sein.

Page 80: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 3 Analyse von Triggermengen 74

Will man also überprüfen, ob eine Menge von Triggern in R unter der Beachtung vonT’ konfluent ist, so muß als erstes die Menge Sig(T’) berechnet werden. Dann mußjedes Paar von ungeordneten (nicht-priorisierten) Triggern ri und rj in Sig(T’)betrachtet werden, indem man die Mengen R1 und R2 bildet und diese Mengen dannpaarweise auf Kommutativität testet. Bestimmt die Analyse, daß die Trigger in Rnicht teilweise konfluent sind, so müssen dieselben Überlegungen, wie in Kap. 3.4.3gemacht werden.

Beispiel 9:

Anhand des angegebenen DB-Schemas von Verkäufern und einer Teilmenge derbereits angegebenen Trigger ( Ú�ÛÜ�Û�Ý�Þ�Ý�ß�Ú�à , á�â�Ú�Ü�ãnÞ�Ý�ß�Ú�à und à Ü�ä�Û�Ý�Þ�å�ÛÝ�æ�ß�Ü�ç mit denPrioritäten Ú�ÛÜ�ÛÝ�Þ�Ý�ß�Ú�à < á�â�Ú�Ü�ã�Þ�Ý�ß�Ú�à und Ú�ÛÜ�Û�Ý�Þ�Ý�ß�Ú�à < à�Ü�ä�ÛÝ Þ�å�Û�Ý�æ�ß�Ü�ç ) soll teilweiseKonfluenz für die Tabelle ß�Ú�à�Û�ã�ä�Û�è�è�ä�Û bestimmt werden. Dazu vorab die MengenPerforms(r):

Performs( áâ�Ú�Ü�ãnÞ�Ý�ß�Ú�à )={< Üzé\ß�Ú�à�Û�ã�ä�Û�è�è�ä�Û~ê Ý�ß�Ú�à >}

Performs( à Ü�ä�Û�Ý�Þ�å�ÛÝ�æ�ß�Ü�ç )={< Ü�éVß�Ú�à�Û�ã�ä�Û�è�è�ä�Û~êëà�Ûì�ß�è�ä >}

Performs( Ú�ÛÜ�Û�Ý�Þ�Ý�ß�Ú�à )=∅.

Daraus folgt, daß die Menge der Trigger, die unter Beachtung von T’ signifikant ist,so aussieht:

Sig(T’) = { á�â�Ú�Ü�ãnÞ�Ý�ß�Ú�àwéíà Ü�ä�Û�Ý�Þ�å�ÛÝ�æ�ß�Ü�ç~éîÚ�ÛÜ�ÛÝ�Þ�Ý�ß�Ú�à } mit T’ = { ß�Ú�à�Û�ã�ä�Û�è�è�ä�Û }(Die Trigger áâ�Ú�Ü�ãnÞ�Ý�ß�Ú�à , à�Ü�ä�ÛÝ Þ�å ÛÝ�æ�ß�Ü�ç sind in der Menge Sig(T’) enthalten, da in derAktion eine Änderung an der Tabelle ß�Ú�à�Û�ã�ä�Ûè�è�ä�Û vorgenommen wird. Der TriggerÚ�ÛÜ�ÛÝ Þ�Ý�ß�Ú�à ist in dieser Menge enthalten, da er jeweils zu den Triggern á�â�Ú�Ü�ã�Þ�Ý�ß�Ú�à undà�Ü�ä�ÛÝ Þ�å�Û�Ý�æ�ß�Ü�ç kommutativ ist).

Um die Voraussetzungen des Theorems 2 zu erfüllen, sind noch die Mengen R1 undR2 für das einzige Paar von ungeordneten Triggern à�Ü�ä�ÛÝ�Þ�å�Û�Ý�æ�ß�Ü�ç und á�â�Ú�Ü�ãnÞ�Ý�ß�Ú�à zubilden:

ri = à Ü�ä�Û�Ý�Þ�å�ÛÝ�æ�ß�Ü�ç und rj = á�â�Ú�Ü�ã�Þ�Ý�ß�Ú�à⇒ R1 = { à Ü�ä�Û�Ý�Þ�å�ÛÝ�æ�ß�Ü�ç }⇒ R2 = { áâ�Ú�Ü�ãnÞ�Ý�ß�Ú�à }

Die Trigger à�Ü�ä�Û�Ý�Þ�å ÛÝ�æ�ß�Ü�ç und á�â�Ú�Ü�ãnÞ�Ý�ß�Ú�à sind kommutativ (vgl. auch Übersicht von S.62). Nach Theorem 2 sind die Trigger á�â�Ú�Ü�ã�Þ�Ý�ß�Ú�à , à�Ü�ä�ÛÝ Þ�å�Û�Ý�æ�ß�Ü�ç und Ú�ÛÜ�Û�Ý�Þ�Ý�ß�Ú�à unterBeachtung der Tabelle á�â�Ú�Ü�ã konfluent.

Page 81: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

75

Kapitel 4

Systemanforderungen

Hier sollen die Anforderungen für ein System aufgezeigt werden, das zu einergegebenen Menge von Triggern bestimmen soll, ob die Menge der Trigger konfluentist und terminiert.

Diese Analyse kann zu unterschiedlichen Zeitpunkten durchgeführt werden: Zumeinen ist eine Analyse zur Entwurfszeit, also nach Eingabe der verzögerten Trigger,aber vor der ersten Ausführung der Trigger möglich, zum anderen kann sie auch zurAusführungszeit erfolgen.

Es folgt eine Beschreibung zur Automatisierung der in Kapitel 3 entwickeltenAnalysemöglichkeiten.

Voraussetzungen:

Zu jedem verzögerten Trigger existiert eine Stuktur ï�ð�ñ�ò�óô , in der die folgendenAttribute aufgenommen sind:

• ï�ð�ñ�ò�ó�ô{õ÷ö ø#ù�ú : Name des Triggers

• ï�ð�ñ�ò�ó�ô{õ÷ú�û�ú�ö�ï : Ereignis, auf das der Trigger reagiert ( ñ�ö�ü�ú ðï , ý�ú�þ�ú�ï�ú oder ÿ���ý�øïú ),ohne Tabellenname

• ï�ð�ñ�ò�ó�ô{õ ï�ø���þú : Name der Tabelle, auf der der Trigger basiert

• ï�ð�ñ�ò�ó�ô{õ¢ø���ï�ñ���ö���þ�ñ�ü�ï : Liste, in der die Datenänderungsoperationen, die in derAktion des Triggers ausgeführt werden, mit den Tabellen, in denen dieOperationen durchgeführt werden , stehen

• ï�ð�ñ�ò�ó�ô{õ¢ø���ï�ñ�û�øïú���þ�ñ�ü�ï : Liste der Trigger, die durch den Trigger aktiviert werdenkönnen (dieses Attribut wird erst gefüllt, wenn die Analyse zur Terminierungdurchgeführt wird)

• ï�ð�ñ�ò�ó�ô{õ¢ø���ï�ñ���ö���û�ø�þ�ÿ�ú : Liste der Spaltennamen, die durch die Aktion desTriggers geändert werden (dieses Attribut soll auch erst gefüllt werden,wenn die Analyse zur Konfluenz durchgeführt wird)

Page 82: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 4 Systemanforderungen 76

4.1 Die Analyse zur Entwurfsze i t

4.1.1 Terminierung

Bei der Analyse der Terminierung zur Entwurfszeit soll, anhand einer gegebenenMenge von Triggern, festgestellt werden, ob die Ausführung der Trigger eventuellnicht terminiert. Möglichkeiten der Analyse wurden in 3.3 vorgestellt:

Durch Aktivierungsgraphen ist ersichtbar, ob die Ausführung der Trigger einenZyklus hervorrufen könnte. Daher wird bei der Analyse zur Terminierung für jedenTrigger getestet, welche Trigger er auslösen könnte, welche Trigger wiederum vondiesen Trigger ausgelöste werden könnten u.s.w.. Wird der Trigger, für den derTiefendurchlauf gestartet wird, von einem ausgelösten Trigger wieder ausgelöst, soliegt ein Zyklus vor. Ein Zyklus liegt auch vor, wenn sich der Trigger selbst wiederauslösen kann. D.h. die Menge der Trigger terminiert eventuell nicht. Liegt keinZyklus vor, so terminiert die Ausführung der Trigger garantiert.

Für die Analyse zur Terminierung sind daher folgende Voraussetzungen nötig:

1. Füllen der Liste ������ �������������� jedes Triggers

In jedem Triggerrumpf wird getestet, welche Datenänderungsoperationen vonder Aktion des Triggers ausgeführt werden könnten. Diese Datenänderungs-operationen (Einfügung, Löschung oder Änderung) werden in einer zu jedemTrigger gehörigen Liste ������������������ gesichert.

Für jeden Eintrag in der ������������������ (Datenänderungsoperation undTabellennamen) wird überprüft, ob es einen Trigger gibt (eventuell auch derTrigger selbst), der aufgrund dieses Ereignisses ausgelöst wird. Ist dies derFall, so wird der Name des Triggers in die ������ �������������� des Triggersgeschrieben, dessen ������������������ gerade bearbeitet wird.

2. Analyse zur Terminierung

Für jeden Trigger ������ wird die Analyse zur Terminierung mit Hilfe einesTiefendurchlaufs in ������ �������������� durchgeführt. Dabei wird überprüft, ob derTrigger ������ als Eintrag in ������ �������������� vorkommt. Ist dies der Fall, so liegt einZyklus vor, und es sollte eine diesbezügliche Meldung an den Benutzergegeben werden. Der Tiefendurchlauf muß für jede ������ �������������� der Triggerdurchgeführt werden.

Bestimmt die Analyse, daß die Ausführung der Trigger nicht terminiert, so sollte derBenutzer die Triggerdefinitionen ändern, um mögliche Probleme, die sich zurAusführungszeit ergeben könnten, zu umgehen. Eine Meldung, welche Trigger andem Zyklus beteiligt sind, ist vom Programm auszugeben, damit der Benutzer gleichsehen kann, welche Triggerdefinitionen er eventuell ändern sollte, damit der Zyklusnicht entsteht.

Bemerkung:

In Kapitel 3.3 werden Aktivierungsgraphen gezeichnet, wobei eine Kante von einemTrigger zum nächsten nur entsteht, wenn durch die Aktion des einen Triggers Datenentstehen, die die Bedingung des anderen Triggers erfüllen. Hier werden zurVereinfachung nur die Datenänderungsoperationen von Ereignis und Aktionbetrachtet. Es wird also eine gröbere Analyse vorgenommen.

Page 83: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 4 Systemanforderungen 77

4.1.2 Konfluenz

Bei der Analyse der Konfluenz ist zur Definitionszeit anhand der eventuellgegebenen Prioritäten zu überprüfen, welche Trigger aus der Menge R möglicher-weise nicht konfluent sind.

Als Anforderungen für Konfluenz ergab sich in 3.4 folgendes:

1. In den Ausführungsgraphen von R existieren keine unendlich langen Pfade, d.h.es existieren keine Zyklen, und

2. die Voraussetzungen des Lemmas 4 sind erfüllt.

Die Anforderung 1 wird durch die Analyse zur Terminierung überprüft (siehe dazu4.2.1.).

Zur Erfüllung des Lemmas 4 ist es notwendig, für jedes ungeordnete Paar vonTriggern die Mengen R1 und R2, nach der im Lemma angegebenen Vorschrift zubilden, und diese Mengen auf paarweise Kommutativität der Trigger zu untersuchen.Für den Nachweis der paarweisen Kommutativität der Trigger wird das Lemma 1benötigt.

D. h. folgende Schritte sind erforderlich:

1. Die Listen �!�"�#�$�%�&�'� �(�)�* sollten für die Trigger gefüllt werden, die eine Spalte einerTabelle in ihrer Aktion ändern, wo also ein Eintrag )�+�,� �"�* ... in der �!�"�#�$�%�&�(�#�-�"vorliegt. Dazu trage man den Namen der Spalte, die geändert wird, in die Listeein.

2. Die Trigger werden paarweise auf Prioritäten untersucht. Diese Prioritäten werdenin einer Matrix festgehalten: Die Matrix hat dazu genausoviele Zeilen und Spalten,wie es Trigger gibt. Hat z. B. der Trigger .�/�0�1�243�576�0�8 eine höhere Prirität hat als derTrigger 576�0�893�.�/�0�1�2 und steht der Trigger .�/�0�1�293�5:6�0�8 jeweils in der 1. Zeile undSpalte, während sich der Trigger 576�0�893�.�/�0�1�2 in der 3. Zeile und Spalte der Matrixbefindet, so erhält die Matrix an der Stelle (3,1) einen Eintrag und an der Stelle(1,3) einen weiteren Eintrag, die auf die gegebenen Prioritäten hinweisen.12

3. Anhand der Ergebnisse in der Matrix sollen, für jedes Paar von ungeordnetenTriggern, die Mengen R1 und R2, nach der im Lemma gegebenen Vorschrift,gebildet werden. So füge man der Menge R1 all die Triggernamen hinzu, die voneinem Trigger aus R1 ausgelöst werden können, für die wiederum ein Trigger ausR2 mit niedrigerer Priorität existiert. Bei der Menge R2 füge man die Triggernamenhinzu, die von einem Trigger aus R2 ausgelöst werden können, wobei auch nurdiejenigen gewählt werden, für die es aus der Menge R1 einen Trigger mitniedrigerer Priorität gibt. (Man vergleiche hierzu auch die Beschreibung derProzedur ;�*�%�<�*�% im Modul !�$�%�=�(�)�*�%�!�*?>@! in Kapitel 6.3.3).

4. Die Elemente in den Mengen R1 und R2 müssen auf paarweise Kommutativitätüberprüft werden (unter Verwendung der Ergebnisse des Lemmas 1). Dazuwerden die Punkte 4.1 - 4.3 für jedes ungeordnete Paar von Triggern der MengenR1 und R2 untersucht (durch die „grobe“ Analyse der Bedingungen 1 - 3 werdendie Bedingungen 4 und 5 automatisch mitgeprüft):

12 Später - in Punkt 3 - wird nur ein Eintrag in der Matrix beachtet. Die doppelte Schreibweise dientnur der Vereinfachung. Benutzt wird die Matrix auch für den Test, ob Widersprüche in den Prioritätenauftauchen.

Page 84: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 4 Systemanforderungen 78

4.1 Test, ob der eine Trigger den anderen Trigger auslösen kann, d.h. es ist zuüberprüfen, ob der eine Trigger in der Menge A�B�C�D�E�A�C�F�G�H�D�I�C des anderenTriggers steht oder umgekehrt

4.2 Test, ob der eine Trigger in seiner Aktion etwas löscht, worauf der andereTrigger mit einem D�J�I�F�K�C oder L�M�N A�C�F als Ereignis reagiert hätte, also ob in derA�B�C�D�O�J�G�H�D�I�C des einen Triggers ein N F�H�F�C�F steht, und ein anderer Trigger alsF�E�F�J�C ein D�J�I�F�K�C oder L�M�N A�C�F in derselben Tabelle hat

4.3 Test, ob in der Aktion der Trigger dieselben Werte geändert werden, also obein Eintrag in den Listen A�B�C�D�O�J�G�E�A�H L F übereinstimmt

Trifft einer der Punkte 4.1 bis 4.3 zu, so sollte die Meldung ausgegeben werden, daßdie Menge der Trigger möglicherweise nicht konfluent ist. Eine Ausgabe der Namender Trigger, die dafür verantwortlich sind (das sind die Trigger, für die die MengenR1 und R2 gebildet wurden), ist für den Benutzer auch hier für die Fehlersuchenützlich.

4.2 Die Analyse zur Ausführungszei t

Auf eine Analyse zur Ausführungszeit der Konfluenz wird verzichtet, Hintergrunddabei ist, daß zur Ausführungszeit bereits eine Reihenfolge der Ausführung derTrigger vom System vorgenommen wurde. Diese Reihenfolge entsteht aus denProgrammen, die die verzögerten Trigger simulieren. Aufgrund dieser vollständigenOrdnung müssen die Trigger konfluent sein.

Wurde noch keine Ausführungsreihenfolge durch das System vorgenommen, so isteine Analyse derart denkbar, daß bei der Auslösung mehrerer Trigger, die aufdasselbe Ereignis reagieren und nicht priorisiert sind, alle möglichenAusführungsreihenfolgen getestet werden. Nach dieser Ausführung werden dieErgebnisse verglichen. Unterscheidet sich nur ein Ergebnis von den anderen, so istdie Menge der Trigger nicht konfluent.

4.2.1 Terminierung

Eine Menge von Triggern R terminiert, wenn die Folge der Triggerausführungvollständig ist, also ein Endzustand vorliegt. Liegt dieser Endzustand nicht vor, sokönnen Zyklen die Ursache sein. Zyklen sind Wiederholungen derTriggerausführung, wobei die Ausführung der Trigger nicht endet. Hier soll nungezeigt werden, welche Stufen von Zyklen existieren und wie diese zurAusführungszeit erkannt werden können.

Betrachtet man die Zyklen zur Ausführungszeit, so ergeben sich folgende Stufen vonZyklen:

Zyklus der Stufe 1:

In der Aktion eines Triggers wird eine Aktion durchgeführt, die vom anderenTrigger wieder rückgängig gemacht wird, wodurch der Trigger wieder ausgelöstwird, der wieder dieselbe Aktion durchführt. Nach der Ausführung der Triggerliegt also derselbe DB-Zustand vor, der vor der Ausführung vorhanden war.

Page 85: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 4 Systemanforderungen 79

Bsp.: Der Trigger r1 reagiert auf eine Löschung und fügt ein Tupel in eineTabelle ein. Der Trigger r2 reagiert gerade auf diese Einfügung und löschtdieses Tupel wieder, wodurch wieder der Trigger r1 ausgelöst wird, usw.

Zyklus der Stufe 2:

Ein Trigger reagiert auf die Änderung eines Wertes, während aber in derAktion des Triggers dieser Wert wieder geändert wird. Nach der Ausführungdieses Triggers liegt nicht derselbe DB-Zustand wie anfangs da an einemTupel Werte geändert wurden. Voraussetzung für einen Zyklus der Stufe 2 ist,daß es im Trigger keine Bedingungen gibt, die diesen Zyklus abbrechen lassenkönnten.

Das bedeutet, daß ein Zyklus dann vorliegt, wenn die Ausführung der Trigger nichtendet, also eine Menge von Triggern unendlich oft aufgerufen wird.

Dazu nun der folgende Vorschlag zur Zyklenerkennung:

Es ist keine Möglichkeit gegeben einen Zyklus der Stufe 2 eindeutig festzustellen.Bei der Zyklenerkennung werden daher nur Zyklen der Stufe 1 berücksichtigt. Dazuwerde die Reihenfolge der Auslösung der Trigger in der Tabelle P�Q�R�S�R�T�R�U�Umitprotokolliert, indem in diese Tabelle der Name des Triggers geschrieben wird undals Zähler die Anzahl des Triggeraufrufs:

Die Tabelle P�Q�R�S�R�T�R�U�U hat damit folgendes Aussehen:V Q�W�X�X�Y�Q�Z�[]\�Y ^�_�`�U�Y�Q

Werden nun z.B. die Trigger a�b , c�d und b�a in der Reihenfolge a�b , c�d , b�a , a�b , b�a nacheinem Operationsblock aufgerufen, so sollten in der Tabelle P�Q�R�S�R�T�R�U�U folgendeEinträge stehen:V Q�W�X�X�Y�Q�Z�[]\�Y ^�_�`�U�Y�Q

a�b ec�d fb�a ga�b hb�a i

Wird die Aktion des ersten Triggers ausgeführt, so ist der ^�_�`�U�Y�Q = 1, wird die Aktiondes zweiten Triggers durchgeführt, so ist der ^�_�`�U�Y�Q = 2 u.s.w.. Weiterhin sind diezugrundeliegenden Transitionstabellen statt der gesamten DB, zu jedemTriggeraufruf zu sichern. (Das häufige Sichern der gesamten DB ist zu aufwendig.Da die Transitionstabellen den Nettoeffekt der Transaktion wiederspiegeln, reicht esauch, diese zu speichern.)

Die Sicherung der Transitionstabellen solle in der (zu jedem Trigger gibt es eineTabelle, die die Kopien enthalten soll) Tabelle j�W�k�k7l�m V Q�W�X�X�Y�Q�Z�[]\�Y�n vorgenommenwerden. Das Aussehen der Tabelle j�W�k�k7l�m V Q�W�X�X�Y�Q�Z�[]\�Y�npoq�r�sutwv�x�y{z�x�|~}:r�z�s�v�x�z�����������x�|�x�y���v�s:��xut�t�x [�Z���[�`�U

Page 86: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 4 Systemanforderungen 80

Mit den Spalten der ������������� -Differenztabelle sind die Spalten der Tabelle, auf der derTrigger definiert ist, in doppelter Ausführung (einmal mit dem Präfix ������� und einmalmit dem Präfix ��������� gemeint, sowie eine Spalte für den TI.

Die Inhalte der Tabelle ����������������� und die Tabellen zur Sicherung der Transitions-tabellen �������7���������������������]����� sind jeweils zu löschen, wenn kein Trigger mehrauszulösen ist, also am Ende der Triggerverarbeitung.

Bei jeder Einfügung (mit Ausnahme der ersten) in die Tabelle ����������������� werden dieTransitionstabellen in die Tabellen �������7���������������������]����� gesichert. Danach ist einVergleich zwischen den bereits vorhandenen Einträgen in diesen Tabellen und denneuen Einträgen durchzuführen. (Beim Vergleich ist die Spalte ���� ���¡��selbstverständlich nicht mit zu berücksichtigen). Stehen dieselben Einträge bereitsschon einmal in den Tabellen, so liegt ein Zyklus vor und es sollte ein Rollbackerfolgen.

Also sind folgende Schritte durchzuführen:

1. Die Tabelle, die die Auslösung der Trigger mitprotokolliert, ist zu erzeugen. Sieerhält den Namen ����������������� mit den Spalten ��������������������� und ¢�£�¡������ , sowie dieentsprechenden Datentypen.

2. Vor dem Aufruf eines Triggers ist ein Eintrag in die Tabelle �����������������vorzunehmen. Realisiert werden kann dies einmal dadurch, daß jeder Triggerderart erweitert wird, daß als erstes ein Eintrag in der Tabelle �����������������vorgenommen wird, oder aber dadurch, daß das Programm, welches dieverzögerten Trigger aufruft, zuvor erst einen Eintrag in die Tabelle �����������������vornimmt.

3. Zu jedem verzögerten Trigger ist eine weitere Tabelle mit dem Namen< �����������������]��������������� anzulegen, die dieselben Spalten wie die Transitionstabelle������������� und eine weitere Spalte ���� ���¡�� erhält: In dieser Spalte wird gesichert, zuwelchem Triggeraufruf die Inhalte der Differenztabelle gehören. Es steht dort alsoderselbe Wert wie in der Spalte ¢�£�¡������ der Tabelle ����������������� .

4. Ein sofortiger Trigger �������7��������� ist für die Tabelle ����������������� zu definieren: DerTrigger �������:��������� hat die folgenden Aufgaben:

Wird in die Tabelle ����������������� etwas eingefügt, so sollen die Transitionstabellengesichert werden: Außer den Kopien der Transitionstabellen wird die Spalte ¢�£�¡������der aktuellen Tupels der Tabelle ����������������� in jedes Tupel, das kopiert wird, miteingefügt. Nach den Kopien der Transitionstabellen sollen die Tupel in denTransitionstabellen verglichen werden, falls ein Trigger bereits schon einmalaufgerufen wurde. Zum Vergleich soll die Funktion �������:��¤������������ benutzt werden.Dazu wird der zugehörige Wert in der Spalte ¢�£�¡������ mit an die Funktionübergeben. Der von der Funktion �������7��¤������������ zurückgelieferte Wert ist von demTrigger �������:��������� auszuwerten. Je nach Ergebnis ist ein Programmabbruchvorzunehmen.

Ein Beispiel zur Erläuterung:

Wie oben seien die Einträge in der Tabelle ����������������� . Nach dem Eintrag jedesTupels in die Tabelle ����������������� wird getestet, ob der Triggername, der geradeeingefügt wurde, bereits schon einmal in der Tabelle ����������������� steht. Nach demEintrag des 4. Tupels (BR,4) in die Tabelle, sind demnach auch die

Page 87: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 4 Systemanforderungen 81

Transitionstabellen zu vergleichen. Dazu wird der Wert 4 mit an die Prozedur¥�¦�§�§:¨�©�ª�«�¬�­�®�¯ übergeben.

Bemerkung:

Durch die Übergabe des Wertes 1 an die Funktion ¥�¦�§�§7¨�©�ª�«�¬�­�®�¯

wäre die Anzahlder Vergleiche der Kopien in den Tabellen

¥�¦�§�§:¨�°�±�®�¦�²�²�¯�®�³�­]«�¯�´ erheblich geringer.

Jedoch ist die Übergabe des Wertes 1 nur schwer möglich, da kein Zugriff imTrigger µ ®�¦�²�¨�¥�¦�§�§ auf die Tabelle

¬�®�ª µ ª�¶�ª�·�· möglich ist (während der Abarbeitungdes Triggers ist die Tabelle gesperrt). Der Vergleich in den Sicherungen derTransitionstabellen würde sich dann auf den Vergleich der Tupel 1 und 4beschränken, so werden nun die Tupel des 1. bis 3. Aufrufs der Sicherung derTransitionstabellen mit den Tupeln der 4. Sicherung der Transitionstabellenverglichen.

5. Anlegen der Funktion ¥�¦�§�§7¨�©�ª�«�¬�­�®�¯

: Die Datensätze in den zugehörigen Tran-sitionstabellen werden verglichen, indem die entsprechenden Datensätze jederSicherungstabelle gesucht und mit den Tupeln der letzten Sicherung (durch denParameter festgelegt) verglichen werden. Stimmen die Datensätze überein, soliefert die Funktion

¥�¦�§�§7¨�©�ª�«�¬�­�®�¯ den Wert Null zurück, ansonsten ist der

Funktionswert größer Null. Der Funktionswert Null bedeutet demnach, daß dieInhalte der Transitionstabellen beim Aufruf der Trigger gleich waren, und somitein Zyklus vorliegt.

Liegen in den Transitionstabellen dieselben Werte vor, so ist eine Meldung überdie Entdeckung eines echten Zyklus der Trigger an den Benutzer zu geben.

Ein Beispiel, wie die Funktion ¥�¦�§�§7¨�©�ª�«�¬�­�®�¯

aussehen könnte, ist im Anhang Dgezeigt.

4 .3 Entstehendes T ool

Die Analyse zur Konfluenz und Terminierung soll nach der Installation derverzögerten Trigger vorgenommen werden. Hier wird die Analyse zur Entwurfszeitdurchgeführt. Dabei soll aber die Analyse zur Terminierung zuerst vorgenommenwerden, da Terminierung eine Voraussetzung der Konfluenz einer Menge vonTriggern ist.

Die Voraussetzungen, die eine Analyse zur Ausführungszeit ermöglichen, sollennach der oben genannten Analyse, erfolgen, d.h. die Tabelle

¬�®�ª µ ª�¶�ª�·�· , die dieTriggeraufrufe sichert, die Tabellen

¥�¦�§�§:¨�°�±�®�¦�²�²�¯�®�³�­�«�¯�´, die die Kopien der

Transitionstabellen enthalten soll, die Funktion ¥�¦�§�§:¨�©�ª�«�¬�­�®�¯

, die die Inhalte derSicherungskopien vergleicht und den Trigger

¥�¦�§�§7¨ µ ®�¦�² , der auf eine Einfügung in dieTabelle

¬�®�ª µ ª�¶�ª�·�· reagiert, müssen erstellt werden.

D. h. es ergibt sich folgender Ablauf:

Page 88: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 4 Systemanforderungen 82

Installation der verzögerten Trigger

Analyse zur Terminierung

Analyse zur Konfluenz

Erstellen der Funktion ¸�¹�º�º7»�¼�½�¾�¿�À�Á� ,der Tabelle ¿�Á�½�Ã�½�Ä�½�Å�ÅuÆ

der Tabellen ¸�¹�º�º7»�Ç�È�Á�¹�É�É�Â�Á�Ê�À�¾�Â�Ë unddes Triggers ¸�¹�º�º7»�Ã�Á�¹�É

Ist die Analyse zur Ausführungszeit vom Benutzer unerwünscht, so kann er denTrigger ¸�¹�º�º7»�Ã�Á�¹�É , der auf eine Einfügung in die Tabelle ¿�Á�½�Ã�½�Ä�½�Å�Å reagiert, entfernen,oder, falls er später vielleicht doch noch einmal benötigt werden würde, einfachausstellen (In PL/SQL mit dem Befehlen ¸�Á�½�¿ÌÃ�Á�¹�É�É�Â�Á͸�¹�º�º:»�Ã�Á�¹�É oder aber nur dasAusstellen des Triggers mit dem Befehl À�Å�Ã�Â�ÁÎÃ�Á�¹�É�É�Â�Áϸ�¹�º�º:»�Ã�Á�¹�Éи�¹�Ñ�À�Ò�Å� ). Dadurchwerden zwar noch die Einträge in der Tabelle ¿�Á�½�Ã�½�Ä�½�Å�Å vorgenommen, jedochwerden die Transitionstabellen nicht mehr gesichert und demnach auch nicht mehrmiteinander verglichen.

Ist die Analyse zur Ausführungszeit generell unerwünscht, so können zwar dieTabellen ¸�¹�º�º7»�Ç�È�Á�¹�É�É�Â�Á�Ê�À�¾�Â�ËpÆ die Funktion ¸�¹�º�º:»�¼�½�¾�¿�À�Á� und der Trigger ¸�¹�º�º7»�Ã�Á�¹�É nichtaber die Tabelle ¿�Á�½�Ã�½�Ä�½�Å�Å gelöscht werden.

Wird ein Zyklus durch das Produktionstool erkannt, so muß ein Rollback erfolgen,um den DB-Zustand vor der Triggerausführung wiederherzustellen. Einediesbezügliche Rückfrage ist sinnvoll.

Page 89: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

83

Kapitel 5

Das Triggersubsystem (TSS)

Das TSS wurde um die in Kapitel 4 vorgestellte Analyse zur Konfluenz undTerminierung erweitert. Nach einer Beschreibung des TSS folgen Erläuterungen,welche Änderungen am Programm für diese Analysen vorgenommen werdenmußten. Ausgangspunkt war dabei, daß das TSS als gegeben vorausgesetzt wird,und Erweiterungen für die Analysen vorgenommen wurden.

5.1 Programmbeschre ibung des vorhandenen T SS

Durch das TSS ist die Verwendung von verzögerten Triggern auf dem DBMSOracle7 möglich. Dabei können mehrere Trigger unabhängig voneinander auf einerTabelle arbeiten. Die Abarbeitungsreihenfolge ist durch Prioritäten bestimmt.

Die folgenden Kapitel sind teilweise [5] entnommen, aber auch weiter ausgearbeitetworden.

Page 90: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 5 Das Triggersubsystem 84

5.1.1 Programmablauf

Der Programmablauf zur Entwurfszeit:

Anmelden bei Oracle7

Lesen des Namens der Datei, inder die verzögerten Trigger stehen

Triggerköpfe lesenTriggernamen zu Tabellen zuordnen

Datei Ó�Ô�Õ�Ö�×4Ø�Ù�Ù�Ú@Û�Ü�Ù anlegen

Transitionstabellen und Hilfstabellenzur Berechnung des Nettoeffekts und

Einfügetrigger anlegen

Trigger in Prozeduren umwandeln

Ý�Þ ×�ß�Õ Ý�Ý4à�á erzeugen

Abmelden bei Oracle7

Wenn die verzögerten Trigger verändert werden sollen, müssen die angelegtenProzeduren, Trigger und Transitionstabellen wieder gelöscht werden. Der Benutzermuß dazu die Prozedur Ó�Ô�Õ�Ö�×4Ø�Ù�Ù (unter SQLPLUS mit der Befehlseingabe: â�Ó�Ô�Õ�Ö�×ãØ�Ù�Ù�äaufrufen.

Page 91: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 5 Das Triggersubsystem 85

Der Programmablauf zur Ausführungszeit:

Eingabe einer SQL-Anweisung

Berechnung des Nettoeffekts

Aufruf der Funktion å�æ�ç�è�é�å�å4ê�ë

Noch Trigger auszulösen?

Ja Nein

Triggeraktion wird ausgeführt

Eingaben von SQL-Anweisungen werden also so lange vom Benutzer erwartet, bisdie Prozedur å�æ�ç�è�é�å�åãê�ë aufgerufen wird. Nach jeder SQL-Anweisung wird automatischder Nettoeffekt berechnet. Der Aufruf der Datei å�æ�ç�è�é�å�å4ê�ë kennzeichnet dasTransaktionsende. Dadurch werden die Trigger ausgelöst. Die Aktionen der Triggerwerden solange ausgeführt, bis kein Trigger mehr ausgelöst ist. Ist dies der Fall, someldet sich SQLPLUS mit ì�í�é�è�î�ï�ð�í�î~ñ�ð�è�è�î�ñ�ñ�ò�ð�ó�óôæõè�é�å�ì�ó�î�ë�î�ï zurück.

5.1.2 Die Umsetzung auf Oracle7

Die verzögerten Trigger sind in eine Datei zu schreiben. Zu jedem Trigger, der ausder Datei gelesen wird, werden 6 Tabellen angelegt. Dies sind zum einen 3Transitionstabellen ( ï�î�ó�î�ë�î�ï , ê�ö�ñ�î�í�ë�î�ï und ð�ì�ï�÷�ë�î�ï ) und zum anderen 3 Hilfstabellenzur Berechnung des Nettoeffekts während der Transaktion. Weiterhin wird für jedenverzögerten Trigger ein Datensatz-Trigger definiert, der die Änderungen, diewährend der Transaktion an der Tabelle vorgenommen werden, mitprotokolliert.Dieser Trigger berechnet auch nach jeder Transaktion den Nettoeffekt.

Die einzelnen verzögerten Trigger werden in Prozeduren umgewandelt. NachTransaktionsende werden diese von der zusätzlichen Prozedur å�æ�ç�è�é�å�åãê�ë aufgerufen(bereits in Kapitel 2.4.2.3 beschrieben). Der Benutzer soll das Transaktionsende mitdem Aufruf dieser Prozedur durch Eingabe des Befehls î�ø�î�èùå�æ�ç�è�é�å�å4ê�ë auf SQLPLUS-Ebene angeben. Dabei wird dann die prioritätsgesteuerte Feuerung der verzögertenTrigger vorgenommen.

Einschränkungen bezüglich der Anzahl der Trigger wurden bereits in Kapitel 2.4.2.2dargelegt.

Page 92: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 5 Das Triggersubsystem 86

Das Programm ú�û�ü�ý�ý�þ�û , das die verzögerten Trigger aus einer Datei ausliest unddazu die Transitionstabellen, die Hilfs-Transitionstabellen, die Trigger und dieProzeduren unter Oracle7 anlegt, ist in Pro*C geschrieben. Pro*C ist eineErweiterung der Programmiersprache C. Jedem Pro*C Befehl wird die AnkündigungEXEC SQL vorangestellt. Der Pro*C-Präprozessor wandelt diese Befehle in normaleFunktionsaufrufe um. Dazu werden später beim Linken die Oracle/Kommunikationsbibliotheken hinzugebunden. Mit dem Standard C-Compiler wird dermodifizierte Quellcode übersetzt und vom Linker anschließend zusammengebunden.

5.2 Erwei terungen im T SS

Das TSS wurde um die folgenden Punkte erweitert:

• Möglichkeit der Eingabe der Prioritäten anhand von ÿ�û�þ���þ � þ�� - und ���������� -Listen;

• Analyse zur Entwurfszeit, ob die angegebene Triggermenge terminiert;

• Analyse zur Entwurfszeit, ob die angegebene Triggermenge konfluent ist;

• Analyse zur Ausführungszeit, ob bei der Ausführung der Trigger Zyklenentstehen;

Im folgenden wird beschrieben, welche Änderungen dazu am vorhandenen TSSnötig waren, und welche Module hinzugefügt wurden. Die Programmbeschreibungder einzelnen Module entnehme man den Kapiteln 6.2 und 6.3.

Page 93: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 5 Das Triggersubsystem 87

5.2.1 Programmablauf

Der Programmablauf zur Entwurfszeit:

Anmelden bei Oracle7

Lesen des Namens der Datei, inder die verzögerten Trigger stehen

Triggerköpfe lesenTriggernamen zu Tabellen zuordnen

Datei � ��������������������� anlegen

Transitionstabellen und Hilfstabellenzur Berechnung des Nettoeffekts und

Einfügetrigger anlegen

Trigger in Prozeduren umwandeln

��� ���� ������ erzeugen

Analyse der Terminierung durchUntersuchen der Ausführungsgraphen

auf Zyklen

Analyse der Konfluenz durchÜberprüfen des Lemmas 4

Voraussetzungen für die Analyse zurAusführungszeit erstellen

Meldung der Ergebnisse

Page 94: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 5 Das Triggersubsystem 88

Der Programmablauf zur Ausführungszeit:

Eingabe einer SQL-Anweisung

Berechnung des Nettoeffekts

Aufruf der Funktion !�"�# $�%�!�!'&)(

Noch Trigger auszulösen?

Ja Nein

Triggeraktion wird ausgeführt

Eintrag in die Tabelle *,+-%�(�% .�%�/�/ Kopie der Differenztabellen wird angelegt

Test, ob derselbe Trigger mit denselben Inhalten in den Transitionstabellen bereits schon einmal aufgerufen wurde

Ja Nein

Rollback

5.2.2 Prioritäten

Die in Starburst gegebene Möglichkeit der Eingabe von * +-0�$�0�1�0�2'3 und 4�%�/�/�%�5 2 - Listenerscheint sinnvoll (vgl. 2.4.1), denn der Benutzer muß nur die gewünschtenPrioritäten eingeben. Durch die * +�0�$�0�1�0�2 - und 4�%/�/�%�52 - Listen wird eine Halbordnungauf der Triggermenge festgelegt.

Die im vorhandenen TSS vorgeschlagene Methode, die Prioritäten der Trigger ausder Reihenfolge, in der die Trigger in der Datei stehen, zu entnehmen, wird durchdie Möglichkeit der Eingabe von * +-0�$�0�1�0�2 - und 4�%�/�/�%�5 2 - Listen im erweiterten TSSabgelöst.

Page 95: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 5 Das Triggersubsystem 89

Beispiel 1:

Der Trigger 687�9-:�; hat in seiner <�=�>�>�=�?@ -Liste den Trigger 687�9�:�A und in seiner B 7-C�D�C�E�C�@ -Liste den Trigger 687�9�:�F stehen. Daraus ergibt sich für die neue Ausführungs-reihenfolge: Der Trigger 6�7�9-:)F muß vor dem Trigger 687�9�:�; , und der Trigger 687�9-:)A sollnach dem Trigger 687�9-:�; ausgeführt werden. Also ergibt sich die Reihenfolge:687�9�:�F , 687�9�:�; , 6�7�9-:)A .

Die Trigger müssen also anhand dieser Listen sortiert werden. Dazu werden dieInhalte der <�=>�>�=�?@ -Listen eingelesen, und die Werte der B 7�C�D�C�E�C�@ - Listen derartgeändert, daß sie mit in den <�=�>�>�=�? @ -Listen stehen. (Diese Umsetzung wird durch dasProgramm vollzogen, und nicht durch den Benutzer.)

Beispiel 2:

Grundlage seien die Trigger 687�9-:)F , 687�9�:�; , 687�9-:)A mit den im obigen Beispiel ange-gebenen Prioritäten. Daraus folgt, daß der Trigger 687�9-:�; in seiner <�=>�>�=�?@ - Liste denTrigger 6�7�9-:)A weiterhin stehen, aber in der <�=�>�>�=�?@ Liste des Triggers 687�9-:)F steht derTrigger 687�9�:�; .

Ein Tiefendurchlauf in den <�=�>�>�=�?@ -Listen sortiert die Trigger nach den angegebenenPrioritäten. Wichtig dabei ist, daß die Reihenfolge des Vorkommens der Trigger inden B 7�C�D�C�E�C�@ - und <�=�>�>�=�?@ - Listen nicht beachtet wird.

Als letztes muß dann noch die Reihenfolge des Aufrufs in der Prozedur G�HID�=�G�G�9�6geändert werden.

Also sind zur Möglichkeit der Eingabe der B 7-C�D�C�E�C�@'J und <�=>�>�=�?@'J Listen folgendeProgrammänderungen erforderlich:

1. Die Prozedur 7-C K�E�IL6�7�9�:�:�C,7 wird derart geändert, daß sie die B,7-C�D�C�E�C�@ - und <�=>�>�=�?@ -Listen mit einliest. Dazu werden die Prozeduren <�=�>�>�=�? @�IM>89-@6 und B 7-C�D�C�E�C�@�IL>89�@�6benötigt. Diese stehen beide im Modul N�C�>�B�IM6�=�=>�@POQD .

2. Zur Verarbeitung der <�=>�>�=�?@ - Liste sind die Programme R 9-@,9�6 und @�C,K�7�D�N (stehenauch im Modul N�C>�B�IL6�=�=�>�@PO�D ) notwendig. Anhand der Einträge in den <�=>�>�=�?@ - Listen- sogenannten Adjazenzlisten - wird nun ein Algorithmus zum Sortierenaufgerufen. Hier wurde der Algorithmus zum topologischen Sortieren gewählt (vgl.[17]).

3. Anhand dieser neuen Reihenfolge wird der Aufruf der Prozeduren, die dieverzögerten Trigger simulieren, in der Funktion G�H�I D�=�G�G'9)6 geändert. Vor derMöglichkeit der Eingabe der B 7�C�D�C�E�C�@ - und <�=�>�>�=�? @ - Listen wurden die Prozeduren,die die verzögerten Trigger simulieren, in der Reihenfolge aufgerufen, in der dieTrigger in der Datei stehen. In dem erweiterten TSS erfolgt der Aufruf derProzeduren in G�HID�=�G�G�9�6 nun durch die neu entstandene Reihenfolge der B 7-C�D�C�E�C�@ -und <�=�>�>�=�? @ - Listen.

Page 96: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 5 Das Triggersubsystem 90

5.2.3 Die Analyse zur Entwurfszeit auf Terminierung

Die Analyse zur Entwurfszeit wird nach der Installation der verzögerten Triggervorgenommen. Dazu steuert die Prozedur S�T,UWV�X-Y Z)S�T die Analyse auf Terminierung(bereits in Kapitel 4.1.1 beschrieben).

Folgende Änderung war dazu an den vorhandenen Modulen im TSS nötig:

• Die Prozedur U-T Z�[�\]^�_�` a wird derart erweitert, daß beim Erstellen der Prozedur, dieden Trigger simuliert, die Datenänderungsoperationen, die in der Aktion desTriggers ausgeführt werden, in die zugehörige Liste geschrieben werden. Hierzuwird die Prozedur Z-`�S�X-_�Y�\'X�Y�b benötigt.

• Am Ende des Hauptprogramms V'Z�X-Y wird die Prozedur S�T UcV'X�Y Z�S�T aufgerufen.

Erweitert wurde das bestehende Programm durch das Modul S�T UcV'X-Y,Z�S�TPd�` mit denProzeduren `�_�Ve,Z�U�T , S�U�X-f�f�T,U-b�\ _�g�S , S�U�X-f�\h,X-b X)S und S�T,UWV�X-Y Z)S�T .Die Prozedur S�T UcV'X�Y Z�S�T ruft die Prozedur `�_�Ve Z�U-T auf. Dadurch werden die Namen derTrigger, die von einem anderen Trigger aufgerufen werden können, in eine zu jedemTrigger gehörige Liste geschrieben. Die Prozedur S8U�X-f�\ h X�b X�S testet, anhand dieserListen, ob sich die Trigger gegenseitig aufrufen. Die Menge der Trigger terminiert,wenn keine Zyklen beim Aufruf der Trigger entstehen. Wenn die Analyse zurTerminierung bestimmt, daß die Trigger eventuell nicht terminieren, so erfolgt eineAusgabe der Liste der ausgelösten Trigger jedes Trigger durch die ProzedurS8U�X�f�f�T U-b�\_�g�S . Diese könnte bei der Fehlersuche helfen.

5.2.4 Die Analyse zur Entwurfszeit auf Konfluenz

Terminierung ist Voraussetzung für Konfluenz. Unabhängig vom Ergebniss, welchesdie Analyse der Terminierung liefert, wird danach die Analyse der Konfluenzdurchgeführt, da, wie bereits erwähnt, durch die Analyse nur festgestellt wird, daß essein kann, daß die Trigger zur Ausführungszeit nicht terminieren. Durch den Aufrufder Prozedur `�_�Y�i�^�g�T�Y�`�T wird diese gestartet. Für jedes ungeordnete Paar vonTriggern werden nun die Mengen R1 und R2 durch die Prozedur VT�Y�f�T�Y gebildet. Fürjedes Paar aus den Mengen R1 und R2 ermittelt die Funktion a-_�V�V�\MS�T�bS , ob das Paarvon Triggern kommutativ ist.

Folgende Änderungen waren dazu an den vorhandenen Modulen im TSS nötig:

• Die Prozedur U-T Z�[�\]^�_�` a wird derart erweitert, daß beim Erstellen der Prozedur, dieden Trigger simuliert, die Spalten, die von der Aktion eines Triggers geändertwerden, mit dem Tabellennamen in der Struktur S8U�X�fMj�kld�`�_�^�b gesichert werden.

• Am Ende des Hauptprogramms V'Z�X�Y wird die Prozedur `�_�Yi�^�g�T�Y�`�T nach derProzedur S�T UcV'X-Y,Z�S�T aufgerufen.

Erweitert wurde das bestehende Programm durch das Modul `�_�Yi�^�g�T�Y�`�TPdQ` mit denProzeduren _,U-[�T,U-T�[ , `�_�^�b�\`�_�Ve,Z�U-T , V T�Y�f�T�Y , a-_�V�V�\MS�T�b�S und `�_�Y�i�^�g�T�Y�`�T .

Page 97: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 5 Das Triggersubsystem 91

5.2.5 Die Analyse zur Ausführungszeit auf Terminierung

Bei der Analyse zur Ausführungszeit kann nur noch das Verhalten der Trigger inBezug auf Terminierung, aufgrund der bereits entstandenen Reihenfolge analysiertwerden. Konfluenz muß bei einer vollständig geordneten Menge von Triggernvorliegen.

Deshalb wird zur DB eine neue Tabelle m,n-o�p�o q�o�r�r hinzugefügt. Diese Tabelle hat zweiSpalten: die Spalte p8n�s-t�t�u n�v wcxu für den Namen des Triggers, daher vom Typ Stringder Länge 25 und eine Spalte y w�u�z�r�u n vom Typ Integer.

Erstellt wird die Tabelle im Modul x�w�s-v�{'w�v�|�{ o n�w�}�r�uP~�m�} in der Prozedur��� s)r�|�{Lp8n�s-t�t�u nc{'w-v�|�{Mp8w � mit dem Befehl:

} n�u w�p�u�p8w � r�u�m n�o�p�o,q-or�r���p8n�s-t�t�u n�v wWx u�}�z8w�n �W���L�M��y,w-uz�r�u,n�v � x � u n,�������L�Dieser Befehl wird mit Hilfe der Prozedur ��u�v�|�u�{ � r�o�} q aus dem Modulx'w�s�v�{�w-v�|�{o n�w-}r�uP~Qm�} ausgeführt.

Außerdem müssen in der Prozedur �� s�r�|�{Mp8n�s�t�t�u,nW{�w-v�|�{Lp�w � die Tabellen zum Sichern

der Differenztabellen erstellt werden. Der Befehl hierfür lautet:

} n�u w�p�u�p8w � r�u�| s)����{�� p�n�s-t�v wWx u�������M�����������8���¡ -��¢M�������l£¤��¥'¦§�����¨�8���¡ -��©«ª�ª���¬¢L��­®©������'£°¯P©±���8��¯¡²���³M¦�©�´�µ��Q��£���L�¶�����)���8���¡ -�±¢L�¶���·�®£¤��¥M¦¸�8���¨�8���¡ ���©�ª�ª���¬¢M��­l©W������£°¯P©�������¯¡²8��³'¦8©Q´¹����º ,n-o�»�s-|�u�v�p¼}�z�w�n �W���M�L�w-v�y,w�z�r¼v � x � u n �W�����L�Q½¿¾

Die Tabellen |,s����±{8�,p8n�s�t�v wcxu�� werden für jeden Trigger angelegt.

Die Funktion | s)����{ }�o�xm w�n-u und der Trigger | s)���±{Lp8n�s-t werden auch in der Prozedur��� s)r�|�{Lp8n�s-t�t�u nc{'w-v�|�{Mp8w � erstellt:

Der Trigger |,s����±{Lp�n�s-t reagiert auf eine Einfügung in die Tabelle m,n-o�p�o q�o�r�r und sichertdie Transitionstabellen. Da aus den Hilfstabellen zur Berechung des Nettoeffektseventuell noch nicht alle Tupel in die Transitionstabellen kopiert wurden ist diesnoch nachzuholen. (Die Tupel werden dadurch nicht doppelt kopiert, da die Tupelaus den Hilfstabellen direkt nach der Kopie in die Transitionstabellen gelöschtwerden.). Nach der vollständigen Sicherung der Transitionstabellen wird dieFunktion | s)���±{}�o�xm,w�n-u aufgerufen. Als Parameter erhält diese Funktion den Wert derSpalte À,Á�z�r�u n aus der Tabelle m,n-o�p�o q�o�r�r , der gerade eingefügt wurde. Diese Funktionvergleicht nun die Tupel in den Tabellen |,s����±{8�,p8n�s�t�v wcxu�� . Existieren zu einemTriggeraufruf keine gleichen Tupel in den Differenztabellen, so wird von derFunktion | s�����{}�o�x m w�n�u ein Wert ungleich Null zurückgeliefert und mit der Ausführungder Trigger automatisch fortgefahren. Stehen aber zu dem Triggeraufruf dieselbenTupel bereits schon einmal in den Tabellen � p�n�s-t�v wcxu���{| s)��� , so erfolgt nach einerFehlermeldung ein Rollback. Der Fehler tritt in dem Trigger |,s����±{Lp�n�s-t auf, dieserwiederum gibt den Fehler weiter an die Prozedur x�Â�{ }�o�x�x's)p , wo dann das Rollbackausgeführt wird.

13 Aufgrund der später noch genannten doppelten Tupel, konnte kein Primärschlüssel festgelegtwerden. (vgl. hierzu auch Kapitel 7).

Page 98: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 5 Das Triggersubsystem 92

Dem Benutzer ist die Möglichkeit gegeben die Analyse zur Ausführungszeitabzustellen, indem er den Trigger à Ä)Å�űÆLÇ8È�Ä-É entfernt oder deaktiviert. Bei lediglicherDeaktivierung des Triggers kann die Analyse zur Ausführungszeit einfach wiederaktiviert werden. Die SQL-Befehle lauten dafür:

Ê�Ë Ç�Ì È¨Ç�È�Ä-É�É�Ì È�Ã,Ä�Å�űÆLÇ�È�Ä-É�à Ä�Í Ê�Î�Ë ÌÐÏÊ�Ë Ç�Ì È¨Ç�È�Ä-É�É�Ì È�Ã,Ä�Å�űÆLÇ�È�Ä-É�Ì�Ñ Ê-ÎË ÌPÏ

Durch das Ausstellen des Triggers à Ä�Å�Å�ÆMÇ8È�Ä�É werden zwar noch die Triggeraufrufe indie Tabelle Ò È-Ó�Ç�Ó Ô�Ó Ë�Ë geschrieben, aber die Tupel in den Transitionstabellen werdennicht gesichert und demnach auch nicht miteinander verglichen.

Bemerkung:

Das Erstellen der Tabellen à Ä)Å�űÆ8Õ Ç�È�Ä�É�Ñ ÊcÖ Ì�× und der Funktion Ã,Ä�Å�űÆØ�Ó Ö Ò Ê È-Ì wurde imModul Ö'Ê Ä-Ñ�Æ Ê Ñ�Ã�Æ Ó È Ê Ø Ë ÌÐÙ Ò Ø vorgenommen, da dort bereits die Spaltennamen, die für dieTabellen à Ä)Å�űÆ8Õ Ç�È�Ä�É�Ñ ÊcÖ Ì�× und die Funktion à Ä)Å�Å�Æ Ø�Ó Ö Ò Ê È-Ì benötigt wurden, bereits zurVerfügung standen. Dadurch ist eine andere, als Kapitel 4 vorgeschlagene,Reihenfolge entstanden: Die Werkzeuge zur Analyse der Terminierung zurAusführungszeit entstehen bereits am Anfang des Programms. Dies hat aber keineAuswirkungen auf den sonstigen Programmablauf.

Die Berechnung des Nettoeffekts im TSS wird anhand der TI vorgenommen. Wiebereits in Kapitel 2 erwähnt unterscheidet sich hierin das TSS von der Definition desNettoeffekts, da ein Tupel, das erst gelöscht und dann wieder eingefügt wird, imNettoeffekt zweimal erscheint, obwohl es gar nicht erscheinen sollte. Das Problembeim Vergleich der Transitionstabellen liegt nun darin, daß die Transitionstabellenden TI enthalten, dieser TI aber immer neu vergeben wird. Wird also ein Tupel erstgelöscht, dann eingefügt, und erzeugt dies einen Zyklus, so ist dieser Zyklus nichtzu erkennen, wenn der TI in den Transitionstabellen mit berücksichtigt wird, daanhand der Transitionstabellen jedesmal ein anderes Tupel eingefügt wurde. DerVergleich der Transitionstabellen ist daher auf die Spalten der Tabellen beschränkt,denn die Analyse zur Ausführungszeit erkennt in den meisten Fällen keinen Zyklus.

Da durch das TSS zu jedem Trigger Transitionstabellen angelegt werden, ist esmöglich, daß dieselben Tupel mehrfach in den Tabellen Õ,Ç8È�Ä�É�Ñ ÊWÖ Ì�×�ÆÃ,Ä�Å�Å vorkommen.Am Ergebnis beim Vergleich der Tupel ändert dies nichts. Es handelt sich hier umeinen Folgefehler des TSS, der dadurch entstanden ist, daß das TSS dieTransitionstabellen zu jedem Trigger anlegt (weiteres dazu im Kapitel 7).

Page 99: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

93

Kapitel 6

Programmbeschreibung des

erweiterten TSS

6.1 Vorhandene Module des T SS

6.1.1 Überblick

Modul:Ú'Û�Ü-Ý�Þ'Û-Ý�ß�Þ à á�Û�â�ã�äÐå�æ�â

Modul: Modul:ç ä Û�ß�Þ'Û�Ý�ß�Þè�à�ß�éêåQâ Ú�éÞâ�à�Ú�Ú�Ü�ë�åQâ

Modul:ä á�á�à á-ìÐå�â

6.1.2 Die Headerdatei main.h

In der Headerdatei Ú'Û�Ü�ÝPå ç werden alle Konstanten, Typ-Definitionen und globalenVariablen angegeben, die von den anderen Modulen benötigt werden. Zusätzlichwerden alle Headerfiles für die Einbindung der notwendigen Bibliotheken aufgeführt.Da die Headerdatei erweitert werden mußte, wird diese nur mit den Erweiterungen inKapitel 6.2.1 angegeben.

Page 100: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 6 Programmbeschreibung des erweiterten TSS 94

6.1.3 Das Modul main_and_oracle.pc

Das Modul í'î�ï�ð�ñ'î�ð�ò�ñó ô�î-õ�ö�÷PøQù�õ enthält die Funktion í'î�ï-ð , die den Programmablaufsteuert, sowie alle Funktionen, die Pro*C-Befehle enthalten.

ó ô�î�õ�ö�÷�ñLö�ó�ú ï�ð :Aufgabe: Baut, nach Eingabe des Paßwortes, eine Kommunikationsleitung zu

Oracle7 auf, die benötigt wird, um dort Tabellen, Trigger und Prozedurenanstelle des Benutzers zu erstellen. Bis zum expliziten Abmelden desProgramms von Oracle7 bleibt die Verbindung bestehen.

Parameter: keine

ó ô�î�õ�ö�÷�ñLö�ó�ú�óû�ü :Aufgabe: Beendet die Kommunikationsleitung zu Oracle7.

Parameter: keineý ÷�ð�ò�÷�ñþ�ö�ó�õ ÿ :

Aufgabe: Schickt eine Zeichenkette an Oracle7. Diese muß eine DB-Operationoder ein PL/SQL-Block sein.

Parameter: þ�ö�ó�õ,ÿ - Zeichenkette

þ�û8ï)ö�ò�ñLü8ô�ï-ú�ú�÷ ôcñ'î-ð�ò�ñMü8î-þ :Aufgabe: Erzeugt die Transitionstabellen und die Hilfs-Tabellen, sowie den

Immediate Trigger zum automatischen Füllen dieser Tabellen.

Parameter: keine

í'î�ï�ð :Aufgabe: Steuert den Programmablauf.

Parameter: keineý�� ö�÷ ô�ô-ó ô :

Aufgabe: Gibt Oracle7-Fehlermeldungen aus.

Parameter: keineý�� ö��'î�ô-ð :

Aufgabe: Gibt Oracle7-Warnungen aus.

Parameter: keine

Page 101: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 6 Programmbeschreibung des erweiterten TSS 95

6.1.4 Das Modul head_and_body.c

In diesem Modul befinden sich diejenigen Funktionen, die die verzögerten Triggeranalysieren und aus den Triggerrümpfen Prozeduren generieren.������ ������������ :

Aufgabe: Prüft die syntaktische Korrektheit der vom Benutzer spezifizierten,verzögerten Trigger. Dazu wird zuerst der Name der Datei eingelesen, in derdie verzögerten Trigger stehen. Ist der Dateiname = „!“ so erfolgt nach demAusloggen mit Hilfe der Prozedur � ���������� � � � ��� � , ein Programmabbruch,ansonsten würde der Dateiname eingelesen werden. Danach erfolgt dasLesen der Triggerköpfe: Mit Hilfe der Prozedur ��������� ��� ��� wird Wort für Wortaus der Datei gelesen.

Parameter: keine���������� � � � :

Aufgabe: Liest die Triggerrümpfe aus der Datei und erstellt daraus Prozeduren.Dabei sieht die Prozedur ähnlich aus wie der verzögerte Triggerrumpf, nursind einige Teile des Programmcodes der verzögerten Trigger ersetztwerden: Der Befehl ��� ����!����"������#��$���� ( �"�%��������������#��$����'&(��� ��) ��"�������#��$���� ) wirdersetzt durch !����������*� ��� ����+-,/.0����� � �-� � �-� � � � �-��1��� �2 �-�3+-�4& � �3.5����������� 2 � . In derVariablen �-� � �-� � � � �-�� steht also die Anzahl der Tupel in denTransitionstabellen.

Parameter: keine������ �76 ) :

Aufgabe: Liest zum aktuell untersuchten Trigger den Typ +����!����"���� , ��) ��"���� ,oder ����������� ) ein.

Parameter: �� - Filedeskriptor���5�����!�����8���� :

Aufgabe: Transformiert die Zeichenketten ���9���!������������ , ���:������������� , ��� ��) ���������� inihre PL/SQL Äquivalente.

Parameter: ��������� ��2 - aktueller Trigger��<; Filedeskriptor�=; zuletzt gelesenes Zeichen�����>; Filepointerposition? � �"� - neue Zeichenkette��������� ��� ��� :

Aufgabe: Liest aus einer Datei die nächste Zeichenkette bis zum nächstenLeerzeichen, Tabulator - oder Returnzeichen ein.

Parameter: �� - Filedeskriptor�=; zuletzt gelesenes Zeichen�����>; Filepointerposition

Page 102: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 6 Programmbeschreibung des erweiterten TSS 96

6.1.5 Das Modul my_commit.c

Im Modul @�A�B�C�D@�@FE�G befinden sich die Funktionen, die die gleichnamige SQL-Prozedurund die Datei H�I�D�JBFK"L�LNMPO�Q�L erstellen.

@�A�B�C�D�@�@FE"G :Aufgabe: Erstellt die SQL-Prozedur @�A�B�C�D@�@FE�GNMParameter: keine

H�I�D�JB/K�L�L�B�H�R�S :Aufgabe: Erstellt die Datei H�I�D�JB/K�L�LNMPO�Q�L . Für jeden Trigger stehen folgende

Einträge in der Datei H�I�D�JBFK"L�LNMPO�Q�L :Löschen der Prozedur,Löschen des sofortigen Triggers, der die Berechnung des Nettoeffekts

realisiert,Löschen der Transitionstabellen undLöschen der Hilfstabellen zur Berechung des Nettoeffekts.

Parameter: keine

6.1.6 Das Modul errors.c

Tritt ein Fehler bei der Erstellung der Trigger auf, so springt das Programm wiederan die Stelle, wo der Dateiname eingegeben werden muß.

@FE�O�B�R�I�I :Aufgabe: Gibt bei der Fehlermeldung den Namen des fehlerhaften Triggers

und das fehlende Token aus.

Parameter: G�I�E�T�B�U�V5@ - TriggernummerR�I�IWB�C�D�H�R<X fehlendes Token

O�Y�D�Z�B�R�I�I\[Aufgabe: Gibt bei der Fehlermeldung den Namen des fehlerhaften Triggers

und eine Beschreibung des Fehlers aus.

Parameter: G�I�E�T�B�U�V5@ - TriggernummerR�I�IWB�C�D�H�R<X Fehlerkonstante

Page 103: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 6 Programmbeschreibung des erweiterten TSS 97

6.2 Erwei terte Module des T SS

6.2.1 Die Headerdatei main.h

Einbinden der Bibliotheken:]F^ _�`�a�b�c�d:e�f�g�c ^ h'ikj�l]F^ _�`�a�b�c�d:e�f�g�m ^ _�noikj�l]F^ _�`�a�b�c�d:e�`�g7p q�d'ikj�l]F^ _�`�a�b�c�d:e�f�d�g�rs�qoikj�l]F^ _�`�a�b�c�d:e�d�m�m_�h'ikj�l]F^ _�`�a�b�c�d:e�g�d�mWs ^ hoikj�lDefinitionen der Konstanten:] c�d�t ^ _�dvu�w xzy�{ |�}>~�� ����sF��oi�{�_�����j�a:c�d�m�u�m ^ n�n�d�m(���] c�d�t ^ _�d��{ ������������|��=~"� ����sF��oi�{�_�����j�a�c�d�m���q���a�g�d�_�q�mhvu�����d�a�a�d����] c�d�t ^ _�d��{ ��u�w xzy�����|9~"������� ����sF��oi�}�d ^ `�j�d�_��_�����j�a ^ s9u m ^ n�n�d�m(���] c�d�t ^ _�dv����w�u�����|9~���� ����sF��oi���h�m�g�a���d�_�n�d����] c�d�t ^ _�d�|5{���������|:��� ����sF��oi��zu ����d�a�a�d�_ ��d�g�`oi���|��-s�d�_�a���d�_�n�d����] c�d�t ^ _�d��������������"|�~"������� ����sF��oi����d�_�n�d�d ^ _�d�f���b:f�d�_�c�d�_�c�d�_���a�h�`� f�������>���j��d�_�n ^ n�¡�h�_vu�m ^ n�n�d�m�a���d�_�n�d����Definitionen der Fehlerkonstanten, um im Modul d�m�m�h�m�foi¢` die entsprechendeFehlermeldung auszugeben:] c�d�t ^ _�d#x5|�������£���¤�u�w xzy=~ ���vu�m ^ n�n�d�m ^ f�g�b�_�¡�h�a�a�f�g�¥_�c ^ n����] c�d�t ^ _�dvu����¤�����|y%¦ ��� � ^ _�d {�_§�d ^ f�b�_�n s�b�f�f s ^ g d ^ _�ds ¨�©-ª����f�`�j�a ^ d�«d�_����] c�d�t ^ _�d�|���¤�¬�w���£�u�w�x­y9� ���v��p _�g����t�d�j�a�d�m(���] c�d�t ^ _�dvu�w xzy�¤ |��"u�®�����|�¬°¯ ���vu�m ^ n�n�d�m(d�� ^ f�g ^ d�m�g:_ ^ `�j�g:���] c�d�t ^ _�dvu�w xzy�¬���£�£°± ���vu�m ^ n�n�d�m(f�h�a�a�g�d�s�d�j�m�t���`�j:d�mf�g�d�a�a�g�§�d�mc�d�_����] c�d�t ^ _�d#x5|����wu>² ���vu�m ^ n�n�d�m(d�_�g�j�¥�a�g�s�d�j�md�m�d#x�|����"w�u9���] c�d�t ^ _�d�¬��"���5u �v³ ���vu�m ^ n�n�d�m(d�_�g�j�¥�a�g�s�d�j�md�m�d�¬�������u��(���] c�d�t ^ _�d���£"¬5{�u �(´ ���vu�m ^ n�n�d�m(d�_�g�j�¥�a�g�s�d�j�md�m�d���£�¬5{�u��(���] c�d�t ^ _�d���w���µ ���vu�m ^ n�n�d�m(d�_�g�j�¥�a�g�s�d�j�m���a�f�¦���w:���] c�d�t ^ _�d#x5|����wu¶x�|�y=~�� ���#u�m ^ n�n�d�m=d�_�g�j�¥"a�g=e ^ t ^ _�f�d�m�g ^ _�n�lo· ^ f�g c���t�¸�m0����d�m_ ^ `�j�g�c�d�t ^ _ ^ d�m�g:���] c�d�t ^ _�d���£"¬5{�u\x5|y¹~�~ ���ºu�m ^ n�n�d�m*d�_�g�j�¥�a�g*e ^ t»b�q�c���g ^ _�n�l'· ^ f�g¼c���t�¸�m»����d�m_ ^ `�j�g�c�d�t ^ _ ^ d�m�g:���] c�d�t ^ _�d�¬��"���5u\x5|y¹~"¦ ���ºu�m ^ n�n�d�m*d�_�g�j�¥�a�g*e ^ t¼c�d�a�d�g ^ _�n�l'· ^ f�g¼c���t�¸�m»����d�m_ ^ `�j�g�c�d�t ^ _ ^ d�m�g:���] c�d�t ^ _�dvu�w xzy�¤ |��"u�®�����|�¬5¤F£�~�� ������_���d� ���_�_�g�d�m�u m ^ n�n�d�m�_��Ws�d ^ _�q�md�`�d�c�d�f�� ^ f�g�d����] c�d�t ^ _�dvu�w xzy�¤ |��"u�®�����|�¬5¤F®�~5¯ ������_���d� ���_�_�g�d�m�u m ^ n�n�d�m�_��Ws�d ^ _�t�h�a�a�h§�f�� ^ f�g�d����

Definitionen der globalen Variablen:f�g���g ^ `�rs�q�¤���b�t:rs�q�¤�d�m�m¶© ����½���m ^ ���a�d'·�c ^ d>£�m�h�n�m��-s�s���b�f�g���_�c�b�_�c�{�c�m�d�f�f�d�t�¸�mn�a�h�����a�d�_v��q�m"b�_�n�f�q�d ^ `�j�d�m�g:���

Page 104: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 6 Programmbeschreibung des erweiterten TSS 98

Struktur für alle Trigger:¾�¿�À�Á�Â�¿�¿�À�ÃÄ�Ä�Å�À�ÆÂ�Ç�È�À ¿�È�É�Ê�Å ËÌ5Í�Î�Ï�Ð�Ï�Ì�Ñ\ÒÔÓ�ÕvÖ�ÈÉ�Å�Ê�Ê�Å�×�×�ÈWØ�Å�Õ�Ó×�È-Ø�Å Ë�Ì�Í�Î�Ï�Ð�Ï"Ì�Ѷ٠Ó�ÕvÖ�À�Ã�Ä�Ä�Å�À×�È-Ø�Å�Õ�Ó¾�Ç�Ú�À�¿ Ã×�¾�Å�À�¿NÒ Ó�Õ>Û�Ê�È�Ä�¾9Ü�Á�Å�À�Ö À�Ã�Ä�Ä�Å�À�È�À"¿�Õ�ÓÝ Å�Ê�Å�¿�Å'ÒÁ�Þ Ý È�¿�Å'ÒÜ�Ê�ÈÄoÙ Ó�Õ�Á�× ß�Ó�É�Å�×�Á�¿�à�¿�ß�Û�Ê�ÈÄ�Õ�ÓÊ�Ú�×�Ä Þ�Ú�¾'Ù Ó�Õ>á�Ú�¾�Ã"¿�Ã�Ú�× Ý Å�¾vÖ�À�Ã�Ä�Ä�Å�À�À�Á5Ø�Þ�Ü�ß�â�Å�Ä�Ã×�×�¾>Ã�× Ý Å�Àã È"¿�Å�Ã�Õ�Ó¾�¿�À"Á�Â�¿9È Ý�ä Ê Õ�Ü�Ú�Ê�Ê3Ù Ó�Õ�Ð�þ�¿�Å'Ò�Á5Ø Ý ÃÅ9Ü�Ú�Ê�Ê�Úå�¾:Ö À�ÃÄ�Ä�Å�À�È"Á�Ü�à�Á�×�Å�Ç5Ø�Å�×�Õ�ÓÃ�×�¿ ¾�Å�Å�×oÙ Ó�Õvæ�Ã�À Ý à�Á�À�Ö�Ã�Å�Ü�Å�×�¾�Á�Â�Ç�Å�É�Å�×�Ú�Å�¿�ÃÄ�¿:Õ�ÓÃ�×�¿ Þ�À�ÃÚoÙ Ó�Õ>á�À�Ã�Ú�À�Ã�¿�È�Å�¿ Ý Å�¾vÖ�À�Ã�Ä�Ä�Å�À�¾�Õ�Ó¾�¿�À"Á�Â�¿9ÈÂ�¿�ÃÚ�×�¾�Õ�È�Â�¿�Ã�Ú�×oÙ Ó�Õ�ÍFç"¿�Ã�Ú�×�Å�× Ý Å�¾vÖ�À�Ã�Ä�Ä�Å�À�¾�Õ�Ó¾�¿�À"Á�Â�¿�¿�À�Ã�Ä�¾ Õ�¿�À�ÃÄ�Ä�Å�À�¾'Ù Ó�ÕvÖ�À�Ã�Ä�Ä�Å�À¶Ò Ý Ã�Å Ý Á�À�Â�Ç Ý ÃÅ�ÍFç�¿�Ã�Ú�×�Å�× Ý Å�¾vÖ�À�ÃÄ�Ä�Å�À�¾È"Á�¾�Ä�Å�Ê�Ú�Å�¾�¿�å�Å�À Ý Å�×>çÚ�Å�×�×�Å�×�Õ�Ó¾�¿�À"Á�Â�¿:Â�Ú�Ê�Á�Ø�×�¾�Õ�Â�Ú�Ê�¾oÙ Ó�Õ�â�Å�×�Á�¿�à�¿�Å:è�Þ�È�Ê�¿�Å�×oÒ�å�Å�×�×>Ã�× Ý Å�À�È�ç�¿�Ã�Ú�×�Å�Ã×Á�Þ Ý È"¿�Å�¾�¿�Å�Ç�¿NéêÕ�Óë ÙStruktur, um die Ü�Ú�Ê�Ê�Úå�¾ - Trigger zu sichern:¾�¿�À�Á�Â�¿9È Ý�ä Ê�ƾ�¿�À"Á�Â�¿9È Ý�ä Ê Õ�×�Å�ì�¿3Ù Ó�Õ�à�Å�Ã�Ä�¿9È"Á�Ü:×�íÂ�Ç�¾�¿�Å�¾>Ï"Ê�ÅØ�Å�×�¿9Ã× Ý Å�ÀvÐ�þ�¿�Å�Õ�ÓÂ�Ç�È�À:¿�À�ÃÄ�Ä�Å�À�Ë�Ì�Í�Î�Ï�Ð�Ï"Ì�Ѷ٠Ó�Õ�Ì�ÈWØ�Å Ý Å�¾9Ü�Ú�Ê�Ê�Úå�¾ ß7Ö À�Ã�Ä�Ä�Å�À�¾�Õ�Óë ÙStruktur, um die Datenänderungen, die in der Aktion des Triggers ausgeführtwerden können, zu sichern:¾�¿�À�Á�Â�¿9È�Â�¿�Ã�Ú�×�¾ ÆÂ�Ç�È�À°Ú�Þ�Å�À�È�¿�Ã�Ú�×FË�î�Ѷ٠Ó�Õ�ÍFÀ"¿ Ý Å�À(ï�Þ�Å�À�È�¿�ÃÚ�×�Á�Þ Ý È�¿�ÅoÒ Ý Å�Ê�Å�¿�Å�Ú Ý Å�À�Ã×�¾�Å�À�¿:Õ�ÓÂ�Ç�È�À:¿�È�É�Å�Ê�Ê�Å Ë�Ì�Í�Î�Ï�Ð�Ï"Ì�Ѷ٠Ó�ÕðÖ È�É�Å�Ê�Ê�ÅoÒñÃ�× Ý Å�À Ý Ã�Åòï�Þ�Å�À�È�¿�ÃÚ�× Ý Á�À�Â�Ç�Ä�Å�Ü�ó�Ç�À�¿åFÃ�À Ý Õ�Ó¾�¿�À"Á�Â�¿9ÈÂ�¿�ÃÚ�×�¾�Õ�×�Å�ì�¿3Ù Ó�Õ�ô�Å�Ã�Ä�Å�À�È�Á�Ü:×�íÂ�Ç�¾�¿�Å�×>Ï�Ã�×�¿�À�ÈÄ>Ã�× Ý Å�À:Ð�Ã�¾�¿�Å�Õ�Óë ÙStruktur, um die Triggernamen zu sichern, die in der Aktion des Triggersausgelöst werden können:¾�¿�À�Á�Â�¿�¿�À�ÃÄ�¾ ÆÂ�Ç�È�À°×�È-Ø�Å Ë�Ì�Í�Î�Ï"Ð�Ï"Ì�Ѷ٠Ó�Õ�Ì�ÈWØ�Å Ý Å�¾:Ö À�Ã�Ä�Ä�Å�À�¾�Õ�Ó¾�¿�À"Á�Â�¿�¿�À�Ã�Ä�¾ Õ�×�Å�ì�¿3Ù Ó�Õ�ô�Å�Ã�Ä�Å�À�È�Á�Ü:×�í�Â�Ç�¾�¿�Å�×>Ï�Ã�×�¿�À�ÈÄ>Ã�× Ý Å�À:Ð�Ã�¾�¿�Å�Õ�Óë ÙStruktur, um die Spaltennamen mit zugehörigem Tabellennamen zu sichern,die in der Aktion des Triggers geändert werden können:¾�¿�À�Á�Â�¿:Â�Ú�Ê�Á5Ø�×�¾ ÆÂ�Ç�È�À:¿�È�É�Å�Ê�Ê�Å Ë�Ì�Í�Î�Ï�Ð�Ï"Ì�Ѷ٠Ó�Õ�Ì�ÈWØ�Å Ý Å�À�Ö È�É�Å�Ê�Ê�Å�Õ�ÓÂ�Ç�È�À°¾�Þ�È"Ê�¿�ÅFË�Ì5Í�Î�Ï"Ð�Ï�Ì�Ѷ٠Ó�Õ�Ì�ÈWØ�Å Ý Å�À�è�Þ�È�Ê�¿�Å�Õ�Ó¾�¿�À"Á�Â�¿:Â�Ú�Ê�Á�Ø�×�¾�Õ�×�Å�ì�¿3Ù Ó�Õ�ô�Å�Ã�Ä�Å�À�È�Á�Ü:×�íÂ�Ç�¾�¿�Å�×>Ï�Ã�×�¿�À�ÈÄ>Ã�× Ý Å�À:Ð�Ã�¾�¿�Å�Õ�Óë Ù¾�¿�À�Á�Â�¿�¿�À�ÃÄ�Ä�Å�Àv¿�À�ÃÄ Ë-Ö�õ�ö­÷�Í�Ì�ô�Ñ\ÙÃ�×�¿�Ú�À Ý Å�À�Ë-Ö�õ�ö­÷�Í Ì�ô�Ñ�Ë7Ö�õ�öz÷"Í�Ì�ô�Ѷ٠Ó�Õ�Î�È�¿�À�ÃìoÒ�Á5Ø Ý ÃÅ�Å�ø�Å�×�¿�Á�Å�Ê�Ê:É�Å�¾�¿�Å�Ç�Å�× Ý Å�×�ï�À Ý ×�Á�×�Ä�Å�×à�Á:¾�Ã�Â�Ç�Å�À×�Õ�ÓÂ�Ç�È�ÀÔÜ�Ã"Ê�Å�×�È-Ø�Å Ë�ùú�Ñ\Ù Ó�Õ ã È"¿�Å�ÃûØ/Ã�¿:ü ß-Ö�À�ÃÄ�Ä�Å�À�×�Õ�Ó

Page 105: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 6 Programmbeschreibung des erweiterten TSS 99

Weitere Variablen, die zum Programmablauf nötig sind:ý�þ�ÿ ������������ ��� � ����� ý ��� þ ��� ������������ ����� þ ! ��" � ÿ � ÿ ���ÿ � ý !�#� þ�ÿ � ����$ þ � � ��%���&�(')�+*,� ý ! ! ��� �����- ÿ # ÿ � ý ! � ��� ���&� ��- ÿ . '/�+*/� ý ! ! �&�(0 � ý � ýþ ���1������2 � � þ 3 þ ! ��0 3 ý � � #4 ��5 � � ��� � � ��! � ý 6 ')�+*/� ý ! ! �&��� 3 64 � 6 3 "�"87/��5�" "/�9 � � ýþ " � ���� ý 0 3 þ ! 0 � ��� ÿ � ÿ � ������� þ ��ý �;: ���=< � �� �����8� 3 ����0 ��" 3 � ÿ � 9 þ 5 ÿ � þ ��ý�þ�ÿ 4 � ý 5&� ý�ÿ > : ���=< � �� ����� �?3 6A@ � ý 5�� ý�ÿ � � ÿ � þ ��3 "�� ÿ � � þ ��ý�þ�ÿ ÿ �&� 6 # �������&�B: ����� ý ��� ! � "�� ÿ � ÿ �DC � þ ��� ���� 6 5�0=� ý �=E � þ ! �=�����*,� ý ! ! ��� ÿ ��� 6 ý�þ�ý ��� ÿ ��ý�þ�ÿ - 5 þ � � 3 � þ � : ����� ý ��� ! � "�� ÿ � ÿ �DC � þ ��� ���� 6 5�0=� ý �=E � þ ! �=�����*,� ý ! ! ��� - 5 þ � � 3 � þ�ÿ9ý " ÿ ���

6.2.2 Das Modul main_and_oracle.pc

Im Modul 6)�ý�þ #)� þ � # 5�� ��� ��� . 4 � wurde die Prozedur

0 3 ý � � # ÿ � ý !�! �&� #F� þ � # ÿ � 0 geändert. ZurVollständigkeit wurden aber die bereits bestehenden Prozeduren aus dem Modulnoch einmal genannt (die Beschreibung ist Kapitel 6.1.3 zu entnehmen).

Die Prozeduren5�� ��� ��� # � 5 ! ýþ ,5�� ��� ��� # � 5 ! 5 3 ÿ �"�� þ ��� # 0�� 5 ��- �"�G�� ������5��

,"�G�� � � � þ

wurden nicht geändert.0 3 ý ��� # ÿ � ý !�! ��� #)� þ � # ÿ � 0 :Aufgabe: Erzeugt die Transitionstabellen und die Hilfs-Tabellen, sowie den

Immediate Trigger zum automatischen Füllen dieser Tabellen.

Erweiterung: Die Tabellen zum Sichern der Transitionstabellen� ý � � #�H *,� ý !�! ��� þ �I6 ��J , die Tabelle 4 ��5 ÿ 5 - 5���� , der Trigger � ý ��� # ÿ � ý ! � und die

Funktion zum Vergleichen der Einträge der Differenztabellen � ý ��� #�� 5 64�� ���

werden erstellt.

Parameter: keine6)� ýþ :

Aufgabe: Steuert den Programmablauf

Erweiterung: Die Programme zur Analyse auf Terminierung und Konfluenzwerden nach der Installation der verzögerten Trigger aufgerufen.

Parameter: keine

Page 106: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 6 Programmbeschreibung des erweiterten TSS 100

6.2.3 Das Modul head_and_body.c

Die ProzedurenK�L�M�N�O,PIQ,R ,S T O�L�K�U L�P V�L�W undX�L�PYO,P�Z&[�L W

wurden nicht geändert.

Die Beschreibung dieser Prozeduren ist dem Kapitel 6.1.4 zu entnehmen.K�L�M�N�O/P�K S X�X�L&K :

Aufgabe: Prüft die syntaktische Korrektheit der vom Benutzer spezifizierten,verzögerten Trigger. Dazu wird zuerst der Name der Datei eingelesen, in derdie verzögerten Trigger stehen. Ist der Dateiname = „!“ so erfolgt nach demAusloggen durch die Prozedur Z�K�M�\�]�L�O,] Z�X�Z^�P , ein Programmabbruch, dennansonsten wird der Dateiname eingelesen. Dann werden die Triggerköpfemit Hilfe der Prozedur X�LP_O,P Z�[�L�W Wort für Wort aus der Datei gelesen.

Erweiterung: Aufruf der Prozedur listen_init, wodurch die Listen, wie M�\�P S Z�W -Liste,

T Z�] ]�` Liste, u.s.w. initialisiert werden, indem sie auf ein Element mitdem Inhalt a L�W N�b zeigen.

Parameter: keineK�L�M�N�O�c�]�Z \�[ :

Aufgabe: Liest die Triggerrümpfe aus der Datei und erstellt daraus Prozeduren.Dabei sieht die Prozedur ähnlich aus, wie der verzögerte Triggerrumpf, nurdaß einige Teile des Programmcodes der verzögerten Trigger ersetztwurden: Der Befehl

S TdS W�U�L&K P S W�X P�e�L W f S T N L�]�LP S W�XgP�e�L W , S T ^�R N�M P S W XdP e�L�W ) wirdersetzt durch U�L]�L \�Pd\�Z�^ W�P fIhFi S WP�Z S OZ&KIO,^YOZ&KION T K�Z�j S O f N�O�kl^YO i P�K S X�W�MmjL . In derVariablen

S O�Z�KIO/^_O�Z�KIO�N steht also die Anzahl der Tupel in denTransitionstabellen.

Erweiterungen: Die R�K�L \�L�N L�U - und T Z]�] Z�nU - Listen werden eingelesen und die

Datenänderungsoperationen, die in der Aktion des Triggers ausgeführtwerden, werden in die M�\P S Z W - Listen des Triggers eingefügt.

Parameter: keine

Bemerkung:

Die R�K�L�\ L�N�L U - und T Z]�] Z�nU -Listen gehören eigentlich zum Triggerkopf, und damit

sollten sie in der Prozedur K�L�M�N�O,P�K S X X�L�K eingelesen werden. Dies hätte allerdingsmehr Programmänderungen zur Folge (Änderung der Variablen R�Z U jedes Triggers,die sich auf mehrere Programmteile ausgewirkt hätte), so daß die Listen in derProzedur K�L&M�N�O�c�] Z�\�[ mit eingelesen werden.

Page 107: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 6 Programmbeschreibung des erweiterten TSS 101

6.2.4 Das Modul my_commit.c

Im Modul o p�qr s�o o)t u befinden sich die Funktionen, die die gleichnamige SQL-Prozedurund die Datei v�w�s x�q)y{z�z}|�~��z erstellen.

o�p�q�r�s�o�o)t{u :Aufgabe: Erstellt die SQL-Prozedur o p�qr s�o o)t u}|Erweiterung/Änderung: Die Trigger werden in einer neuen Reihenfolge,

nämlich nach den Inhalten der Variablen u�w t��)���B|�x�w t�s , aufgerufen. Ist keinTrigger mehr auszulösen, so ist in die SQL-Prozedur o p�qr s�o o)t u einzufügen,so daß die Inhalte der Tabelle x�w�s�u s���sz�z und der Tabellen v�t � �_q�� �,w t���� ��w��&yIo����gelöscht werden. Erweitert wurde die SQL-Prozedur außerdem um dieAbfrage einer Fehlermeldung. In dem Fall ist ein Rollback auszuführen.(Fehlermeldung erfolgt in Trigger v�t � �_q,u�w�t�� , wenn die Transitionstabellengleich sind.).

Parameter: keine

v�w�s x�qFy z�zYqv��� :Aufgabe: Erstellt die Datei v�w�s x�qFy z�z}|�~��z . Für jeden Trigger stehen folgende

Einträge in der Datei v�w�s x�q)y{z�z}|�~��z��Löschen der Prozedur,Löschen des sofortigen Triggers, der die Berechnung des Nettoeffekts

realisiertLöschen der TransitionstabellenLöschen der Hilfstabellen zur Berechung des Nettoeffekts

Erweiterung: Der Trigger v�t � �_q,u�w�t�� , die Tabellen zum Sichern derTransitionstabellen v�t � �_q����,w t���� ��w���yIo���� , die Tabelle x�w�s�u s���sz�z und die Funktionv�t � �_qr s�o�x�y�w�� , zum Vergleich der Transitionstabellen, werden gelöscht.

Parameter: keine

6.2.5 Das Modul errors.c

In dem Modul errors.c wurde lediglich eingefügt, daß die entsprechendeFehlermeldung erscheint, wenn ein Triggername in der x�w���r�� v�� ~ oder ��s�z z�s��~ Liste derTrigger unbekannt ist.

Die Prozedur

o)t�~�q��w wwurde nicht geändert.

~���s���q���w�w��Aufgabe: Gibt bei der Fehlermeldung den Namen des fehlerhaften Triggers

und eine Beschreibung des Fehlers aus.

Erweiterung: Steht ein unbekannter Triggername in einer x�w���r ��v�� ~ oder ��sz�z�s��~Liste eines Triggers, so wird der Name des fehlerhaften Triggers mit einerentsprechenden Meldung ausgegeben.

Parameter: u�w�t���q��_o - Triggernummer��w�wmqr�s v���� Fehlerkonstante |

Page 108: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 6 Programmbeschreibung des erweiterten TSS 102

6.3 Neue Module für das T SS

6.3.1 Übersicht

Modul:�)� �����)��� ���������������;��  �

Modul: Modul: Modul: Modul:¡ �������)�������¢�� �_£¤��� ¥��&�I�)����� ¥ ����� � £��� ��� �)� ¥}��� ��� ��¦�� §�� �����;���

Modul: Modul:����������¨;��� ¡ ��� ��/¥�� ����¨;���

6.3.2 Das Modul help_tools.c

Das Modul ¡ ��� ��/¥�� ����¨;��� stellt eine Erweiterung des Moduls

¡ �������)��������¢����Y£¤��� dar: Sieenthält Prozeduren, die, neben „Vorarbeiten“ für die Analyse der Terminierung undder Konfluenz, die Prozeduren © ��¨��{¥ und ¨��&����� ¡ beinhalten, welche die neueReihenfolge der Trigger ermitteln.����¨¥�� ���)����� ¥ :

Aufgabe: Durch die Prozedur ����¨�¥�� ���F�����{¥ werden die ¦��������ª¨ -/ ����¥������)« / ¥�� ��¬ ¬�����¨/«und ����� §_����¨/« Listen jedes Triggers derart initialisiert, daß sie auf einListenelement mit dem Inhalt ­ ��� ��® zeigen.

Parameter: keine

Aufruf aus Modul (Prozedur):¡ �������F�������¢�� �_£¯���±°����������,¥�� ��¬ ¬����&²,�

 ���� ��� ����¨��,����¨�¥}³Aufgabe: Der Trigger mit der Nummer ¥�� ��¬����§Y� wird in die ¦����� ��ª¨)« Liste der

Trigger geschrieben, die in der  �������� ��� ¨ -Liste stehen.

Parameter: ¥�����¬ ��§Y� - Nummer des Triggers, der gerade eingelesen wird¦���« Filedeskriptor�´« zuletzt gelesenes Zeichen����¥l« Filepointerposition �Aufruf aus Modul (Prozedur):

¡ �������F�������¢�� �_£¯���±°����������¢�� ���&µ�²¥�����¬�����§_� :

Aufgabe: Liefert zu einem übergebenen Triggernamen die zugehörigeNummer.

Parameter: ª�&� ¥l« Zeichenkette, also Name des Triggers

Aufruf aus Modul (Prozedur): ¡ �&�����F��� ���¢ ���_£¯���±°����&������¢���� ��µ&²,¶¡ ���  ��,¥ �����¨����A°I �������� ����¨��,����¨�¥}¶·¦���� ����ª�¨��/����¨¥,²

Page 109: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 6 Programmbeschreibung des erweiterten TSS 103

¸�¹�º º�¹�»¼�½/º�¾�¼¿�ÀAufgabe: Einlesen der

¸�¹º�º ¹�»¼ Liste eines Triggers bis zum Wort ÁÃÂ�Ä�Å;Æ . Die

eingelesenen Triggernamen werden in die ¸�¹º�º ¹�»¼

-Liste des Triggers ¿�Ç ¾�È ÄÉ_Ê

geschrieben.

Parameter: ¿�Ç�¾�È Ä�ÉYÊ - Nummer des Triggers¸ Å�Ë FiledeskriptorÌ Ë zuletzt gelesenes ZeichenÌ Ä ¿ Ë Filepointerposition

Aufruf aus Modul (Prozedur): Í�Â�Î�Å ½ Î�Ä�Å ½Ï�¹ Å_Ð¯Ñ Ì±Ò Ç Â�Î�Å ½Ï�º ¹ Ì&Ó�ÔÎ Ì ¿�¾�¹ Ä ½)¾ Ä ¼ :

Aufgabe: Die Datenänderungsoperationen, die in der Aktion eines Triggersdurchgeführt werden, sollen in die zu jedem Trigger gehörende StrukturÎ Ì ¿�¾�¹ Ä ¼ geschrieben werden.

Parameter: ¿�Ç�¾�È Ä�ÉYÊ - Nummer des Triggers¸ Å�Ë FiledeskriptorÌ Ë zuletzt gelesenes ZeichenÌ Ä ¿ Ë Filepointerposition»¹�Ç{¿�Õ Ë Datenänderungsoperation»¹�Ç{¿�Ö Ë Tabelle in der die Datenänderungsoperation durchgeführt wird

Aufruf aus Modul (Prozedur): Í�Â�Î�Å ½ Î�Ä�Å ½Ï�¹ Å_Ð¯Ñ Ì±Ò Ç Â�Î�Å ½Ï�º ¹ Ì&Ó�ÔÌ ¹�ºY½)¾ Ä ¼ :

Aufgabe: Die Spaltennamen mit zugehörigen Tabellennamen, die in der Aktiondes Triggers Verwendung finden, werden in die Liste Ì ¹º�¼ des Triggersgeschrieben, der diese Änderungen vornimmt.

Parameter: × - aktuelle Nummer des Triggers,»¹�Ç{¿�Õ Ë Tabellenname»¹�Ç{¿�Ö Ë SpaltennameAufruf aus Modul (Prozedur): Í�Â�Î�Å ½ Î�Ä�Å ½Ï�¹ Å_Ð¯Ñ Ì±Ò Ç Â�Î�Å ½Ï�º ¹ Ì&Ó�Ô

Ø ¾�¼&¾ ¿ :Aufgabe: Tiefendurchlauf der Trigger in den

¸�¹º�º�¹�»¼-Listen. Dieser

Tiefendurchlauf wird vom Programm ¼ Â&Î Ç Ì Í gesteuert.

Parameter: º - Nummer des Triggers

Aufruf aus Modul (Prozedur): Í� º Ù�½/¿�¹�¹º�¼ Ñ Ì±Ò ¼ Â&Î Ç Ì Í Ô¼ Â�Î Ç Ì Í :Aufgabe: Steuert den Tiefendurchlauf in den

¸�¹�º º�¹�»�¼-Listen der Trigger.

Parameter: keine

Aufruf aus Modul (Prozedur): Í�Â&Î�Å ½ Î�Ä Å ½Ï ¹ Å_Ð¯Ñ Ì ( Ç Â�Î�Å ½Ïº�¹ Ì&Ó )¸�¹�º º_½�¹ É ¿}ÀAufgabe: Gibt die

¸�¹º�º ¹�»¼-Listen der Trigger aus, wenn Widersprüche in denÙ�Ç Â Ì Â�Å Â ¼ Ë und

¸�¹º�º�¹�»¼ Ë Listen auftauchen.

Parameter: keine

Aufruf aus Modul (Prozedur): Ì ¹ Ä ¸�º É�Â Ä Ì Â;Ñ Ì ( ¹�Ç Å�Â Ç Â�Å )

Page 110: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 6 Programmbeschreibung des erweiterten TSS 104

6.3.3 Das Modul terminate.c

Es wurde eine neues Modul Ú Û�ÜIÝFÞ�ß&à Ú�Û;á�â dem Programmcode des TSSs hinzugefügt.Dieses Modul enthält die Prozeduren Ú�Ü Þ�ã ã�Û�Ümäå Û�Ú , æ_ç�è é�Û ß�ä�ê�ë�Ú , Ú�Ü�Þ�ã�äì&Þ�å�Þ{Ú und Ú�Û�ÜmÝ)Þ�ß&à Ú Û ,die benötigt werden, um die Analyse zur Terminierung der Triggermenge durchzu-führen.

Die Prozeduren im einzelnen:

â�ê�Ý�í�à Ü�Û�îAufgabe: In der Prozedur â ê�Ýí&à�Ü�Û wird getestet, welcher Trigger welchen Trigger

auslösen kann. Wird ein Trigger gefunden, der einen anderen Triggerauslösen kann, so wird dieser Trigger mit Hilfe der Funktion Ú�Ü Þ�ã�ã Û�Ümäå�ÛÚ andie Ú�Ü�Þ�ã ã�Û&Ü�å Liste des Triggers gehängt.

Parameter: keine

Aufruf aus Modul (Prozedur): Ú�Û�ÜmÝ)Þ�ß�à Ú Û�á�â ( Ú�Û�ÜmÝ)Þ�ß&à Ú Û )Ú�Ü�Þ�ã�ã Û�Ü�å�äê�ë Ú�î

Aufgabe: Mit Hilfe der Funktion Ú�Ü�Þ�ã�ã�Û&Ü�å�äê�ë Ú soll die Struktur Ú�Ü�Þ�ã�ã Û�Ü�å vonjedem Trigger ausgegeben werden, also eine Ausgabe der Liste der Triggererfolgen, die von einem anderen Trigger ausgelöst werden können.

Parameter: keine

Aufruf aus Modul (Prozedur): Ú�Û&ÜIÝ)Þ�ß�à{Ú�Û�á�â ( Ú�Û�ÜmÝ)Þ�ß�à Ú Û )Ú�Ü�Þ�ã�ä�ì�Þ�å&Þ Ú�î

Aufgabe: Die Funktion Ú�Ü�Þ�ã�ä�ì�Þ�å&Þ Ú liefert einen Tiefendurchlauf in der StrukturÚ�Ü�Þ�ã�ã�Û&Ü�å und analysiert ob, ein eventueller Zyklus vorhanden ist. Ist dies derFall, so werden die Namen, der an dem Zyklus beteiligten Trigger, gesichertausgegeben.

Parameter: ï - Nummer des Triggers, der überprüft wird,ð - Nummer des Triggers, dessen Liste durchlaufen wird.

Aufruf aus Modul (Prozedur): Ú�Û&ÜIÝ)Þ�ß�à{Ú�Û�á�â ( Ú�Û�ÜmÝ)Þ�ß�à Ú Û )Ú�Û�ÜmÝ)Þ�ß�à Ú Û�î

Aufgabe: Die Prozedur Ú�Û&ÜIÝFÞ�ß�à{Ú�Û steuert den Programmablauf der Analyse zurTerminierung: Die Prozeduren â�ê�Ý�í�à Ü�Û und Ú�Ü�Þ�ã�ã�Û&Ü�å�äê�ë Ú werden zuerst,danach wird für jeden Trigger die Funktion Ú�Ü Þ�ã�äì�Þ�å�Þ{Ú�ñ aufgerufen.

Parameter: keine

Aufruf aus Modul (Prozedur): Ý)à Þ�ß�äFà�ß ò�äê&Ü�à�âé�Û;á�í�â±óôÝ)à�Þ�ßFõ

Page 111: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 6 Programmbeschreibung des erweiterten TSS 105

6.3.4 Das Modul confluence.c

Das Modul ö ÷�ø�ù ú�û ü�ø�ö ü�ý�ö beinhaltet die Funktionen, die zur Analyse der Konfluenznötig sind.

÷�þ�ÿ ü�þ�ü�ÿ��Aufgabe: In der Prozedur ÷&þ�ÿ�ü&þ�ü ÿ wird getestet, welche Trigger gegenüber

anderen priorisiert sind, also welche Prioritäten in den ��þ�ü�ö ü�ÿ�ü�� - und ù�÷ú�ú ÷���� -Listen der Triggerdefinitionen angegeben wurden. Hier erfolgt auch dieÜberprüfung, ob sich eventuelle Widersprüche aus den angegebenenPrioritäten ergeben.

Parameter: keine

Aufruf aus Modul (Prozedur): ��ü�ÿ����ø ÿ��� ÷�ÿ��¯ý�ö���þ�ü��ÿ�����þ�������ü&þ��ö�÷�ú�����ö�÷������þ�ü��

Aufgabe: Mit Hilfe der Funktion ö�÷�ú�����ö�÷������þ�ü wird getestet, ob die beidenTrigger, deren Nummern mit an die Funktion übergeben wurden, in ihrerAktion eventuell dieselben Spalten einer Tabelle ändern.

Parameter: � - Nummer des Triggers� - Nummer des zweitenTriggers

Rückgabewert: Ermittelt die Funktion, daß die Trigger dieselben Spalten einerTabelle ändern, so wird ein Wert > 0 zurückgegeben, ansonsten 0.

Aufruf aus Modul (Prozedur): ö�÷�øù�ú û�ü�ø ö�ü�ý�ö�����÷���������ü�� ����ü�ø���ü ø��

Aufgabe: Die Prozedur �ü ø�� ü�ø führt die im Lemma 4 angegebene Bildung derMengen R1 und R2 aus und überprüft mit Hilfe der Funktion ��÷�������� ü�� � , ob dieTrigger aus R1 und R2 paarweise kommutativ sind. Die Prozedur ��ü�ø�� ü�ø wirdfür jedes ungeordnete Paar von Triggern aufgerufen.

Parameter: � - Nummer des Triggers� - Nummer des zweiten Triggers

Aufruf aus Modul (Prozedur): ö�÷�øù�ú û�ü�ø ö�ü�ý�ö��+ö�÷ ø�ù ú�û�ü ø�ö�ü!���÷������"��ü����#�

Aufgabe: Die Prozedur ��÷������"��ü���� ermittelt, ob zwei Trigger, deren Nummern andie Funktion übergeben wurden, kommutativ sind. Es werden dieBedingungen 1 bis 3 vom Lemma 1 getestet.

Parameter: � - Nummer des Triggers� - Nummer des zweiten Triggers

Rückgabewert: Ermittelt die Funktion, daß die Trigger nicht kommutativ sind, sowird ein Wert > 0 zurückgegeben, ansonsten 0.

Aufruf aus Modul (Prozedur): ö�÷�øù�ú û�ü�ø ö�ü�ý�ö��$�ü ø�� ü�ø��

Page 112: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 6 Programmbeschreibung des erweiterten TSS 106

%�&�'�(�)�*�+�'�%�+�,Aufgabe: Die Prozedur %�&�'�(�)�*�+�'�%�+ steuert den Programmablauf der Analyse der

Konfluenz zur Entwurfszeit.

Parameter: keine

Aufruf aus Modul (Prozedur): -/.�0 '�1 . '�2�1�&�3 . %�)�+�465�%�7 -�.�0 '!8

Page 113: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

107

Kapitel 7

Erweiterungsmöglichkeiten

In diesem Kapitel sollen Möglichkeiten aufgezeigt werden, wie das TSS und dieAnalysen zur Terminierung und Konfluenz ausgebaut werden könnten.

7.1 T SS

Die Eingabe der verzögerten Trigger im TSS ist kompliziert: Treten Fehler bei derInstallation der Trigger auf, sind also Fehler im Triggerrumpf, so erhält der Benutzernur die Fehlermeldung in welchem Trigger dieser Fehler aufgetreten ist, nicht aberum was für einen Fehler es sich handelt oder wo in dem Trigger dieser Fehleraufgetreten ist. Lediglich Fehlermeldungen bei der Eingabe des Triggerkopfes sindhilfreich. Hier wäre das Programm sicherlich noch derart auszubauen, daß dieFehlermeldungen, die von ORACLE geliefert werden, dem Benutzer zur Verfügunggestellt werden.

Die Berechnung des Nettoeffekts im TSS erwies sich als ungünstig: DieTransitionstabellen werden, wenn es mehr als einen verzögerten Trigger auf einerTabelle gibt, doppelt oder dreifach geführt. Da es sich hierbei um 6 bzw. 12zusätzliche Tabellen handelt, sollte das TSS derart geändert werden, daß Trigger,die auf einer Tabelle definiert sind, auch mit denselben Transitionstabellen arbeiten.

Die Beschränkung der Eingabe eines Triggers pro Ereignis und Tabelle kann sich ineinigen Fällen umständlich auswirken. Es ist zwar dadurch zu umgehen, daß dieTrigger, die auf das Ereignis reagieren, alle in einen Trigger geschrieben werden.Jedoch ist es dann nicht mehr möglich zwischen den Triggern, die zu einem Triggerzusammengefaßt wurden, einen anderen Trigger auszuführen. Dies führt zu einerEinschränkung im Umgang mit den Triggern. Eine Änderung des Programms erwiessich aber als sehr umständlich weil das gesamte TSS mit seiner Arbeitsweise hättegeändert werden müssen und wurde daher abgebrochen.

Alternativen zur Simulation bzw. Implementierung von verzögerten Triggern wurdenbereits in [5] vorgestellt und werden hier nicht noch einmal erwähnt, zumal sie auchnicht Hauptgegenstand der vorliegenden Arbeit waren.

Page 114: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Kapitel 7 Erweiterungsmöglichkeiten 108

7.2 T erminierungs- und Konf luenzanalyse

Die Analyse zur Ausführungszeit (bzgl. der Terminierung) gestaltet sich als sehraufwendig: Bei jedem Aufruf der Trigger werden alle Transitionstabellen gesichert.Diese Sicherungen werden erst gelöscht, wenn kein Trigger mehr ausgelöst ist. Zuüberlegen ist hier, ob es weitere Möglichkeiten der Analyse zur Terminierung bei derAusführungszeit gibt, u.a. auch, daß Zyklen der Stufe 2 bemerkt werden, aber einRollback erst nach Bestätigung durch den Benutzer erfolgt.

Unnötig aufwendig gestalten sich u.a. die Kopien der Transitionstabellen, wenndiese durch das TSS bereits doppelt oder dreifach geführt wurden (bei Triggern, dieauf derselben Tabelle definiert sind, aber auf unterschiedliche Ereignissereagieren). Wird das TSS derart geändert, daß die Kopien vermieden werden, so isteine Programmänderung der Analyse zur Terminierung nicht aufwendig. Möglich istdann auch das Anlegen eines Primärschlüssels für die Tabellen 9�:<;�;>=@?�A"B�:�C�C�DB�E�FHG�D�I .

Die Erweiterung der Analysen durch ein graphisches Tool wäre sehr sinnvoll.Sowohl bei der Analyse zur Konfluenz wie auch bei der Analyse zur Terminierungkönnte dies zur Unterstützung bei der Fehlersuche sinnvoll eingesetzt werden.

Eine automatische Ausgabe, welche Trigger durch eine Transaktion ausgelöst sind,welche Datenänderungen vorgenommen und welche weiteren Trigger dadurchausgelöst werden, wäre zur Ausführungszeit wichtig, damit die Änderungen, dienicht vom Benutzer vorgenommen werden, sichtbar sind.

Testdaten müssen im erweiterten TSS durch den Benutzer eingegeben werden.Jedoch kann es sein, daß der Benutzer nicht alle kritischen Fälle, die bei derAusführung der Trigger entstehen, entdeckt. Das Erstellen von kritischen Testdatenanhand einer gegebenen Menge von Triggern durch ein Programm, und dieAusführung dieser Testdaten liefert konkrete Hinweise, in welchen Fällen die Triggernicht terminieren oder nicht konfluent sind.

Anhand dieser Testdaten könnten dann auch, zu einer gegebenen Menge vonTupeln in den zugehörigen Tabellen, Ausführungsgraphen gezeichnet werden DerBenutzer kann dann anhand dieser Graphen sehen, ob die Definitionen einigerTrigger eventuell unerwünschte Effekte hervorrufen können.

Page 115: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

109

Literaturverzeichnis

[1] G. Vossen: Datenmodelle, Datenbanksprachen und Datenbankmanagement-Systeme(2.Auflage). Addison-Wesley (Deutschland), Bonn, 1994.

[2] E. N. Hanson, J. Widom: An Overview of Production Rules In DatabaseSystems. Technical Report CIS-TR-92-031, University of Florida, 1992.

[3] U. Lipeck: Skript zur Vorlesung Datenbanksysteme (WS 1994/95), Kap. 5,Institut für Informatik, Universität Hannover, Hannover, 1994

[4] U. Lipeck, M.Gertz: Begleitmaterial zum ORACLE/SQL-Kurs (zur VorlesungDatenbanksysteme) (WS 1994/95), Institut für Informatik, UniversitätHannover, Hannover, 1994

[5] M. Winkler. Entwicklung eines Triggersubsystems auf dem Datenbank-Managesystem Oracle7. Studienarbeit, Institut für Informatik, UniversitätHannover, Hannover, 1994.

[6] J. Widom, S. Finkelstein: Set-Oriented Production Rules in RelationalDatabase Systems. In H. Garcia-Molina, H. V. Jagadish (eds.), Proceedings ofthe 1990 ACM SIGMOD International Conference on Management of Data,Sigmod Record 2, ACM Press, New York, 1990, 259-270.

[7] S. Ceri, J. Widom: Deriving Production Rules for Constraint Maintenance. InD. McLeod, R. Sacks-Davis, H. Schek (eds.), Proceedings of the 16thInternational Conference on Very Large Data Bases - 1990, Morgan KaufmannPublishers, Palo Alto, CA, 1990, 566-577.

[8] A. Aiken, J. Widom, J. M. Hellerstein: Static Analysis Techniques forPredicting the Behavior of Database Production Rules. Technical report, IBMAlmaden Research Center, San Jose, CA, 1993.

[9] M. Morgenstern: Active Databases as a Paradigm for Enhanced ComputingEnvironments. In M. Schkolnick, C. Thanos (eds.), Proceedings of the 9thInternational Conference on Very Large Data Bases - 1983, Morgan KaufmannPublishers, 1983, 34-42.

[10] E. Baralis, J. Widom: An Algebraic Approach to Rule Analysis in ExpertDatabase Systems. Technical Report Stan-CS-93-1495, Department ofComputer Science, Stanford University, Stanford, CA, 1994.

[11] T. Fors: Visualization of Rule Behavior in Active Databases. Technical ReportHS-IDA-TR-94-009, University of Skövde, Department of Computer Science,Skövde, Sweden, 1994.

Page 116: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Literaturverzeichnis 110

[12] M. Gertz, U. Lipeck: Deriving Optimized Integrity Maintaining Triggers fromDynamic Integrity Constraints. Institut für Informatik, Universität Hannover,Hannover, 1995. submitted for journal publication.

[13] S. Chakravarthy: A Comparative Evaluation of Active Relational Databases.Technical Report UF-CIS-TR-93-002, University of Florida, 1993.

[14] U. Jaeger, J. C. Freytag: Annotated Bibliography on Active Databases. HUBTechnical Report 41, Humboldt-Universität zu Berlin, Institut für Informatik,Berlin, 1995. (updated April 5, 1995).

[15] K. Eswaran, D. Chamberlin: Functional Specifications of a Subsystem for DataBase Integrity. In D. Kerr (ed.), Proceedings of the 1st InternationalConference on Very Large Data Bases - 1975, Morgan Kaufmann Publishers,Los Altos, CA, 1975, 48-68.

[16] R. Elmasri, S. B. Navathe: Fundamentals of Database Systems (SecondEdition). Addison-Wesley, Amsterdam, The Netherlands, 1994.

[17] R. Sedgewick: Algorithmen in C ++. Addison-Wesley (Deutschland), Bonn,1992.

[18] A. P. Karadimce, S. D. Urban: Diagnosing Anomalous Rule Behaviour inDatabases with Integrity Maintenance Production Rules. In J. Göers, A. Heuer,G. Saake (eds.), Third Workshop on Foundations of Models and Languagesfor Data and Objects, Informatik-Bericht 91/3, TU Clausthal, Clausthal, 1991,77-102.

[19] M. Gertz: On Specifying the Reactive Behavior on Constraint Violations.Informatik-Berichte 02/93, Institut für Informatik, Universität Hannover,Hannover, 1993.

[20] J. Widom, S. Ceri (eds.): Active Database Systems - Triggers and Rules ForAdvanced Database Processing. The Morgan Kaufmann Series in DataManagement Systems, Morgan Kaufmann Publishers, San Francisco, 1996.

[21] N. W. Paton, M. H. Williams (eds.): Rules in Database Systems, Proceedingsof the 1st Int. Workshop in Edinburgh, 1993. Workshops in Computing,Springer-Verlag, London, 1994.

[22] S. D. Urban, L. M. Delcambre: Constraint Analysis: A Design Process forSpecifiyng Operations on Objects. IEEE Transactions on Knowledge and DataEngineering 2:4 (1990), 391-400.

[23] G. Huet: Confluent reductions: abstract properties and application to termrewriting systems. Journal of the ACM 27:4 (1980), 797-821.

[24] M. Schlesinger, F. Achermann: Vergleichende Gegenüberstellung der Trigger-Mechanismen von Ingres, Oracle und Sybase. Arbeitsbericht Nr. 62, Institut fürWirtschaftsinformatik der Universität Bern, August 1995

[25] U. Lipeck: Dynamische Integrität von Datenbanken: Grundlagen derSpezifikation und Überwachung, Informatik-Fachberichte 209. Springer, Berlin1989

[26] G. Gardarin, P. Valdurez: Relational Databases and Knowledge Bases,Addison Wesley, 1989

Page 117: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Literaturverzeichnis 111

[27] S. Ceri, P. Fraternali, S. Paraboschi, and L. Tanca: Automatic generation ofproduction rules for integrity maintenance. ACM Transactions on DatabaseSystems, 19(3), September 1994

[28] P. Fraternali, S. Paraboschi: A Rewiew of Repairing Techniques for IntegrityMaintenance. In N. W. Paton, M. H. Williams (eds.), Rules in DatabaseSystems, Proceedings of the 1st Int. Workshop in Edinburgh, 1993, Workshopin Computing, Springer-Verlag, London, 1994, 333-346.

[29] Oracle7: PL/SQL User’s Guide and Reference. Part No. 800-20-1292,1992

[30] S. Chakravarthy et al. HiPAC: A Research Project in Active, Time-constrainedDatabase Management, Final Report. Technical Report XAIT-89-02, XeroxAdvanced Information Technology, Cambidge, MA, Aug. 1989

[31] U. Dayal, A. Buchmann, and D. Mc Carthy. Rules are Objects Too: AKnowledge Model for an Active, Object-Oriented Database ManagementSystem. In Proceedings 2nd International Workshop on Object-OrientedDatabase Systems Sept. 1989, Bad Muenster am Stein, Ebernburg, WestGermany,

[32] C. L. Forgy: Rete: A Fast Algorithm for the Many Pattern/Many Object PatternMatch Problem. In J. Mylopoulos, M. L. Brodie (eds.), Readings in ArtificialIntelligence and Databases, Morgan Kaufmann Publishers, San Mateo, CA,1989, 547-557.

[33] InterBase Software Corporation, Bedford, MA. InterBase DDL ReferenceManual, InterBase Version 3.0, 1990

[34] M. Stonebraker, M. Hanson, S. Potamianos. The POSTGRES rule manager.IEEE Transactions on Software Engineering, 14(7): 897-907, Jul. 1988

[35] Sybase, Inc., Sybase, Inc. Berkely, CA 94710. Transact-SQL User’s Guide,Release 4.2, May 1990.

[36] E. N. Hanson. The design and implementation of ariel active database rulesystem. Technical Report UF-CIS-TR-92-018, University of Florida, 1992

[37] D. Hofbauer, R.-D. Kutsche: Grundlagen des maschinellen Beweisens, ViewegVerlag, Braunschweig, Wiesbaden, 1989

Page 118: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

112

ANHANG A:

Tabellen und Triggerdefinitionenzu den Beispielen aus Kapitel 3

Da die Schreibweise zur Tabellenerzeugung und Triggerdefinition bekannt seinsollte, wurde auf Kommentare verzichtet.

Erzeugen der Tabellen:J�K�L�M�N�LON@M�P�Q�LSR�T�U�V�W�X�V<Y�Y�X"VZ T�[]\ ^�_�P�LK Za`!bdc K�eH_/M�Kgfih�L�fkj[�R"T�Ul\ ^>_�P�L�K Zm`�b jU�V<n�R"Y�Xl\ ^>_�P�LK Zao j$p b�b�qJ�K�L�M�N�LON@M�P�Q�LOr�s�TZ R"T�U<t�T�[]\�^�_�P�L�K Zm`�buc K�em_/M�Kvfih�L>fwjr@V>X�[>R@Ul\ ^>_�P�LK Zax j$p b�b�qJ�K�L�M�N�LON@M�P�Q�Lzy�V<[�{�R"|@}Z R"T�U<t�T�[]\�^�_�P�L�K Zm`�b j~ s�T�R X�\�^�_�P�L�K Z p b jR�T���R"n�Y]\ ^>_�P�LK Za`!bJ���\���N@K�M�e�\�N c hmt���L�K�h�M�^�� c K�eH_/M�Kgfih�L�f Z M�\���t�\�K�j�_���\M�N b�b�q

Definition der Trigger:

Die Definition von unterschiedlichen Triggern auf einer Tabelle, die auf dasselbeEreignis reagieren, ist im TSS nicht möglich. Daher wurden die Trigger [�r ( [�R�T�U��r�s T�|�W ), � [ ( � R�� n�W"V�T��@V�[- [� R�T�U ) und T�[ ( T@V<|@V<[���[>R�T�U) zu einem Trigger mit dem Namen[�r�t � [>t�T�[ zusammengefaßt. Außerdem wurden die Trigger U@y ( U�|�X�V<[ - y�V<[�{�R"|@} ) und W�U@y( W�V�n�[ - U�|�X�V�[ - y�V�[�{�R"|@} ) zu einem Trigger mit dem Namen U y�t@W�U@y zusammengefaßtr�s T�|�W!��[�R"T�U : Wenn der r@V>X�[�R U in der Tabelle r�s�T�|�W um mehr als 100 erhöht wird, so sollder [�R�T�U des Angestellten um 1 erhöht werden.

J�K�L�M�N�Lz��L ��L�K�K�L��ON@K�e�����L�K�r�[M���N�L�K�^ c ��M<N�Lz��\Or�s�T��L�J Q@M�K�LJ ^ K�����K�^ c ��t�J�^@Kmt�R�T�U�e����L Q�L�J N]� Q���t�R"T�U<t�T�[z� K���_�^�t"r�[z^��� LK�L�������� Z ^#�6\�L � t�r V�X�[>R@U���^#����Q���t�r@V>X�[�R U b"q

Page 119: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang A Tabellen und Triggerdefinitionen zu den Beispielen aus Kapitel 3 113

�������������l ���¡�¢�£�¤�¥m¦�§"¨¢�£�©�ª� ª�«z������¬<­@ª� �©l­�®�£� ¯ ��£� O��������° �@¤H�������±¨² ¯�¯ � «�£ ­�°�®z��������° � ¤m��������ª�  ­ ¯ �������������³¨£�´�ª�­¶µ"®�£� O��������° �@¤H���"���@·�  ¯ ­�« ¯ �� ��¸¨������¬<­�£S������¹�º�»�¹<¼�¼�»"¹½ £ ­z¾��"���z¿�¾�������À�Áµ�®�£�¤�£l��¾Ã¿��������������±¨£� �� ² ¯�¯ ��¨° ² ¯�½ £l��������° � ¤m���"���³¨Ä�Å�Æ º<��Ç È�»�É<È�»±ÊgÉ�È�»<��¼"Ë��@¹¥�ÌÍ»"¤�ª�©�©�£¤ Å ¾¶µ/ª�¤���¬�� ½ ©�£ «���£�®@¤�­ÎÌ�§"¨£� ��Ϫ<«#¨£� ���¨¾�������Ð Å Ç ��È�º : Wenn der ¾��"��� des Angestellten geändert wird, so soll der

Å ¹�»�¾>�@� in derTabelle

Å Ç���È�º um das 10-fache des neuen ¾��"��� es erhöht werden.Ñ ��Ò�Ó�º"¹�� Ä ¹�¾ - ¾������ : Wird der ¾��"��� des �"����¹>º�»"¹�¼�¼�»�¹�� geändert, und ist dieser ¾@¬� �© = 15, sowird das �"¹�Ó��"¼�» des ������¹�º�»�¹<¼�¼�»"¹�� um 10 % erhöht. (Hier wird vorausgesetzt, daß der¾������ der �����"¹�º�»�¹�¼�¼�»�¹<� nur erhöht, nicht aber vermindert wird.)�@¹�È ¹�¾ - ¾������ : Wird der ¾������ eines �����"¹�º�»�¹�¼�¼�»�¹<� geändert, so wird eine diesbezüglicheMeldung mit der Nummer des �����"¹�º�»"¹�¼�¼�»�¹<� , dem neuen ¾������ und dem �"¹�Ó��"¼�»ausgegeben.

°�¤�£�¬�­�£z��£ «�£�¤�¤�£��O­@¤�ª�©�©�£�¤�¾ Å � Ñ ¾�����¾¬�«�­�£�¤�������¬<­�£ ¯  S������¹>º�»�¹<¼�¼�»"¹��£�° ² ¬�¤�£° � ¤ ½�¯ ¤���������°��@¤m�"¾��"����ª ½½ £ ² £�° ­ ¯ ² ������¾#ÔÕ �£�µ��"¾������Ï« ¤ ¯ ¡��>��¾ Å � Ñ ¾�����¾z�µ�®�£¤�£O�#Ê6 �£�µ���¾>�����zÖ ×l�ÎÊ ¯ ² ���"¾������±¨�������"¾���������������° � ¤m�"¾������@·�¤ ¯ µ"­aØ���£�¨

° � ¤ ½�¯ ¤���������°��@¤�Ù>��¾>������ª ½½ £ ² £�° ­ ¯ ² ������¾z«@¤ ¯ ¡�����¾ Å � Ñ ¾��"��¾µ�®�£¤�£�Á�Ú<¿��>��¾ Å � Ñ ¾>����¾#Ê� �£�µ��"¾��"���±¨����� Ù>��¾��"������������°��@¤<Ù���¾>����� ·�¤ ¯ µ�­mØ���£�¨° � ¤ ½�¯ ¤���������°��@¤�¦���¾>������ª ½½ £ ² £�° ­] �£�µ�����¾#ÔÕ �£�µ��"¾������±ÔÕ �£�µ��@�"¹�Ó>��¼�»�«@¤ ¯ ¡����"¾ Å � Ñ ¾>����¾z�µ�®�£¤�£O�#Ê6 �£�µ���¾>�����zÖ ×l�ÎÊ ¯ ² ���"¾������±¨������¦���¾��"������������°��@¤�¦���¾>����� ·�¤ ¯ µ�­mØ���£�¨

¢�£�©�ª� ª�«z������¬<­@ª� �©l­�®�£� ¯ ��£� O��������° �@¤H��¾��"���³¨² ¯�¯ � «�£ ­�°�®z��������° � ¤m�"¾�������ª�  ­ ¯ ��������¾��"���³¨£�´�ª�­¶µ"®�£� O��������° �@¤H��¾>����� ·�  ¯ ­�« ¯ �� ���¨������¬<­�£ Å Ç�� ½ £ ­Å ¹�»�¾>�@�z¿ Å ¹>»�¾�� ��À�Á<Û�Ü �������"¾��"���±Ê6 �£�µ���¾>�����

Page 120: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang A Tabellen und Triggerdefinitionen zu den Beispielen aus Kapitel 3 114

Ý"Þ�ß�à�ßSá�â�ã<ä�â�å�æ�ç�è�é�ä"å�á�â�ã±ê�ë�ì�é�ä�â�åÎíß�î�éOì�ë�ë�è�íï ì�ë�ð�ßlç�è�é�ä ï ç àmä�å>á�â�ã±íë�è�ß�îOç�è�é�ä ï ç@à<ñ�ä�å>á�â�ã±íì�ë�ë�è ò ß ó ï Þzç�è�é�ä ï ç à�ñ>ä�å�á"â�ã�ô�î�ó�ëOç�è�é ñ�ä"å�á"â�ã±íß�õ�ô�ó¶Ý"Þ�ß�îOç�è�é�ä ï ç@à<ñ�ä"å�á�â�ã@ö�î�ë ó ò ë ç�î�é�íç�è�é�÷<ó�ßSá�â�ã�ø�ù�ú�ø<û�û�ú"ø�ð�ß óã"ø�ü�á"û�úzæzã�ø<ü�á�û�ú@ý�þÿêvþÝ"Þ�ß�à�ßOâ�å�æ�ç�è�é�ñ�ä�å>á�â�ã±ê�ë�ì�é�ä"â�åÎíß�î�éOì�ë�ë�è�íï ì�ë�ð�ßlç�è�é�ä ï ç à�ñ�ä"å�á"â�ã±íë�è�ß�îOç�è�é�ä ï ç@à���ä�å>á�â�ã±íì�ë�ë�è ò ß ó ï Þzç�è�é�ä ï ç à���ä�å�á"â�ã�ô�î�ó�ëOç�è�é���ä"å�á"â�ã±íß�õ�ô�ó¶Ý"Þ�ß�îOç�è�é�ä ï ç@à���ä"å�á�â�ã@ö�î�ë ó ò ë ç�î�é�í����� ù�ä��ú�� �ú³ê�� �ú�ä"û���â ø���� � ßà]å>á�â�ã�é�ß�à ò ë�ì���ß�î�é�ß�îSá�î���ß�ð�ó�ß ì�ì�ó�ß�îSÝ�ç@à�é�ßzß�à<Þ�ë�ß�Þ�ó������� ç�è�é���ä�å�á"â�ã±ê6î�ß�Ý�ä�â�å ������� å@÷�î���� ����� ç�è�é���ä�å�á"â�ã³ê�î�ß�Ý�ä�å>á�â�ã ��� � ç�î�é�ã@ß�Þ@÷�ì�ó!� �����ç�è�é���ä"å�á"â�ã±ê6î�ß�Ý�ä@ã ß Þ@÷<ì�ó�""íß�î�éOì�ë�ë�è�íï ì�ë�ð�ßlç�è�é�ä ï ç à���ä"å�á"â�ã±íß�î�éÏô ò íß�î�é�í

ã��ú"ø�å$#&%�ø<å�'>á��( : Wird die á�â )�á"ü�û der verkauften Waren in der Tabelle %�ø<å�'>á��( geändert,und ist diese á�â )�á�ü�û > 50, so wird das ã�ø<ü�á�û�ú des á�â�ã�ø�ù�ú�ø<û�û�ú"ø�â um 10 erhöht.ù�ø�ü�å�#mã��ú"ø�å�#*%�ø<å�'�á��( : Wird die á�â�)�á�ü�û der verkauften Waren in der Tabelle %�ø<å�'�á��(geändert, und ist diese á�â�)�á�ü�û > 100, so wird der å�á�â�ã des á�â�ã�ø�ù�ú�ø<û�û�ú"ø�â um 1 erhöht.

ï à�ß�÷�ó�ßzé�ß ò ß�à�à�ß�éOó@à�ô�����ß�à¶ã�%�ä@ù�ã�%÷ ò ó�ß�à�ç�è�é�÷<ó�ßzë�î+%�ø<å�'>á��(é�ß ï ì@÷�à�ßï ç à�ð�ë�à�ç�è�é�ä ï ç@àmä�%�ø<å�'�á��(zô�ðð�ß ì�ß ï ó]ë ì�é�ä�á"â�ã<ä�â�å ò à�ë�,�ç�ä ã�%�ä@ù�ã-%OçÝ�Þ�ßà�ß+.-/�0�ç#ê6î�ß�Ý�ä/÷�î�1�÷<Þ�ì#íç�è�é�ä�%�ø�å�'�á��(�ç�è�é�ä ï ç@àmä�%�ø�å�'�á��(�öà�ë�Ý�ó32"è�ß�íï ç à�ð�ë�à�ç�è�é�ä ï ç@à�ñ>ä%ø�å�'>á��(zô�ðð�ß ì�ß ï ó]ë ì�é�ä�á"â�ã<ä�â�å ò à�ë�,�ç�ä ã�%�ä@ù�ã-%OçÝ�Þ�ßà�ß�þ /�/�0ÏçÎê�î�ß�Ý�ä�÷�î�1÷�Þ�ìÎíç�è�é ñ>ä%�ø<å�'>á��(�ç�è�é�ä ï ç@à<ñ�ä%ø�å�'�á�-(�öà�ë�Ý"ó32�è�ß�í

4 ß���ô�îô ò ç�è�é�÷<ó@ô�î��ló�Þ�ß�îë�è�ß�îOç�è�é�ä ï ç@àHä%�ø<å�'>á��(ÿíì�ë�ë�è ò ß ó ï Þzç�è�é�ä ï ç àmä�%�ø�å�'�á��(zô�î ó�ëOç�è�é�ä%ø�å�'>á��(ÿíß�õ�ô�ó¶Ý"Þ�ß�îOç�è�é�ä ï ç@àHä%ø�å�'>á��(�ö�î�ë ó ò ë ç�î�é�íç�è�é�÷<ó�ßSá�â�ã�ø�ù�ú�ø<û�û�ú"ø�ð�ß ó�ã�ø<ü�á"û�úzæzã�ø�ü>á�û�ú65�þ /Îê7/Ý"Þ�ßà�ßSá�â�ã�ø�ù�ú�ø�û�û�ú"ø�ê$â�å�æÏç�è�é�ä�%�ø<å�'�á��(�ê6ë ì�é�ä�á"â�ã�ä"â�åÎí

Page 121: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang A Tabellen und Triggerdefinitionen zu den Beispielen aus Kapitel 3 115

8�9�:<;�=�=�>�?@-; =�A�86B >�:�C@-B-DECF$G H�I*J�K-LM?=�>�8�9<B�>�:�C�@-B�DON*CF$G H�I*J�K-LM?;�=�=�> P 8-Q�@R+B�>�:�C@-B-D NSCF�GOH�ISJ�K�L+T�9Q�=<B�>�:-NSCF�GOH�I*J�K�LU?8�V�T QXW�R�8�9<B >�:�C�@-B�DON*C�F�G H�I*J�K-L�Y�9�=-Q P =-B 9�:Z?B >�:�[OQ�8\J�]�^�G*_�`�GOa�a�`�G�A�8-Q+H*J�]�^+b�H*J�]�^6cedW�R�8�D�8\J�]�^�G*_�`�G a�a�`�GUf7]�H b�B�>�:-NSCF�GOH�ISJ�K�LUfg=-; :�C�J�]�^OC�]�H�?8�9�:<;�=�=�>�?@-; =�A�86B >�:�C@-B-D N*C�F�GOH�I*J�K�LM?8�9�:eT P ?8�9�:�?

Page 122: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

116

ANHANG B:

Ausführungsgraph zu Beispiel 5aus Kapitel 3

Im folgenden wird ein Teil eines Ausführungsgraphen für die Trigger h�ij�k�lnm�oSp�j�q ( h�o�r ,o*p�j�qsm�h�i-j�k�l ( o�h�r , tOpu-v�l�wOj�x�wOo�m�oSp�j�q ( t�o�r und j�w k-w o�m�o*p�j�q ( j�o�r gezeichnet. Es seien dieselbenVoraussetzungen wie in Kapitel 2 Beispiel 5 gegeben.

Man betrachte nur die Trigger h�o , o�h , t�o und j�o . Die Trigger seien nicht priorisiert: DieTrigger l�q-y und q-y sollen im Moment nicht berücksichtigt werden. Nun wird diefolgende Transaktion, die aus nur einer Datenänderungsoperation besteht,durchgeführt:

z�{�|�} ~ � p�j�q�w*l���w ������w�� �-~ o*p�j�q+�����\��� �$��� p�j�q ��j�o����O�!�Durch diese Datenänderung sind die Trigger h�o , o�h , t�o und j�o ausgelöst, d.h. dieTransitionstabellen haben folgendes Aussehen:

Transitionstabelle des Triggers h�o (Bezeichnung im folgenden TR_BR0):

i��x j-w*t�M� j�o o*p�j�q q�w vSp���� j�o o*p�j�q q�w vSp��������� � � �*� �-��� � � ��� �-���

Die Transitionstabellen der Trigger o�h (TR_RB0), t$o (TR_WR0) und j�o (TR_NR0) sindmit denselben Tupel gefüllt, wie die TransitionstabelleTR _BR0.

Der Anfangszustand (bzw. Knoten) S besteht also aus den Komponenten D0 und derMenge TR0 = {TR_BR0,TR_RB0,TR_WR0,TR_NR0}. D0 sei der DB-Zustand nach derAusführung der Transaktion, aber vor der Ausführung der Trigger.

Nun sind alle Trigger zu betrachten, die im Zustand S ausgelöst werden können:

S →BR S1 = (D0; {TR_RB0, TR_WR0, TR_NR0})

S →RB S2 = (D1; {TR_BR0, TR_WR0, TR_NR0})

Page 123: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang B: Ausführungsgraph zu Beispiel 5 aus Kapitel 3 117

���������∧ � ���$� ���<� �-�� �¡£¢��-�+��¤S¥�¦S§�¨ � �-¤*¥$¦*§�¨6©�ª «­¬<��¤S® ¯�¦S§���¨±°

S →WR S3 = (D2; {TR_BR1, TR_RB1, TR_WR1, TR_NR1})

��²³�����∧ � ���$� ���\§���¨�¤S¡�¥�¤O´�´�¥�¤�¢��� ¨�¤ µ*§�´�¥ � ¨�¤Oµ*§�´�¥£¬�ªU¶�ªM°

Transitionstabelle des Triggers ��¦ (TR_BR1), des Triggers ¦�� (TR_RB1) und desTriggers ��¦ (TR_NR1):

�´ � �-¤*®¥M· ��¦ ¦*§���¨ ¨�¤ µS§�´�¥ ��¦ ¦*§���¨ ¨�¤ µS§�´�¥¸�¸�¸ ª ¹ ª*º »-«�« ª ¹ ª�¼ »-«�«

ª ¹ ª�¼ »-«�« ª ¹ ª�¼ »�»-«Transitionstabelle des Triggers ®�¦ (TR_WR1):

�´ � �-¤*®¥M· ��¦ ¦*§���¨ ¨�¤ µS§�´�¥ ��¦ ¦*§���¨ ¨�¤Oµ*§�´�¥¸�¸�¸ ª ¹ ª�¼ »-«�« ª ¹ ª�¼ »�»«

S →NR S4 = (D0; {TR_BR0, TR_RB0, TR_WR0})

Nun sind alle Trigger zu betrachten, die im Zustand S1 ausgelöst werden können:

S1 →BR S5 = (D1; {TR_WR0, TR_NR0 })

S1 →WR S6 = (D2; {TR_BR2, TR_RB1, TR_WR2, TR_NR1 })

Transitionstabelle ��¦ (TR_BR2) und ®�¦ (TR_WR2):

�´ � �-¤*®¥M· ��¦ ¦*§���¨ ¨�¤ µS§�´�¥ ��¦ ¦*§���¨ ¨�¤ µS§�´�¥

ª ¹ ª�¼ »-«�« ª ¹ ª�¼ »�»-«

S1 →NR S7 = (D0; {TR_RB0, TR_WR0})

Nun sind alle Trigger zu betrachten, die im Zustand S2 ausgelöst werden können:

S2 →BR S5 = (D1; {TR_WR0, TR_NR0})

S2 →WR S8 = (D3; {TR_BR1, TR_RB2, TR_WR1, TR_NR1})

��½³�����∧ � ���$� ���<� �-�� �¡£¢��-�+��¤S¥�¦S§�¨ � �-¤*¥$¦*§�¨6©�ª «­¬<��¤S® ¯�¦S§���¨±°

Page 124: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang B: Ausführungsgraph zu Beispiel 5 aus Kapitel 3 118

∧ ¾�¿�À�ÁOÂ�Ã\Ä�Å�Æ�Ç*È�É�Ç Ê�Ê�É�Ç Ë�Ã-Â�Æ�ÇOÌ*Ä�Ê�É+Í�Æ�Ç Ì*Ä�Ê�É6Î�ÏMÐÒÑ!ÓTransitionstabelle Ô�Õ (TR_RB2):

Ö Ê�× Å-Ç*ØÉMÙ Å�Ô Ô*Ä�Å�Æ Æ�Ç ÌSÄ�Ê�É Å�Ô Ô*Ä�Å�Æ Æ�ÇOÌ*Ä�Ê�É

Ï Ú Ï�Û Ü-Ý�Ý ÏOÚ Ï�Û Ü�ÜÝS2 →NR S9 = (D1; {TR_RB0, TR_WR0 })

Nun sind alle Trigger zu betrachten, die im Zustand S3 ausgelöst werden können:

S3 →BR S10 = (D2; {TR_RB1, TR_WR1, TR_NR1})

S3 →RB S11 = (D3; {TR_BR1, TR_WR1, TR_NR1})

S3 →WR S12 = (D2; {TR_BR1, TR_RB1, TR_NR1})

S3 →NR S13 = (D2; {TR_BR1, TR_RB1, TR_WR1 })

Nun sind alle Trigger zu betrachten, die im Zustand S4 ausgelöst werden können:

S4 →BR S7 = (D0; {TR_RB0, TR_WR0 })

S4 →RB S14 = (D1; {TR_BR0, TR_WR0 })

S4 →WR S15 = (D2; {TR_BR1, TR_RB1, TR_WR1, TR_NR2})

Transitionstabelle Å�Ô (TR_NR2):Ö Ê�× Å-Ç*Ø

ÉMÙ Å�Ô Ô*Ä�Å�Æ Æ�Ç ÌSÄ�Ê�É Å�Ô Ô*Ä�Å�Æ Æ�ÇOÌ*Ä�Ê�ÉÞ�Þ�Þ Ï Ú Ï�Û Ü-Ý�Ý Ï Ú Ï�Û Ü�ÜÝ

Nun sind alle Trigger zu betrachten, die im Zustand S5 ausgelöst werden können:

S5 →WR S16 = (D3; {TR_BR2, TR_RB2, TR_WR1, TR_NR1})

S5 →NR S17 = (D1; { TR_WR0 })

Nun sind alle Trigger zu betrachten, die im Zustand S6 ausgelöst werden können:

S6 →BR S10 = (D2; {TR_RB1, TR_WR1, TR_NR1})

S6 →RB S18 = (D2; {TR_BR2, TR_WR1, TR_NR1})

S6 →WR S19 = (D2; {TR_BR2, TR_RB1, TR_NR1})

S6 →NR S20 = (D2; {TR_BR2, TR_RB1, TR_WR1 })

Page 125: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang B: Ausführungsgraph zu Beispiel 5 aus Kapitel 3 119

Die Trigger, die im Zustand S7 ausgelöst werden können:

S7 →RB S21 = (D1; {TR_WR0})

S7 →WR S22 = (D2; {TR_BR2, TR_RB1, TR_NR1})

Die Aufzeichnung der möglichen Zustände und zugehöriger Transitionstabellen wirdan dieser Stelle abgebrochen.

Ergebnis:

Das Zeichnen konkreter Ausführungsgraphen kann sich als sehr umständlich und zuumfangreich auswirken.

Page 126: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

120

ANHANG C:

Benutzerhandbuch zumerweiterten TSS

Systemvoraussetzungen

Voraussetzungen für die Lauffähigkeit des Programms sind eine beliebige UNIX-Version und das DBMS ORACLE der Version 7.1.3.

Sollte es einmal nötig sein, den Quellcode des Programms Trigger neu zucompilieren, so werden zur Übersetzung die folgenden Quelldateienßáà�â�ã

äà�ã�åäæ$çà�èé�ê

ëgìèíî ê$à�å ä

à�ã�åäï�æå*ðëèíß�ð

äèæß�ßsâ ñ

ëèíê

ç�ç�æ�ç�ò ëèíî êé ì ä

ñæ�æéò ëèíñ�ê

çßáâ�ã�àOñ�ê

ëè undè

æã-ó�é�ô�ê�ã�è�ê

ëèí

sowie die von allen Modulen verwendete Headerdatei

ßáà�â�ãë î í benötigt.

Die Datei

ßáà�â�ãäà�ã�åäæ$çà�èé�ê

ëgìè wird mit Hilfe des Pro*C-Präprozessors in die Dateißáà�â�ã

äà�ã�åäæ�çà�èé�ê

ëè umgewandelt. Dies sollte mit dem Oracle7 Makefile ì ç�æ

è$õ öëßá÷

erfolgen. (Der Präprozessor benötigt dazu aus dem Makefile einen Benutzernamenund das zugehörige Passwort. Hier ist SCOTT/TIGER zu verwenden.)

Der zugehörige Befehl lautet:

ßáà�÷�êøóì ç�æè�õOöëßá÷ùßáà�â�ã

äà�ã�åäæ$çà�èé�ê

Mit dem Standard C-Compiler wird der modifizierte Quellcode übersetzt und vomLinker anschließend mit den benötigten Bibliotheken zusammengebunden.

Hierfür ist der Befehlè�èø�ú ë ø&ûüø&ý

è�þ�ÿ��ø����ôò�ç �éæè�àOé

���à ñ-àïàòêò � æ$ç

à�èé�ê�é�âï ø æ���ç

â�þ�þ�êçßáà�â�ã

äà�ã�åäæ�çà�èé�ê

ëèê

ç�ç�æ�ç�ò ëè î ê�à�å ä

à�ã�åä�ï�æå*ðëè�ß ð

äèæß�ßáâ ñ

ëè<ñ�ê

çßsâ�ã�àOñ�ê

ëè+èæãó�é�ô ê�ã�è�ê

ëè î ê-é ì ä

ñæ�æéò ëèøéòé

�ôò�ç �éæè�à é

���àOñ�àïàòêò � æ�ç

à�è-é ê�é�âï � æ�ò

ã-ñ-àï ë æ ø

éòé�ã�ê-ñ

øéæ�çàøéò�é�ã�êñ

øéæ$çàøé ã-éò$çñ�éøé�è � ö ø

é èæ�çêøé�ãéò�çñ�éøé è � ö ø

é�èæ$çêøéò�æè$÷�êñ

øé�ãòéøé*ßøé�å-é

øé-à�âæ

zu verwenden.

Es entsteht das ausführbare Programm ��çâ�þ�þ�ê

ç .

Page 127: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang C Benutzerhandbuch 121

Triggererstellung

Alle verzögerten Trigger, die die Integrität überwachen sollen, müssen zunächst ineine Datei geschrieben werden. Die Syntax der verzögerten Trigger entsprichtweitestgehend der Syntax der Trigger in Oracle7 (vgl. unten). Jeder Trigger in derDatei muß mit einem Slash ‘/’ in der Zeile nach dem letzten �� ��� abgeschlossenwerden. Außer dem Slash darf nichts anderes in dieser Zeile stehen. Ansonsten sindinnerhalb des Triggers beliebig viele Leerzeichen und Tabulatoren zwischen deneinzelnen Wörtern möglich. Neu sind neben dem Schlüsselwort ������������� , welcheskennzeichnet, daß es sich um einen verzögerten Trigger handelt, die Schlüsselworte� ����������� und ������������� : Hierdurch kann der Benutzer Prioritäten zwischen den Triggernfestlegen. Bestehen Widersprüche in der Angabe der Prioritäten, so wird demBenutzer eine diesbezügliche Meldung mitgeteilt. Es erfolgt aber keinProgrammabbruch, die widersprüchlichen Prioritäten werden bei der Verarbeitungder Prioritäten nicht berücksichtigt.

Zu jedem Trigger, der in der Datei steht, werden Transitionstabellen angelegt. Durchdiese Tabellen ist dem Benutzer die Möglichkeit gegeben auf alte Werte zurück-zugreifen, wie es bei Datensatztriggern in Oracle7 möglich ist (vgl. Kapitel 2.3.7:Trigger in PL/SQL). Diese Tabellen haben den Namen des Triggers und mit einemUnterstrich vorangestellt, je nachdem um welche Tabelle es sich handelt, dieBuchstaben i, u oder d. Zu jeder Tabelle dürfen aber maximal 3 verzögerte Triggerexistieren: Ein Trigger der auf ein Änderung, ein Trigger der auf eine Löschung undein Trigger, der auf eine Einfügung in der Tabelle reagiert.

Nach Eingabe der Trigger in die Datei werden die verzögerten Trigger durch Aufrufdes Programms ��� �!!���� installiert. Als erstes ist dort der Benutzername SCOTTeinzugeben. Das zugehörige Passwort lautet TIGER. Eine andere Benutzerkennungals SCOTT ist nicht möglich. (Ein Zugriff auf die vom TSS angelegten Tabellen,Trigger und Prozeduren ist sonst nicht möglich, vgl. dazu auch [5].) Bei derInstallation wird die Syntax des gesamten Triggers überprüft, d.h. es werden nichtnur Fehler in der Syntax des Triggerkopfes, sondern auch im Rumpf entdeckt. Istdies der Fall, so erscheint eine Fehlermeldung mit dem Namen des Triggers, derden Fehler verursacht hat, und das Programm wird abgebrochen. Ansonsten werdendie Trigger installiert.

Sind alle verzögerten Trigger installiert, so erfolgt eine Überprüfung, ob die Mengeder Trigger terminiert, ob es also möglich, daß sich die Trigger immer gegenseitigaufrufen, und daher die Ausführung der Trigger, unter bestimmten Umständen, nichtendet. Ein Beispiel dafür ist, daß der eine Trigger ein Tupel aus einer Tabelle löscht,ein weiterer Trigger genau dieses Tupel aber wieder einfügt. Der Trigger, der dasTupel in der Tabelle gelöscht hat, reagiert genau auf diese Einfügung und löscht dasTupel wieder.

Nach der Analyse ob die Menge der Trigger terminiert, wird eine Analyse bezüglichder Konfluenz der Triggermenge durchgeführt: Ist es anhand der gegebenenPrioritäten möglich, daß mehere Trigger gleichzeitig ausgelöst werden können, undwenn dies der Fall ist, ist der DB-Endzustand von der Ausführungsreihenfolge derTrigger abhängig? Ein Beispiel dafür ist, daß wenn zwei Trigger nicht priorisiert sind,und beide Werte einer Spalte in einer Tabelle ändern, ein Trigger diesen Wert um10 erhöht, der andere diesen Wert aber um 5 % erhöht, die DB-Endzustände dannvon der Ausführungsreihenfolge der Trigger abhängen.

Page 128: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang C Benutzerhandbuch 122

Eine Voraussetzung für Konfluenz der Triggermenge ist Terminierung. Terminiert dieMenge der Trigger also nicht, so kann sie auch nicht konfluent sein. Die Ergebnissebezüglich Terminierung und Konfluenz werden vom Programm gemeldet.Unabhängig dieser Ergebnisse sind die verzögerten Trigger aber installiert.

Syntax

Die Syntax der Trigger unterscheidet sich zu den sofortigen Triggern durch die obenbereits angegebenen Schlüsselworte und hat dann den folgenden Aufbau:

"�#�$&%(')$�*($�+$�#�#�$�*,'�#)-/..�$�# 0�1�2�33�451�6�798�4 %:+;'�$<#

=�#*($<>($?'�$ =�@ 0�7�A�B�4-;@�C�$<#�'D(E *?%(')$

*($�"�>;%)#($ F�B�G�H�I�B?J�K4�L�B�7�1�4�J�H4�L�0�2�M6

E #($�"5$�*�$;C F�1�4L�J�B�2�H�0 $�@*

+�=�>�>�=�NC O�M�BB;J�B�2�H�0 $�@*

P $;.Q-;@ F�B�G�H�I�B?J�F51�M�351�798�J�AM�K;R $�@*

Die F�1�4L�J)B(2�H�0

(bzw. fM�B�B?J�B(2�H�0)S

soll die Namen der Trigger enthalten die vor (bzw.nach) dem Trigger

0(1�2�3�34�1�657&8�4 ausgeführt werden sollen. Die einzelnen

Triggernamen sollten dabei nur durch Leerzeichen voneinander getrennt sein.

Die Benutzung des TSS ist auch ohne Angabe der F51�4�L4�K4�H

und O�M�B�B�M�T�H

Listenmöglich.

Auf die Syntax der F�B�G�H�I�B?J�K4�L�B�7�1�4�J�H4�L�0�2�M�6

und dem F�BG�H�I�B;J�F�1�M3�1�798�J�A�M�K?R

wird nichteingegangen, hierzu sei z. B. auf [4] und [29] verwiesen. Als Ausnahme sind imF�B�G�H�I�B;J�F51�M�351�798�J�AM�K?R

lediglich die Konstrukte2�OU2�6H�451�0(2�6�32�OVK�4�B�4�0(2�632�OXW�FK�7<0(2�63

erlaubt. Eine Kombination wie2�OU2�6�H4�1<0(2�63YM51,K�4�B�4�0�2�6�3

ist jedoch nicht möglich.

Page 129: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang C Benutzerhandbuch 123

Prioritäten

Durch die in Z�[�\]�^)_(`�a�b und f c�_�_?^�_�`�a�b gegebenen Prioritäten wird eine Reihenfolge fürdie Ausführung der Trigger gegeben. Wichtig ist, daß die Reihenfolge desVorkommens in Z5[�\�]��_��a�b und f c�__;^�_�`�a�b keine Bedeutung hat. Auch wenn anhand derZ�[�\]�^)_(`�a�b und f c�_�_?^�_(`�a�b keine eindeutige Reihenfolge entsteht, wird durch dasProgramm den Triggern eine eindeutige Reihenfolge zugewiesen. In Z�[�\�]�^)_(`�a�b desTriggers stehen die Trigger, die vor dem Trigger, der gerade definiert wird,ausgeführt werden sollen, in der d�c�__;^�_�`�a�b stehen die Trigger, die nach dem Trigger,der gerade definiert wird, ausgeführt werden sollen.

Beispiel 1

Es existieren die Trigger [&^�\5`�e�a , [&^�f�g�\5`ihj[&^�k�[�\5`ihj[&^�l5`�\5[ und [&^�dm�e�d auf den Tabellenb;^�\5`�ea�hnb;^�f�g�\5`ihnb;^�k�[�\5`ihnb;^�l�`�\5[ und b;^�dm�e�d .Die zugehörigen Triggerköpfe:

Die Trigger [&^�f�g�\5` und [&^�k�[�\5` sollen nach dem Trigger [&^�\5`�ea ausgeführt werden:

]�[�\�o�b�\Xk�\�d�\�[�[�\�kpb([`�qq�\�[X[&^�\�`�e�ao�db�\�[X`�e�a�\5[�bVc�[,k�\�_�\�b�\Xc�[�r�Zk�o�b�\c�epb;^�\�`�e�ad�c�_�_�c�g�aj[&^�f�g�\5`X[&^�k5[�\5`s\e�kt \q�`�evuu�u�uuDer Trigger [&^�f�g�\5` soll vor dem Trigger [&^�k�[�\5` und nach dem Trigger [9^�\�`�e�aausgeführt werden (Doppelbenennungen sind möglich):

]�[�\�o�b�\Xk�\�d�\�[�[�\�kpb([`�qq�\�[X[&^�f�g�\�`o�db�\�[X`�e�a�\5[�bVc�[,k�\�_�\�b�\Xc�[�r�Zk�o�b�\c�epb;^�f�g�\�`Z�[�\�]�\k�\aw[9^�\�`�e�aX\�ekd�c�_�_�c�g�aj[&^�k�[�\5`,\�e�kt \q�`�evuu�u�uuIm Triggerkopf von Trigger [&^�k5[�\5` sind keine Prioritäten angegeben:

]�[�\�o�b�\Xk�\�d�\�[�[�\�kpb([`�qq�\�[X[&^�k�[�\�`o�db�\�[X`�e�a�\5[�bVc�[,k�\�_�\�b�\Xc�[�r�Zk�o�b�\c�epb;^�k�[�\�`t \q�`�evuu�u�uuDer Trigger [&^�dm�e�d soll nach dem Trigger [&^�l�`�\�[ ausgeführt werden:

]�[�\�o�b�\Xk�\�d�\�[�[�\�kpb([`�qq�\�[X[&^�l�`�\�[o�db�\�[X`�e�a�\5[�bVc�[,k�\�_�\�b�\Xc�[�r�Zk�o�b�\c�epb;^�l�`�\�[d�c�_�_�c�g�aj[&^)d�m�e�dV\�e�kt \q�`�evuu�u�uuDie Trigger [&^�dm�e�d soll nach dem Trigger [&^�f�g�\5` ausgeführt werden:

]�[�\�o�b�\Xk�\�d�\�[�[�\�kpb([`�qq�\�[X[&^)d�m�e�do�db�\�[X`�e�a�\5[�bVc�[,k�\�_�\�b�\Xc�[�r�Zk�o�b�\c�epb;^)d�m�e�dZ�[�\�]�\k�\aw[9^�f�g�\�`,\�ekt \q�`�evuu�u�uu

Page 130: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang C Benutzerhandbuch 124

Eine sich dadurch ergebende Reihenfolge wäre (den Trigger mit höchster Prioritätzuerst genannt):x&y�z�{�|}�~�x&y�����z5{i~�x&y���x�z�{i~�x&y���{�z�x���|�wx9y�����|����Möglich wären aber auch die Reihenfolgen:x&y�z�{�|}�~�x&y�����z5{i~�x&y���{�z�xi~�x&y���x�z�{���|�wx9y�����|��

x&y�z�{�|}�~�x&y���{�z5xi~�x&y�����z�{i~�x&y���x�z�{���|�wx9y�����|��x&y�z�{�|}�~�x&y���{�z5xi~�x&y�����z�{i~�x&y)����|��X��|�wx9y���x�z�{

Vom System würde die Wahl auf eine der angegebenen Reihenfolgen fallen. Es istdaher wichtig, daß der Benutzer, aufgrund der unterschiedlich entstehendenReihenfolgen, alle Prioritäten eingibt, die ihm wichtig erscheinen.

Transitionstabellen

Zu jedem Trigger werden die Transitionstabellen {9y(����x�{�����z5x�|��9��z��~��;y����(x{����z�x�|��9��z�� und��y(�5�(x{����z�x�|5�&��z�� angelegt.

• Die Transitionstabelle {&y�����x�{����z5x�|��9��z�� hat u.a.1 die Spalten der Tabelle, aufder der Trigger definiert ist. Die Spaltennamen sind aber jeweils mit demPräfix |�z���y versehen.

• Die Transitionstabelle �;y(�5�(x�{����z�x�|5�&��z� hat u.a. die Spalten der Tabelle, aufder der Trigger definiert ist, in doppelter Ausführung: Zum einen mit demPräfix ��� ��y�~ für die alten Werte, außerdem aber noch einmal mit dem Präfix|�z��y für die neuen Werte.

• Die Transitionstabelle ��y����(x{����z�x�|��&��z�� hat dieselben Spalten wie dieTransitionstabelle {&y�����x�{����z5x�|��9��z���~ jedoch mit dem Präfix ��� ��y und nicht |�z��y��

Neben den Transitionstabellen werden zur Berechnung des Nettoeffekts derTransaktion die Tabellen � { � �;y:{&y����(x{����z�x�|��&��z���~ � { � �;y��?y(�5�(x�{�����z5x�|5�&��z� und� { � �;y���y(�5�(x�{����z�x�|5�&��z�� angelegt. Jedoch sind die 3 letztgenannten Tabellen für denBenutzer nicht von Bedeutung.

Wie bereits oben angegeben, ist es möglich auf die gerade eingefügten, geändertenoder gelöschten Tupel zurückzugreifen. Anhand eines Beispiels soll dies gezeigtwerden:

Beispiel 2

Es exisitere die Tabelle �������?�����<������� , die von jedem Angestellen seineAngestellennummer ( ��� ), seinen �;�)��� und sein �)���;�)��� enthält.

Es sei der verzögerte Trigger � ��|��y��}�� auf dieser Tabelle definiert: Dieser Triggersoll, wenn der Rang des Angestellten geändert wird, eine Meldung mit ��� , �;�)��� und�����?����� ausgeben.

D.h. der verzögerte Trigger � ��|��y��}�� hat damit folgendes Aussehen:

1 Weitere Spalten, die in den Transitionstabellen angelegt werden, sind für den Benutzer nicht vonBedeutung und werden hier auch nicht erwähnt.

Page 131: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang C Benutzerhandbuch 125

� ¡¢ £ ¤¥¦§ ��¨����� ��¡�;¢

� £��¤� ¥��¦

©�ª�«�¬�­�«X®�«�¯�«�ª�ª�«�®p­(ª°�±±�«�ª�²(¬�³�±�´�µ�¶±¬�¯­�«�ª�·�¸�®�¬<­�«X¹�³»º�¼�½�¾?¿�À�¾<Á�Á�À)¾®�«©�Â(¬ª�«©�·�ª�¶¹�ª�·�¸®�´�©�·(ª&´)²;º)¼�½Ã°�¶¶«�Â�«©�­V³�«�Ä�´�¼²ÆÅdz�«�Ä�´)²;º�¼�½ÈÅdz�«�Ä�´(½)¾�É?º�Á�Àj¯(ª�¹�Ê÷;´)²(¬�³±�´�µ�¶�±p·Ä)Ë�«5ª�«p·ÆÌͳ�«�Ä´�²;º)¼�½XÎ(Ïp·�Ìй�Â�®�´�²?º�¼�½ÈÑ·�¸®�´)²;º�¼�½j·�¸�®�´�©�·�ª&´)²;º�¼�½(Ò�ª�¹�Ä)­ÔÓ�¸«�ÑÕ «±�°�³°�¯X·�¸®�¬<­(°�³±U­Ë�«³¹�¸«�³p·�¸®�´�©�·(ª9´�²;º)¼�½ÖÑÂ�¹¹�¸ ¯�«�­�©�ËX·�¸�®�´�©�·�ª&´)²;º�¼�½Ã°�³�­�¹U·�¸�®�´�²;º)¼�½ÖÑ«×�°�­�Ä)Ë�«�³p·�¸�®�´�©�·(ª9´�²?º�¼�½�Ò�³�¹�­�¯�¹�·�³®�ÑØÙ µ<¿�´�Ú�Û�À)Ü�Û�ÀÖÌ/Ü�Û�À�´)Á�Ý;¼�¾�Þ�ß Ø «5ªV²�¬�³±Y®«�¶»º�³±�«�¶�­�«�Â�Â�­�«�³»Êà°<­»®«�ªÃ¼·;ÊÊ�«�ªáßãâ�â·�¸�®�´�²;º)¼�½ÖÌг�«�Ä�´�¼² ßä®�«�ÊU½(«�Ë�¬�­åß ·�¸�®�´)²;º)¼�½ÈÌͳ�«�Ä´(½)¾�É;º)Á�À ßæÄ)·(ª�®«j¬�·�¯çß ·�¸®�²?º�¼�½ÖÌг«�Ä�´)²;º�¼�½ ßä±�«5è�³®�«�ª<­ÆÌ�é?ê�Ñ«�³®pÂ�¹�¹¸©�Â�¹�¶«U·�¸�®�´�©�·�ª&´�²?º�¼�½ÈÑ«�³®w°<¯ÆÑ«�³®�Ñ

Mit Hilfe eines Cursors2 werden in Zeile 4-6 alle Tupel aus der Tabelle ·;´�²�¬�³±�´�µ¶�±ermittelt, deren Rang sich geändert hat. Ein Cursor ist hier nötig, da während derTransaktion der Rang mehrerer Angestellter geändert worden sein kann.

Dieser Cursor wird in Zeile 10 geöffnet. Die folgende Schleife der Zeilen 11 bis 15wird ohne äußeres Abbruchkriterium durchlaufen. Dazu wird der Wert, auf den derCursor zeigt, in die Variable ·�¸®�´)²(¬�³± kopiert (Zeile 12). Die Schleife (Zeile 11 bis 15)wird verlassen, wenn die Liste, auf die der Cursor zeigt, zuende ist. Solange aberWerte vorhanden sind, werden diese in Zeile 14 ausgegeben. Danach wird derCursor in Zeile 16 geschlossen.

Terminierung und Konfluenz

Die Analyse der Terminierung testet, ob sich Trigger gegenseitig aufrufen können,und dadurch Zyklen bei der Ausführung der Trigger entstehen können. Dazu wirdüberprüft, welche Trigger durch die Aktionen der einzelnen Trigger ausgelöstwerden können, welche diese Trigger wiederum auslösen, u.s.w.. Hier wird aber nurbetrachtet, welche Änderungsoperationen in der Aktion eines Triggers durchgeführtwerden, und welche Trigger auf diese Änderungsoperationen reagieren. Nichtbeachtet wird, wenn z. B. der Rang eines Angestellten in einer Aktion eines Triggersgeändert wird, und ein Trigger auf eine Änderung in der Tabelle reagiert, aber nurauf die Änderung des Gehaltes ausgeführt wird. D.h. die Analyse der Terminierungist relativ grob. Ergibt sich daher, daß die Trigger nicht terminieren, so muß diesnicht unbedingt so sein. Ergibt die Analyse der Terminierung aber, daß die Mengeder Trigger terminiert, so ist dies auf jeden Fall so.

Bei der Analyse der Konfluenz verhält es sich ähnlich, wie bei der Analyse derTerminierung: Es werden lediglich Hinweise gegeben, an welchen Triggern es liegt,

2 Ein Cursor ist ein Zeiger auf eine Liste, hier auf die Liste der Angestellten, deren Rang sich geänderthat.

Page 132: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang C Benutzerhandbuch 126

daß der eventuell gewünschte Ablauf nicht vollzogen wurde. Wie bereits im Kapitel 5angegeben, wird durch das Programm eine Reihenfolge der Trigger festgelegt,daher muß die Eigenschaft Konfluenz zur Laufzeit in jedem Fall vorliegen. Wird dieMenge der Trigger als nicht-konfluent bezeichnet, so kann es sein, daß der Benutzereinen andere Reihenfolge in der Abarbeitung der Trigger gewünscht hätte. Sind z. B.die oben angegebenen Trigger, die einmal einen Wert um 10 und ein anderes Malum 5 % erhöhen, nicht priorisiert, so wird ihnen vom System eine Ordnungzugewiesen. Ob diese Ordnung im Interesse des Benutzers war, ist dann anhandder ausgegebenen Liste von Prioritäten zu überprüfen.

Programmbedienung

Die Installation der verzögerten Trigger wird nach Aufruf des Programms ë�ìí�î�îï�ìvorgenommen. Nach Eingabe der Benutzerkennung und des Passwortes wird eineVerbindung zur Oracle-Datenbank aufgebaut. Auch hier sind wieder der Benutzer-name SCOTT und das Passwort TIGER zu verwenden. Als nächstes ist dann derName der Datei einzugeben, in der die verzögerten Trigger stehen.

Sind die Trigger fehlerfrei, so werden sie installiert, und die Verbindung zu Oraclewird automatisch beendet. Ist dies jedoch nicht der Fall, so wird eine Fehlermeldungausgegeben, und wieder nach dem Dateinamen gefragt. Soll das Programm andieser Stelle abgebrochen werden, so ist ein „!“ einzugeben. Werden die Trigger inder Datei geändert, so ist, vor einem weiteren Versuch der Installation, erst unterSQL-Plus die Datei ð�ì�ñ�ò�óàô�õõÆöÍ÷�ø�õ (Eingabe: ù(ð�ì�ñ�ò�óàô�õõ ) auszuführen, die die eventuellbereits angelegten Tabellen, Prozeduren und Trigger wieder entfernt. Die Löschungist unbedingt nötig, da sonst - beim weiteren Versuch der Installation der Trigger -versucht wird, Tabellen, Prozeduren und Trigger mit denselben Namen anzulegen.

Sind die Trigger installiert, so erscheint vom Programm eine Meldung:ú õõ�ïXû�ï5ì�ü�ýî�ï�ì<þ�ïÿVë)ì�í�î�î�ï5ì����(ì�ð�ï�ÿjí�ÿ�÷�þ�ô�õ�õ�í�ï5ì�þÆöVorher werden Meldungen der Ergebnisse der Analyse der Terminierung undKonfluenz ausgegeben. Besagt die Analyse, daß die Trigger eventuell nichtterminieren oder konfluent sind, so sollte der Benutzer anhand der Hinweise, dievom Programm ausgegeben wurden, die Triggermenge noch einmal überprüfen.

Vor jeder neuen Installation der Trigger ist in jedem Fall unter SQL-Plus die Dateið�ì�ñò�ó:ô�õ�õ�öÐ÷�ø�õ auszuführen.

Außerdem wird ein Automatismus hinzugefügt, der unter SQL-Plus überprüft, ob inder Ausführung der Trigger Zyklen entstehen, also die Ausführung eventuell nichtterminiert.

Sind die verzögerten Trigger installiert, so kann der Benutzer Transaktionen in SQL-PLUS eingeben, und am Ende die verzögerten Trigger durch Aufruf der Prozedur��� ó���ñ �� í<þ (Eingabe: ïï� ��� ó���ñ �� í<þ ) aktivieren. Diese Prozedur steuert die verzögerteFeuerung der Trigger, indem vorher mitprotokolliert wurde, welcheDatenänderungen in der Transaktion vorgenommen wurden. Nach derTriggerabarbeitung meldet sich SQLPLUS mit der Meldung ò�ì�ñ���ïð��(ì�ï ÷�������ï÷�÷� ���õõ ���ñ � ò�õ�ï�þ�ïð zurück, und der Benutzer kann weitere Transaktionen eingeben.

Page 133: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang C Benutzerhandbuch 127

Wird vom Programm während der Ausführung der Trigger entdeckt, daß die Triggernicht terminieren, so erfolgt, ohne Bestätigung durch den Benutzer, ein Rollback.Dieser Automatismus ist jedoch durch deaktivieren des Triggers ����������������auszustellen. Dadurch werden die Transitionstabellen nicht mehr kopiert, unddemnach auch nicht mehr verglichen. Der Befehl lautet dafür:��� ������������������� �������������!���#" �#$�� �&%Die Analyse zur Ausführungszeit kann dann, sinnvollerweise sollte dies nachAbschluß einer Transaktion erfolgen, durch den SQL-Befehl��� ������������������� �������������!�' ��$(� �)%wieder aktiviert werden.

Page 134: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

128

ANHANG D:

Beispiele zur Analyse derTerminierung und Konfluenz imerweiterten TSS

Hier wird vorgestellt, wie das erweiterte TSS eine gegebene Menge von Triggern aufTerminierung und Konfluenz untersucht. Dies wird anhand von 3 Beipielen gezeigt.

Beispiel 1:

Die aus Anhang A definierten Trigger wurden analysiert.

Es sind keine Prioritäten in der Definition der Trigger angegeben, das Programm legtfolgende Ausführungsreihenfolge fest:*,+.-�/�0�1�12�/4351�6#7�816

9:+.-�/�0�1�12�/43;/#<#7�=>/?7�@�/A)+.-�/�0�1�12�/435< /

Der zugehörige Ausführungsgraph hat folgendes Aussehen:

BC

D�E 7�F D�E C�B 7�G C 7�H C

Die Analyse der Terminierung durch das Programm liefert:II�III�II�III�III�II�III�III�II�III�II�III�III�II�III�III�II�III�II�III�III�IIJ @ K�LNM�82!O�P�/Q-�2�/SR>0�@ 0�2 /�P�@�1�=T0/#UVU(P�/#W�X�1�2�YP�2�X�/�Z[+++\ 8!<2�8�Z�2�XZ]U�0#2!^_2�1�L�0�W�X�`�2�0�Z:abU�K#88!U�0#2 J P�8(YP�2(X�/�P�@1U2 /Q-�/0#112 /c@ 0�W(XZ!Z�2 /?R>0#@�0�2 /�Zd+J P�81�K#<2!U2 /]e�0�8(Z�2)af=�2�L�W(X�2�-�/�0�11�2�/!K�@�U2�/#2�-�/0#112 /!K�P�8(L�_�282�@g`#_2�@@2�@)3h 2 /Q-�/0#112 /c< /!`K�@�@!U�0�2iY�_(L�1�2@U�2@�-�/�0�11�2�/!K�P�8�L�_28�2@)3 jk/�<�7=>/S7(@ /,jah 2 /Q-�/0#112 /V/#<#7�=>/?7�@�/!`K#@@!U�0#2lY�_�L�12@�U2@�-�/0�1�12�/!K�P�8�L�_2�82@&3 jm< /,jah 2 /Q-�/0#112 /c1�6#7�816n`�K�@@!U�0#2iY�_�L�12�@U2�@]-�/0#112 /!K�P�8(L�_2�82�@)3�oN/�<�7=T/?7(@ /,p

Da zwischen den drei Triggern BC

, CB 7�G C 7�H C

und D�E 7�F D�E keine Prioritäten gegeben sind,müssen die Mengen R1 und R2 also für alle Paare dieser Trigger gebildet werden.

Page 135: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang D Beispiele zur Analyse der Terminierung und Konfluenz im erw. TSS 129

Die Mengen R1 und R2 bestehen jeweils nur aus den Triggern ri und rj (Schreibweisevgl. Lemma 4), da keine Prioritäten zwischen den Triggern festgelegt wurden, undsomit auch keine Trigger den Mengen R1 und R2 hinzugefügt werden können. D.h.die Triggerpaare ( qr , rq�s�t�r�s�u�r ), ( qr , v�w�s�x�v�w ) und ( rqys�t�rys�ur , v�w#s�x�v�w ) müssen auf Kommu-tativität untersucht werden: Die Trigger qr und rq�s�t�r�s�u�r sind nicht kommutativ, da qrden Trigger rq�s�t rys�u�r aufrufen kann, ebenso die Trigger rq�s�t�r�s�u�r und v�w�s�x�v�w)z d.h. sieverstoßen gegen die Bedingung 1 des Lemmas 1 aus Kapitel 4. Die Trigger qr undv�w#s�xv�w sind nicht kommutativ, da sie dieselbe Spalte in einer Tabelle ändern, also dieBedingung 3 des Lemmas 1 aus Kapitel 4 nicht erfüllen. (Die Trigger rqys�t�rys�ur undv�w#s�xv�w ändern auch dieselben Werte einer Spalte, dies wird aber nicht angezeigt, dader Kommutativitätstest abgebrochen wird, wenn die erste bzw. zweite Bedingungfür Kommutativität bereits nicht erfüllt sind.)

Die Analyse zur Konfluenz liefert vom Programm:{{�{{{�{{�{{{�{{{�{{�{{{�{{{�{{�{{{�{{�{{{�{{{�{{�{{{�{{{�{{�{{{�{{�{{{�{{{�{{|�}#~ w������������ ~���� ����i�� ~ ������(���� ~ � �n} � ����~ �?� } � }#~ ������&�|�}#~ � ~ w���������� ~���� ����� } � � � }#������~ ����� ~ ��� � �|�}#~�� �����N��� ~V� �������������� ~ � ���>} ��� � �#� ��� � ~ �g�(��� �(� � ~ �� ~�� � � �{{�{{{�{{�{{{�{{{�{{�{{{�{{{�{{�{{{�{{�{{{�{{{�{{�{{{�{{{�{{�{{{�{{�{{{�{{{�{{� � ���N��� ~ � ~ �]����(��� ~ � ���T} ���!�(��� �(� � ~ �� ~�� � � ����q } ��������!� ~ �c� ~ ��� ~ �ir��]����ir�!�� ~ ��� }#~]� � } �� ~ ���m���4��������k�#�#s � �?s����,���� ~ �� ~ r��,�!�k����s � �?s(� �,�������V� }�~ � ~ �� ~ r��:�!�m���#s(����&��������� � � ��} � }�� � ~�� � ��~ � � � ~ � � � } �� ~ �V�����!� ~ �!� ~ ��� ~ �ir��]����ir�d�� � } �� ~ � � �¢¡�#��¢� ~ � � � } ��� ~ �£���#s � �Ss(���¢�����(��� ~ � ~ �)z¤��� ��~ � � } ��¢� }#~¥� � } ��� ~ �¦� }��(��¡������� � � ��} �� � } �� ~ ��� ~ �c� ~ ��� ~ �ir��]����ir�]� } ��!� }#���� ¡#�#���� � � ��} �)�q } ��������!� ~ �c� ~ ��� ~ �ir��]����ir�!�� ~ ��� }#~]� � } �� ~ ���m���4������¨§©���#s����&��� ~ �� ~ r��,�!�k����s � �?s(� �,�������V� }�~ � ~ �� ~ r��:�!�m���#s(����&��������� � � ��} � }�� � ~�� � ��~ � � � ~ � � � } �� ~ �V�����!� ~ �!� ~ ��� ~ �ir��]����ir�d�� � } �� ~ �����������!��#s�����g� ~ �� ~ �#�V� }�~ � ~ ��� ~ ��x�ª���� ��~ �¬««�«� � } �� ~ ��� ~ �c� ~ ��� ~ �ir��]����ir�]� } ��!� }#���� ¡#�#���� � � ��} �)�q } ��������!� ~ �c� ~ ��� ~ �ir��]����ir�!�� ~ ��� }#~]� � } �� ~ ���k����s � �Ss(� �,�������­�®��#s�����)��� ~ �� ~ r��,�!�k����s � �?s(� �,�������V� }�~ � ~ �� ~ r��:�!�m���#s(����&��������� � � ��} � }�� � ~�� � ��~ � � � ~ � � � } �� ~ �V�����!� ~ �!� ~ ��� ~ �ir��]����ir�d�� � } �� ~ �[���#s(����¯¡�#��°� ~ � � � } �� ~ �°�#�#s � �?s(� �°��������� ~ � ~ �)zl� � ��~ �­� } ��±� }�~²� � } �� ~ �­� }��(��¡������� � � ��} �� � } �� ~ �����s(����i����n�#�#s � �?s(� �!� ~ ��� ~ ���!� }�~ � ~ ��� ~ �]x�ª���� ��~ �d«�««� � } �� ~ ��� ~ �c� ~ ��� ~ �ir��]����ir�]� } ��!� }#���� ¡#�#���� � � ��} �)�{{�{{{�{{�{{{�{{{�{{�{{{�{{{�{{�{{{�{{�{{{�{{{�{{�{{{�{{{�{{�{{{�{{�{{{�{{{�{{� � ���N��� ~!� ���]����(��� ~ � �l� � �]~ �#� ~ � ~ �&z5� ����!� }�~� � } �� ~ ��� }#���� ¡#������� ~ � � � } ��&�{{�{{{�{{�{{{�{{{�{{�{{{�{{{�{{�{{{�{{�{{{�{{{�{{�{{{�{{{�{{�{{{�{{�{{{�{{{�{{� ��� ~ � ~ ��� ~�� � ~ }�³ �� � � ~� ��� ~ � ~ � � � ~ � ~ � ��~ � � � } �� ~ � � ����� ~ � } �� � ����� }#~ � � �

Page 136: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang D Beispiele zur Analyse der Terminierung und Konfluenz im erw. TSS 130

Der Trigger ´ µ�¶¶�·�¸�¹µ�º reagiert auf Einträge in die Tabelle »�¹#¼�¸�¼ ½�¼(¾¾ und hat - bei denoben angegebenen drei Triggern folgendes Aussehen:¿ÀÁÂà ÄÅÆÇ¿�È¿¿¿�À¿�Á¿y¿ ÿ�Ä¿ Å¿�Æ¿�ÇÀÈÀ�¿ÀÀÀ�ÁÀ�ÂÀ ÃÀÄÀ ÅÀ�ÆÀ�ÇÁ�ÈÁ�¿Á�ÀÁÁÁ�ÂÁ ÃÁ�ÄÁ ÅÁÆÁÇÂ�ÈÂ�¿Â�ÀÂ�Á ÃÂ�Ä ÅÂ�ÆÂ�Çà Èà ¿Ã Àà Á

É ¹#Ê�Ë�¸�Ê!¼�¹!¹�Ê»(¾�Ë É Êi¸�¹�µ�ºº�Ê�¹�´�µ�¶¶y·�¸�¹�µ�ºË�¶�¸�Ê�¹!µ#ÌÍÊ ¹�¸]¼Ì!»�¹#¼�¸�¼�½�¼(¾¾¶�¼ ¹cÊ Ë É(Î ¹#¼#Ï´Ê É ¾�Ë�¹�Ê

½�Ì�Ð�Ñ(ÒÊ ¹,ÓÒÊ�º�µ�̽,ÔÖÕ Å Óµ�Ì�ÍÊ�¹�¸lµ�Ì�¸�¼V´ µ�¶�¶y·(Ò ¹

ÍÊ(¾�Ê É ¸!Ðy·�Ò�¹,×®Ø)Ù È ¶�¹�¼#ÑÚÐ�·(Ò�¹4Óµ�Ì�ÍÊ�¹�¸lµ�Ì�¸�¼V´ µ�¶�¶y·(Ò ¹

ÍÊ(¾�Ê É ¸ Î µ�¾¶y·�Ðy·(Ò ¹,×®Ø)Ù È ¶�¹#¼#Ñ Î µ�¾¶�·�Ðy·�Ò�¹,Óµ�Ì�ÍÊ�¹�¸lµ�Ì�¸�¼V´ µ�¶�¶y·(Ò ¹

ÍÊ(¾�Ê É ¸]´#·�Ò�¹,×®Ø)Ù¥Û�ÜÝÝdÙ�ÛÜÝ�Ý:ÙÞÛ�ÜÝ�Ý:Ù È ¶�¹�¼�Ñi´�·(Ò ¹,Óµ�Ì�ÍÊ�¹�¸lµ�Ì�¸�¼V´ µ�¶�¶y·(Ò ¹ÍÊ(¾�Ê É ¸ Î µ�¾¶y·�´#·(Ò ¹,×®Ø)Ù¥Û�ÜÝÝdÙ�Û�ÜÝ�Ý:ÙÞÛ�ÜÝÝdÙ È ¶�¹�¼�Ñ Î µ�¾¶�·(´�·(Ò�¹4Óµ�Ì�ÍÊ�¹�¸lµ�Ì�¸�¼V´ µ�¶�¶y·(Ò ¹ÍÊ(¾�Ê É ¸ Û�ÜÝÝdÙ�Û�ÜÝ�Ý:ÙkµS·(Ò ¹,×mØ&Ù È ¶�¹#¼#Ñßµ?·(Ò ¹,Óµ�Ì�ÍÊ�¹�¸lµ�Ì�¸�¼V´ µ�¶�¶y·(Ò ¹ÍÊ(¾�Ê É ¸ Û�ÜÝÝdÙ�Û�ÜÝ�Ý:Ù Î µ�¾�¶y·>µS·(Ò�¹4×mØ&Ù È ¶�¹�¼�Ñ Î µ�¾�¶y·Tµ?·(Ò ¹,ÓÐ�»�´�Ë�¸�Ê!´�µ�¶�¶y·(Ò ¹�ÍÊ�¸lË#Ìà�Ë Î ¾�Õ°ÔmÌÊ�Ïá×®à�Ë�Ê Î ¾�Ê ¹âÏ Î Ê ¹�ÊnË�Ì�à�Ë Î ¾�Õ È Óµ�Ì�ÍÊ�¹�¸lµ�Ì�¸�¼V´ µ�¶�¶y·>¹#Ò#·�Ï>¹?·�Ì�¹ÍÊ(¾�Ê É ¸!Ðy·T¹�Ò#·�Ï>¹?·�Ì�¹4×mØ)Ù È ¶�¹�¼�ÑãÐ�·>¹#Ò#·ÏT¹?·(Ì ¹,Óµ�Ì�ÍÊ�¹�¸lµ�Ì�¸�¼V´ µ�¶�¶y·>¹#Ò#·�Ï>¹?·�Ì�¹ÍÊ(¾�Ê É ¸ Î µ�¾¶y·�Ðy·>¹#Ò#·�Ï>¹?·�Ì�¹,×®Ø)Ù È ¶�¹�¼�Ñ Î µ�¾¶�·�Ð�·>¹�Ò�·Ï>¹S·(Ì ¹,Óµ�Ì�ÍÊ�¹�¸lµ�Ì�¸�¼V´ µ�¶�¶y·>¹#Ò#·�Ï>¹?·�Ì�¹

ÍÊ(¾�Ê É ¸]´#·T¹�Ò#·�Ï>¹?·�Ì�¹4×mØ)ÙäÛÜÝ�Ý:Ù�ÛÜ�ÝÝ:Ù�ÛÜ�ÝÝdÙÞÛÜ�ÝÝdÙ È ¶�¹#¼#Ñg´#·T¹�Ò�·Ï>¹S·(Ì�¹4Óµ�Ì�ÍÊ�¹�¸lµ�Ì�¸�¼V´ µ�¶�¶y·>¹#Ò#·�Ï>¹?·�Ì�¹ÍÊ(¾�Ê É ¸ Î µ�¾¶y·�´#·>¹#Ò#·�Ï>¹?·�Ì�¹,×®Ø)Ù¥Û�ÜÝ�Ý:Ù�ÛÜÝ�Ý:Ù�ÛÜ�ÝÝdÙÞÛÜ�ÝÝ:Ù È ¶�¹#¼#Ñ Î µ�¾¶y·�´#·T¹�Ò#·�Ï>¹?·�Ì�¹4Óµ�Ì�ÍÊ�¹�¸lµ�Ì�¸�¼V´ µ�¶�¶y·>¹#Ò#·�Ï>¹?·�Ì�¹ÍÊ(¾�Ê É ¸ Û�ÜÝÝdÙ�Û�ÜÝ�Ý:Ù�ÛÜ�ÝÝ:Ùåµ?·>¹#Ò#·�Ï>¹?·�Ì�¹,×®Ø)Ù È ¶�¹�¼�ÑæµS·>¹�Ò�·ÏT¹?·(Ì ¹,Óµ�Ì�ÍÊ�¹�¸lµ�Ì�¸�¼V´ µ�¶�¶y·>¹#Ò#·�Ï>¹?·�Ì�¹ÍÊ(¾�Ê É ¸ Û�ÜÝÝdÙ�Û�ÜÝ�Ý:Ù�ÛÜ�ÝÝ:Ù Î µ�¾�¶y·Tµ?·>¹#Ò#·ÏT¹?·�Ì�¹,×®Ø)Ù È ¶�¹�¼#Ñ Î µ�¾¶�·>µ?·T¹�Ò�·Ï>¹S·(Ì ¹,ÓÐ�»�´�Ë�¸�Ê!´�µ�¶�¶y·>¹#Ò#·�Ï>¹?·�Ì�¹�ÍÊ(¸çË#Ìà Ë Î ¾�Õ°ÔmÌ�Ê#Ïá×®à�Ë#Ê Î ¾�Ê�¹âÏ Î Ê�¹�ÊnË#Ìà�Ë Î ¾�Õ È Óµ�Ì�ÍÊ�¹�¸lµ�Ì�¸�¼V´ µ�¶�¶y·(º�è#·�ͺèÍÊ(¾�Ê É ¸!Ðy·�ºè#·�ͺè&×mØ&Ù È ¶�¹�¼�ÑÚÐy·(º�è#·�ͺè&Óµ�Ì�ÍÊ�¹�¸lµ�Ì�¸�¼V´ µ�¶�¶y·(º�è#·�ͺèÍÊ(¾�Ê É ¸ Î µ�¾¶y·�Ðy·(º�è#·�ͺè&×mØ)Ù È ¶�¹�¼�Ñ Î µ�¾�¶y·�Ð�·(º�è#·(Í�ºè)Óµ�Ì�ÍÊ�¹�¸lµ�Ì�¸�¼V´ µ�¶�¶y·(º�è#·�ͺèÍÊ(¾�Ê É ¸]´#·�ºè#·�ͺè&×mØ&Ù¥ÛÜ�ÝÝ:Ù�ÛÜ�ÝÝdÙ�Û�ÜÝÝdÙÞÛ�ÜÝÝdÙ È ¶�¹�¼#Ñg´�·(ºè�·(Í�ºè)Óµ�Ì�ÍÊ�¹�¸lµ�Ì�¸�¼V´ µ�¶�¶y·(º�è#·�ͺè

ÍÊ(¾�Ê É ¸ Î µ�¾¶y·�´#·(º�è#·�ͺè&×mØ)ÙäÛÜÝ�Ý:Ù�ÛÜ�ÝÝ:Ù�Û�ÜÝÝdÙÞÛ�ÜÝÝdÙ È ¶�¹�¼#Ñ Î µ�¾¶�·(´#·�ºè�·(ͺ�è)Óµ�Ì�ÍÊ�¹�¸lµ�Ì�¸�¼V´ µ�¶�¶y·(º�è#·�ͺèÍÊ(¾�Ê É ¸ Û�ÜÝÝdÙ�Û�ÜÝ�Ý:Ù�ÛÜ�ÝÝ:Ùåµ?·(º�è#·�ͺè&×mØ)Ù È ¶�¹�¼�Ñßµ?·(º�è#·(Í�ºè&Óµ�Ì�ÍÊ�¹�¸lµ�Ì�¸�¼V´ µ�¶�¶y·(º�è#·�ͺèÍÊ(¾�Ê É ¸ Û�ÜÝÝdÙ�Û�ÜÝ�Ý:Ù�ÛÜ�ÝÝ:Ù Î µ�¾�¶y·Tµ?·(º�è#·(Í�ºè&×mØ)Ù È ¶�¹�¼�Ñ Î µ�¾�¶y·>µS·(ºè�·(Í�ºè)ÓÐ�»�´�Ë�¸�Ê!´�µ�¶�¶y·(º�è#·�ͺè!Í�Ê�¸lË�Ìà Ë Î ¾cÕ°Ô®ÌÊ#Ïé×mà�Ë#Ê Î ¾�Ê�¹âÏ Î Ê�¹#ÊgË#Ìà Ë Î ¾�Õ È Óµ�¶Úê�Ô®ÌÊ�Ïá×mà Ë�Ê Î ¾�Ê ¹cë ¿ ì ¸ Î Ê̽�ÔÖÕ�´�µ�¶¶�· É ¼�Ñ(»�Ë�¹�Êíê�ÔmÌ�Ê#Ïá×®à�Ë#Ê Î ¾�Ê�¹ ì Óµ�¶l½ïî ¿ ¸ Î Ê�̹Ë�µ�ÍÊ�·>Ë#»»�¾�µ É Ë�¸�µ#¼Ì#·�Ê�¹¹#¼�¹ ê�ð À�ÈÈ�ÈÀ Ù�ñóò�Ê ¹�¸�Êgµ#Ì!´ÊÌ�ô�¹�Ë�Ì�Í�µ�¸�µ�¼Ì�Í�¸�Ë�ÒÊ(¾¾�Ê�Ì!Í�µ�Ì�´!º�¾�Ê µ É�Î ÙbÊÍÊ�¹�¶�¼(¾�º�¸]Ê µ�Ìiõ�ö�Ý�Ý÷�ø(ù�úd×ñ ì ÓÊÌ�´gµ�¶:Ó

Page 137: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang D Beispiele zur Analyse der Terminierung und Konfluenz im erw. TSS 131

û�üûû ýþ�ÿ������

ýþ�ÿ��

Erläuterungen dazu:

Wird in die Tabelle ��� ��������� ein Eintrag vorgenommen, so reagiert der Triggerÿ������� ��� ��� sofort:

Die Transitionstabellen werden kopiert: Zeile 8 - 19 kopiert die Transitionstabellenund Hilfstabellen des Triggers ��� . In die Spalte � þ�� ����� der Tabelle ÿ������� � wird vorersteine 0 eingetragen. Dies ändert sich durch den Befehl in Zeile 20.

In Zeile 21-32 werden die Transitionstabellen und Hilfstabellen des Triggers ��� ��! � �#" �kopiert. Die Spalte � þ�� ����� der Tabelle ÿ������� � ���$ � �(þ � wird wieder erst mit einer 0vorbesetzt, was sich aber durch den Befehl in Zeile 33 ändert.

In Zeile 34-45 werden die Transitionstabellen und Hilfstabellen des Triggers %�& ��' %�&kopiert. Mit der Spalte � þ�� ����� der Tabelle ÿ���������(��)���( wird wie oben verfahren.

Ein Test, ob bereits Kopien von Transitionstabellen vorhanden sind, wird in Zeile 48durchgeführt. Ist dies der Fall, so wird die Funktion ÿ�����*� + �, ����� ý in Zeile 49aufgerufen.

Ist der von der Funktion zurückgelieferte Wert < 1, so sind die Inhalte derTransitionstabellen gleich, und es erfolgt ein ROLLBACK in Zeile 51 bzw. 52.(ImProgrammablauf erfolgt das rollback erst in der Prozedur ,�- �+ �,�, � � , hier erfolgt nurdie Meldung des Fehlers und der Abbruch der Triggerausführung. )

Die zugehörige Funktion ÿ������� + �,���� ý , die die Inhalte der Transitionstabellenvergleicht, sieht so aus:./0üû 1234 .�5.�..�/.�0. ü. û.�1. 2.�3.�4/�5/�./�//�0/ ü/ û/�1

+ � ý ��� ý �6� ý � ��� +ý7��8�þ�+ � � þ!ÿ������*� + �, ����� ý 9 � � � þ�� ����� þ 8 , ý ��:� ý � 8 � þ!þ�8 , ý � ��)��þ�8 , ý � �� + � � � þ��!þ�8 , ý � �þ�8 , þ 8 , ý � �þ�8 , . þ�8 , ý � �þ�8 ,�, ý � þ�8 , ý � � ý����þ�<;>= 5 �? ��@ '��A�B�CED�B�CGFHD�B�C��EIEJ*"�K9#L & ý � � � ý���+ � ÿý � ? ������ý � ýþ�� ��� ý ��� ý�þ�L : ������þ�8 ,�, ý � ;M= 5 ��<;>=E��N . �)ý � ý�+ � + 8�þ � 9PO : ��þ �� þ�8 , � ���, ÿ�������� � $ � ý � ý � þ�� ����� =Q�R����]þ�8 , S 5 ��� ýþ)ý � ý�+ � + 8�þ � 9PO : ��þ �� þ�8 , � ���, ÿ�������� �$ � ý � ý � þ�� ����� = � � � þ�� �����T� þÿþ � ý�U��) � )V9�9�9W)�ý � ý�+ � þý�$���X#" % �E" �ZY[ � ÿ���XE" % �#" ��Y þý�$�� � K�C � X %GY�� ÿ�� � K�C � X % � ���, ÿ������� � $ � ý � ý � þ�� ����� = � � � þ�� �����#:, ��þ 8�)\9])ý � ý�+ � þý�$���X#" % �#" ��Y^ � ÿ���XE" % �E" ��Y þ�ý�$�� � K*C � X %GY�� ÿ�� � K�C � X % � ���, ÿ������� � $ � ý � ý � þ�� ����� =Q� :�:8�þ� þ\9�9])�ý � ý�+ � þý�$���XE" % �E" �ZY_�� ÿ���XE" % �E" �ZY þ�ý�$�� � K�C � X %GY�� ÿ�� � K�C � X % � ���, ÿ������� � $ � ý � ý � þ�� ����� =Q� :, ��þ 8�)\9])ý � ý�+ � þý�$���X#" % �#" ��Y^ � ÿ���XE" % �E" ��Y þ�ý�$�� � K*C � X %GY�� ÿ�� � K�C � X % � ���, ÿ������� � $ � ý � ý � þ�� ����� = � � � þ�� �����#:�:�: �)ý � ý�+ � + 8�þ � 9PO : ��þ �� þ�8 , . � ���, ÿ������� � $ � ý � ý � þ�� ����� = � � � þ�� ����� �

Page 138: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang D Beispiele zur Analyse der Terminierung und Konfluenz im erw. TSS 132

`�a`�b`�cd�edfd�`d�dd�gd�hd�id�ad�bd�cgegEfg`g�dg�gg�hgigag�bg�ch�ehfh�`h�dh�gh�hh�ih�ah�bh�ci�ei�fi�`i�di�gi�hi�ii�ai�bi�ca�ea�fa�`a�d

j�kml�n*oqp e6r�s�t ll�n*o�o tuwv pql�n*o�o t�uyx�fRzt l�{�j�k zt l�{�j�k z| t }�t�~ rm~�� n�l rE�P�V� j�l r�� l�n*o�k u�� o7{�j�k�k�� u�� ��� u �l u � s�t�u�t�� l�� ��s�} p�j zj�kml�n*o � e�r�s�t l| t }�t�~ rm~�� n�l rE�P�V� j�l r�� l�n*o�k u�� o7{�j�k�k�� u�� ��� u �l u� s�tu�t�� l�� ��s�} p s � � l�� ��s�}T� l�{l � rmt�� j | r | ����� | t }�t�~�r l t ���E����� ��} {��E������l t ���E���#���G� � } {��#���#���G��l t �����#�����#���G���} {����#���*�E����k u�� o�{j�k�k*� u�� ��� u � l u � s�tu�t�� l�� ��s�} p s � � l�� ��s�}E�o�j�l n | � | t }�t�~ r l t ���E����� ��} {��E������l t ���E���#���G� � } {��#���E���G��l t �����#�����#���G���} {����#�����#����k u�� o�{j�k�k�� u�� ��� u � l u � s�tu�t�� l�� ��s�} pQj ���n�lj � l ��� | t�}�t�~�r l t ���#����� ��} {��#������l t ���E�*�E����� ��} {��E���#������l t �����E���*�E�������} {����#�����#����k u�� o�{j�k�k�� u�� ��� u � l u � s�tu�t�� l�� ��s�} pQj �o�j�l n | � | t }�t�~ r l t ���E����� ��} {��E������l t ���E���#���G� � } {��#���E���G��l t �����#�����#���G���} {����#�����#����k u�� o�{j�k�k�� u�� ��� u � l u � s�tu�t�� l�� ��s�} p s � � l�� ��s�}E�����Ez| t }�t�~ rm~�� n�l rE�P�V� j�l r�� l�n*o f k u�� o�{j�k�k�� u�� ��� u � l u � s�tu�t�� l�� ��s�} p s � � l�� ��s�}�zj�kml�n*oqp e6r�s�t ll�n*o�o tuwv pql�n*o�o t�uyx�fRzt l�{�j�k zt l�{�j�k z| t }�t�~ rm~�� n�l rE�P�V� j�l r�� l�n*o�k u�� o7{�j�k�k�� ����� | ����� s�tu�t�� l�� ��s�} pQj zj�kml�n*o � e�r�s�t l| t }�t�~ rm~�� n�l rE�P�V� j�l r�� l�n*o�k u�� o7{�j�k�k�� ����� | ���� s�tu�t�� l�� ��s�} p s � � l�� ��s�}T� l�{l � rmt�� j | r | ����� | t }�t�~�r l t �����#�����#���Z� ��} {����#�����#���Z�[l t ������ ������� � } {�� ��� �����G�l t �����E�����E����� ��} {����#�����E���6k u�� o�{j�k�k*� ����� | ����� s�t�u�t�� l�� ��s�} p s � � l�� ��s�}E�o�j�l n | � | t }�t�~ r l t �����#�����#����� � } {����E�����E������l t ��� ��� ������� ��} {�� ���������G�l t �����E�����E����� ��} {����#�����E���6k u�� o�{j�k�k*� ����� | ����� s�t�u�t�� l�� ��s�} p�j ���n�lj � l ��� | t�}�t�~�r l t �����E�����E���Z� ��} {����#�����#������l t ��� ���������G� ��} {�������*���G�l t �����E�����E����� ��} {����#�����E���6k u�� o�{j�k�k*� ����� | ����� s�t�u�t�� l�� ��s�} p�j �o�j�l n | � | t }�t�~ r l t �����#�����#����� � } {����E�����E������l t ��� ��� ������� ��} {�� ���������G�l t �����E�����E����� ��} {����#�����E���6k u�� o�{j�k�k*� ����� | ����� s�t�u�t�� l�� ��s�} p s � � l�� ��s�}E�����Ez| t }�t�~ rm~�� n�l rE�P�V� j�l r�� l�n*o f k u�� o�{j�k�k������� | ���y� s�tu�t�� l�� ��s�} p s � � l�� ��s�}�zj�kml�n*oqp e6r�s�t ll�n*o�o tuwv pql�n*o�o t�uyx�fRzt l�{�j�k zt l�{�j�k zj�k ��� l�n*o�o t�u p e#� ��u�� j¡p s � � l�� ��s�}�¢mf���£r�s�t lu�t r n u l � l�n*o�o t�u�#zt�� j r�zt l�{�j�k zt l�{ }�����¤�zt l�{ z

Erläuterungen dazu:

Die Funktion {j�k�k�� ~�� o ¤��u�t

vergleicht in den Zeilen 16-25 die Inhalte derTransitionstabellen des Triggers ¥ � , in den Zeilen 32-43 die Inhalte derTransitionstabellen des Triggers

� ¥ ��¦���#��� und in den Zeilen 50-61 die Inhalte derTransitionstabellen des Triggers

��§���¨���§ª©Durch die | t�}�t�~ r -Befehle werden die Tupel

in den Tabellen{j�k�k�� �

vollständig verglichen, beinhaltet ist hier auch ein Vergleich,

Page 139: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang D Beispiele zur Analyse der Terminierung und Konfluenz im erw. TSS 133

ob es sich um dieselbe Anzahl der Tupel handelt. Sind die Transitionstabellen inallen drei Fällen gleich, oder wurden alle Transitionstabellen miteinander verglichen,so wird in Zeile 70 herausgesprungen. Der zurückgelieferte Wert wird in dem Trigger«¬�­�­

®#¯�°¬�±

ausgewertet.

Beispiel 2:

Die Bedingungen des Lemmas 1 für Kommutativität werden durch das erweiterteTSS - wie bereits in Kapitel 5 angegeben - nur grob getestet. D.h. durch die grobeÜberprüfung der Bedingungen 1 -3 werden die Bedingungen 4 und 5 mitgeprüft.D. h. es fehlt also noch ein Beispiel, daß die Trigger aufgrund der Bedingung 2 nichtkommutativ sind. Dazu wurde der Trigger ²�³ ®�´ ²�³ aus Anhang A und Beispiel 1folgendermaßen geändert:µ °�¶·�¯�¶

«¶­¶°�°�¶

«¯�°¬�±�±

¶° ²�³ ®�´ ²�³·­¯�¶°¹¸�º

«·�¯�¶6»�¼ ³½�¾�¿*ÀEÁ�­

» Ã�Ã�»�Ä ÅÇÆ ¾¶�¼«

È ¶±¬¼¬�­¸�º«·�¯¬¼±¯�É�¶�¼«

¶ Ã�¶ ¯�¶­°�»�Ê Æ�Ë�Ì Á ´¹ÄEÉ�¶°�¶ Æ ½�;*À�²qÎ�Ï�Ð�Ð�ÑÒ Æ�Ó ´�® Ë Á�ÍEÔ�Á�ÍGÕÖÔ�Á�Í ®E×#Ø Ì ½�ÙEÚMÍ °

¬�±�±¶�° ²�³ ®�´ ²�³ Ä

¬°«·�¸�Å

±¶­¸�¶�É�°�¯ Ú*ÛEѶ�¼

«�¬�­Ñ

¶�¼«Ñ

Außerdem sei zum Triggers Æ ¾ folgende Priorität mit aufgenommen:µ °�¶·�¯�¶

«¶­¶°�°�¶

«¯�°¬�±�±

¶° Æ ¾·­¯�¶°¹¸�º

«·�¯�¶6»�¼ Æ�Ë Ì Á ´«

¶ µ Ã�·�°�¶Õ�Õ�Õ�Õ�Õ­» Ã�Ã�»�Ä Å ¾ Æ ®�Ü ¾ ® Ì ¾¶�¼«

È ¶±¬¼ Õ�Õ�Õ�Õ

¶�¼«

Dadurch ergibt sich die folgende Reihenfolge:Ò ¬ ¶ Í °¬�±�±

¶�°ÝĶ°«¶�¼

¬¼«¶°

­» ñ¶�¼«¶�¼ ¾ ¶

¬É�¶�¼

­» ñ¶�·�¸�Å

±¶­¸�¶�É�°�¯�ÞÏ<ÕßÍ °

¬�±�±¶°RÞ

±�à®Å±�à

á ÕßÍ °¬�±�±

¶°RÞ È °â ÕßÍ °¬�±�±

¶°RÞã° È ®�Ä�°P®¼°Der Aktivierungsgraph ändert sich:

Æ ¾

²�³ ®�´ ²�³ ¾ Æ ®�Ü ¾ ® Ì ¾

Page 140: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang D Beispiele zur Analyse der Terminierung und Konfluenz im erw. TSS 134

Das erweiterte TSS liefert zur Analyse der Terminierung dieser geänderten 3Trigger:ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�äå æ�ç�è]é#ê�ë6ì�í�î£ï�ëîñð�ò�æ�ò�ë�î�í�æ�óyôVò�î�õ�õ í�î�ö�÷�ó�ë�ø�í�ë�÷�î�ùûú�ú�úü�ê6ý�ë�ê�ù�ë�÷�ùmõò�ë6þ�ÿ�ë�ó�è�ò�ö�÷���ëò�ù��^õç�ê�ê6õò�ëyå#í�ê ø�í�ë ÷�î�í�æ�óõ�ë�î£ï#î�ò�ó�ó�ë�îWæ�ò�ö ÷�ù6ù�ë�îPð�ò�æò�ë�î�ùZúåEí�ê�óç�ý�ë6õ�ë�î���ò�ê ù�ë�� ôë�è�ö ÷�ë¹ïEî�ò�ó�ó�ëî6ç�æ�õ�ëî�ë¹ïEî�ò�ó�ó�ë�î6ç�í�ê è�ÿ�ë�ê�ë�æ���ÿ�ë�æ�æ�ë�æ��

�ë�î£ï#î�ò�ó�ó�ë�îWý�î��ç�æ�æ6õò�ë7ø�ÿ è�ó�ë�æ�õ�ë�æ¹ïEî�ò�ó�ó�ëî6ç�í�ê�è�ÿ�ë�ê�ë�æ�� �Hî�ý ��ô�î�� æ�î�����ë�î£ï#î�ò�ó�ó�ë�î�î�ý���ô�î��æî��ç�æ�æ6õò�ëqø�ÿ�è�ó�ë�æ�õ�ë�æ¹ï#î�ò�ó�ó�ëî6ç�í�ê�è�ÿ�ë�ê�ë�æ�� ��ý�î���� �Hî�ý ��ô�î�� æ�î�����ë�î£ï#î�ò�ó�ó�ë�îWó����ê�ó�����ç�æ�æ6õò�ë7ø�ÿ�è�ó�ë�æ�õ�ë�æmï#î�ò�ó�ó�ë�î6ç�í�ê è�ÿ�ë�ê�ë�æ��ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä

Bei der Analyse zur Konflunenz müssen die Mengen R1 und R2 nur noch für dieTrigger ��� ��� ��� und ��� ��� � ��� � gebildet werden:

R1 = { ��� ��� ��� },R2 = { ��� ��� � ��� � }

Der Trigger ��� ��� � ��� � kann den Trigger ��� auslösen, ��� hat aber eine niedrigerePriorität als der Trigger ��� ��� ��� , wird also der Menge R2 nicht hinzugefügt. Also sinddie Trigger ��� ��� ��� und ��� ��� � ��� � auf Kommutativität zu untersuchen. Diese Triggerkommutieren nicht, da die Bedingung 2 des Lemmas 1 nicht erfüllt ist, da der Trigger��� ��� ��� etwas löscht, worauf der Trigger ��� ��� � ��� � mit einer Änderung reagieren könnte,also der Trigger ��� ��� ��� den Trigger ��� ��� � � � � „untriggern“ könnte, oder auch weil gilt:

��� ��� � ��� � ∈ Can-Untrigger(Performs( ��� ��� ��� ))Vom erweiterten TSS wird geliefert:�ò�ë � ÿî�ç�í�ê�ê�ë�ù�ì�í�æ�ó7ø�í�ëî"!�ÿ�æ ø�è�í�ë�æ�ì�ò�ê�ùyï�ë�îPðVò�æò�ëî�í�æ�óªú

�ò�ë�ê�ë � ÿî�ç�í�ê�ê�ë�ù�ì�í�æ�ó�ò�ê�ùmæò�ö�÷�ù�ë�î�ø�í�ë�è�è�ù�ú�ò�ëyåæç�è]éEê�ë�ì í�î"!�ÿ�æ�ø�è�í�ë�æ�ì�ô�ò�î�õ7ù�î�ÿ�ù�ì�õ�ë�ð�õ í�î�ö ÷�ó�ë ø�í�ë�÷�î�ù�úä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�äå æ�ç�è]é#ê�ë6õ�ë�î�!�ÿ�æ ø�è�í�ë�æ�ìyôVò�î�õ6õ í�î�ö ÷�ó�ë�ø�í�ë�÷�î�ù�ú�ú�ú

� ò�è�õ�í�æ�ó6õ�ë�îWþ�ë�æ�ó�ë�æ ��# í�æ�õ ��$ ø�í�ëîyõò�ëmï#î�ò�ó�ó�ë�î%�Hî�ý ��ô�î�� æ�î�� í�æ�õ&��ó����ê�ó������þ�ë�æ�ó�ë ��# ��Hî�ý ��ôVî�� æ�î�� í�æ�õ�õ�ò�ë6þ�ë�æ�ó�ë ��$ ���ó���� ê�ó����!�ÿ�ð�ðEí�ù�ç�ù�ò'��ò�ù�ç�ë�ù�ê�ù�ë�ê�ùmõ�ë�î£ï#î�ò�ó�ó�ë�î�ç�í�ê6õ�ë�æ6þ�ë�æ�ó�ë�æ ��# í�æ�õ ��$ �ïEî�ò�ó�ó�ëî¹è�ÿ�ë�ê�ö ÷�ùmë�ù*ô�ç�ê�� ô ÿî�ç�í�ø�ë�ò�æ�ç�æ�õ�ëî�ëî¡ïEî�ò�ó�ó�ëîð�ò�ù�ë�ò�æ�ë�ð)( *�õ�ç�ù�ë�ÿ�õ�ë�î�+Pæ�ê�ë�î�ùqî�ë�ç�ó�ò�ëî�ù�÷�ç�ë ù�ù�ëªúïEî�ò�ó�ó�ëîyõ�ë�îWþ�ë�æ�ó�ë�æ ��# í�æ�õ ��$ êò�æ�õ6æò�ö�÷�ù,��ÿ�ð�ð#í�ù�ç�ù�ò���úä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�äå æ�ç�è]é#ê�ë6ì�í�î�!�ÿ�æ ø�è�í�ë�æ�ìq÷�ç�ùmëî�ó�ë�ý�ë�æ��[õ�ç�ê�ê6õ�ò�ëïEî�ò�ó�ó�ëîyæò�ö�÷�ù,��ÿ�æ�ø�è�í�ë�æ�ùmêò�æ�õªúä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�ä�äå ý�ó�ë�ðë�è�õ�ë�ùmý�ë�ò.-î�ç�ö�è�ëåEè�è�ë��ë�î�ì�ÿ�ë�ó�ë�î�ù�ë�æ¹ïEî�ò�ó�ó�ëî ôEí�î�õ�ë�æ�ò�æ�ê ù�ç�è�è�ò�ëî�ùZú

Page 141: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang D Beispiele zur Analyse der Terminierung und Konfluenz im erw. TSS 135

Beispiel 3:

Bei den obigen Beispielen bestanden die Mengen R1 und R2 bei der Analyse zurKonfluenz jeweils nur aus den Triggern ri und rj (Schreibweise wieder wie imLemma 4). D. h. es ist noch ein Beispiel anzugeben, indem die Mengen R1 und R2

jeweils aus mehr als einem Trigger bestehen. Dazu wurden 6 Trigger definiert, diejeweils auf eine Änderung in einer Tabelle reagierten. Diese Trigger sind sehreinfach geschrieben (ohne Cursor etc.), da in diesem Beispiel vor allem nur auf dieBildung der Mengen R1 und R2 eingegangen werden soll.

Einfachheitshalber wurden 6 Tabellen mit je 2 Spalten angelegt:/10�213545264�3'798 2":5; <>=@?BA>C�DE D F�; G':�?�H.I�J>K17�210 EMLONQP 0�R�KS3�0UTWV�2>TYX

D�F�;�G�:�?5Z�I9J>K97�210 E�LSN�N�[

Die Tabellen :5;�<\=9]5^ ?1A X,:5; <>=�_�`�?BA�X,:a;�<>=1bSA�?5`�X�:a;�<>=Sc5d�?aC�c und :5; <>=�D�?'e9f'D haben dieselbenSpalten wie die Tabelle :5;�<\=@?1A\C'D .Die zugehörigen Trigger:

Der Trigger :1`�AUg5=@?BA>C�D soll vor den Triggern :1` Ahga=9]5^ ?1A , :1`�AUg5= _�`�?BA und :1`�AUg5=Sc5d�?aC�causgeführt werden, und kann die Trigger :1`�AUg5=9]a^�?BA , :1`�AUg5= _�`�?BA , :1` Ahg5=1bSA�?5` , :1` Ahga=@c5d�?5C�c und:1`�AUg5=�D�?'e9f'D auslösen:

/10�213a4 2i�29j 210�0'2�i64�0�R'k�k�210l:B`�Ahga=@?BA>C'D35j�4 2B0�J P iB354 2m�I":a;�<>=S?1A\C'Dj m98�85m�n9o":B`�Ahga=9]5^ ?1Ap:1` Ahg5= _�`�?1Ap:1` Ahg5=Sc5d�?aC�c.2�I�i7�2�k1R�I

J P i13a4 2":5; <>=9]a^�?1Aqo�2�4.D�F�;�G': ?�HlrD�F�; G':�?�H.s�H [J P i13a4 2":5; <>=�_�`�?1Aqo�2�4.D�F�;�G': ?�HlrD�F�; G':�?�H.s�H [J P i13a4 2":5; <>=9bOA'?5`�o�2�4.D�F�;�G': ?�HlrD�F�; G':�?�H.s�H [J P i13a4 2":5; <>=@cad�?5C�c.o�2�4.D F�;�G�:�?�HlrD�F�;�G': ?�H.s�H [J P i13a4 2":5; <>=�D ?'e�f�D,o�2�4.D F�;�G�:�?�HlrD�F�;�G': ?�H.s�H [_�<5t5Da=9u�d�:�Fad':wvUF5d':a=�G A>C�? E�x : 0�R�k�k�2B0l:1`�AUg5=@?BA>C�D�nSR�0'i�3aJ o�k�2�j�J 2�y�054 x\N�[

2�I�i [

Der Trigger :B`�Ahga=9]a^�?1A soll nach dem Trigger :1`�AUg5=S?1A>C�D und vor dem Trigger :1`�AUg5=Sc5d�?aC�causgeführt werden, und kann den Trigger :1` Ahg5= _�`�?1A auslösen:

/10�213a4 2i�29j 210�0'2�i64�0�R'k�k�210l:B`�Ahga=9]a^�?1A35j�4 2B0�J P iB354 2m�I":a;�<>=1]5^ ?1AP 0�2�/�2�i�2�o":1`�AUg5=@?BA>C�Dz2�I�ij m98�85m�n9o":B`�Ahga=@c5d�?5C�c{2�I�i7�2�k1R�I

J P i13a4 2":5; <>=�_�`�?1Aqo�2�4.D�F�;�G': ?�HlrD�F�; G':�?�H.s�H_�<5t5Da=9u�d�:�Fad':wvUF5d':a=�G A>C�? E�x : 0�R�k�k�2B0l:1`�AUg5=9]a^�?BA|nSR�0'i�3aJ o�k�2�j�J 2�y�054 x\N�[

2�I�i [

Der Trigger :1`�AUg5=�_�`�?BA soll nach den Triggern :1`�AUg5=1]5^�?BA und :1` Ahg5=1bSA�?5` ausgeführtwerden, und kann den Trigger :1` Ahga=9bSA�?5` auslösen:

/10�213a4 2i�29j 210�0'2�i64�0�R'k�k�210l:B`�Ahga=�_�`�?1A35j�4 2B0�J P iB354 2m�I":a;�<>= _�`�?1AP 0�2�/�2�i�2�o":1`�AUg5=9bOA'?a`{:B`�Ahga=9]a^�?1Aq2�I�i

Page 142: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang D Beispiele zur Analyse der Terminierung und Konfluenz im erw. TSS 136

}�~��1���� ���1�a� ~"�5� �>�9�O�'�5����~ �.��� ���'� ���l� ��� � �'�����.������ �5� � �9����� � �'�w� � �'�a��� �>���B��� � ¡�������~B¡l�1���U¢5� � ���B�|£S��¡ ���a� ����~�¤ � ~�¥�¡ � �\¦��~�� � �

Der Trigger �1���U¢5�1�S�'�a�

kann die Trigger �1� �h¢5�S§5���5��§

und �1���U¢5� � �'¨9© � auslösen:

ª ¡�~ �a� ~ � ~9¤ ~1¡�¡'~ �6� ¡��'����~1¡l�B���h¢a�9�O�'�5�� ¤ � ~B¡ �5���B�5� ~«��"�a���>�1�S���5�}�~��1���

� �5� � �9����� � �'�w� � �'�a��� �>���B��� � ¡�������~B¡l�1���U¢5�9�O�'�a�¬£S��¡ ���a� ����~�¤ � ~�¥�¡ � �\¦��� ���1�a� ~"�5� �>�@§a���5��§.��~ �.� � ���������l� ��� ���'� ���.������ ���1�a� ~"�5� �>� � �'¨�© � ��~ �.� � ���������l� ��� ���'� ���.�����

~�� � �

Der Trigger �1� �h¢a�@§5���5��§

soll nach den Triggern �1���U¢5�1­5®��B�

und�1���U¢5� � ���B�

ausgeführtwerden, und löst keine weiteren Trigger aus:

ª ¡�~ �a� ~ � ~9¤ ~1¡�¡'~ �6� ¡��'����~1¡l�B���h¢a�@§a���5��§� ¤ � ~B¡ �5���B�5� ~«��"�a���>�S§5���5��§� ¡�~ ª ~ � ~��"�1���U¢5�9­a®��B�¯�B���h¢a� � ���1�q~�� �}�~��1���

� �5� � �9����� � �'�w� � �'�a��� �>���B��� � ¡�������~B¡l�1���U¢5�@§a���a��§°£@��¡ ���5� ����~9¤ � ~9¥�¡ � �>¦ �~�� � �

Der Trigger �1���U¢5� � �'¨9© � soll nach den Triggern

�1� �h¢a�9­5® �1� und

�1���U¢5�1�S�'�a� ausgeführt

werden, und kann den Trigger �1� �h¢a�@�1�\� � auslösen:

ª ¡�~ �a� ~ � ~9¤ ~1¡�¡'~ �6� ¡��'����~1¡l�B���h¢a� � �'¨�© �� ¤ � ~B¡ �5���B�5� ~«��"�a���>� � ��¨�© �� ¡�~ ª ~ � ~��"�1���U¢5�9�O�'�a�{�B���h¢a�9­a®��1�q~�� �}�~��1���� ���1�a� ~"�5� �>�@�B�>� � ��~ �.��� ���'� ���l� ��� � �'�����.�����

� �5� � �9����� � �'�w� � �'�a��� �>���B��� � ¡�������~B¡l�1���U¢5� � �'¨9© � £@��¡ ���5� ����~9¤ � ~9¥�¡ � �>¦ �~�� � �

Das Programm legt die folgende Reihenfolge fest:� ��~�� ¡�������~B¡q£1~1¡ � ~������ � ~1¡"¤ «9± ��~�� � ~��6� ~1�a¥ ~���¤ «9± ��~ �a� ����~�¤ � ~�¥�¡ ��²���³��¡��'����~1¡ ²|� ¡������9´B�'~B¡µ��³��¡��'����~1¡ ²|� ¡������9~B�'���¶��³��¡��'����~1¡ ²|� ¡������9· £9~B�¸w�³��¡��'����~1¡ ²|� ¡������ � ¡'~B�¹ �³��¡��'����~1¡ ²|� ¡�������¤ � ~���¤º��³��¡��'����~1¡ ²|� ¡������9��~ ª ¥ �Der zugehörige Aktivierungsgraph:

Page 143: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang D Beispiele zur Analyse der Terminierung und Konfluenz im erw. TSS 137

»1¼�½U¾5¿9ÀaÁ�ÂB½ »1¼ ½h¾a¿�Ã�¼�Â1½

»1¼�½U¾5¿SÂ1½>Ä�Å

»B¼�½U¾5¿�Å Â'Æ9Ç'Å»1¼�½U¾5¿@ÈaÉ�ÂaÄ�È

»B¼�½h¾a¿9ÊO½'Â5¼

Vom Programm wird geliefert:

Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�ËÌ9ÍBÎ5ÏMÐ Ñ�ÒÓ�Ô�Õ¬»�Ò1Õ�Ö@×'ÍB×'ÒBÕ5Ô Í�Ø.ÙS×�Õ�ÚÛÚ9Ô�Õ�Ü�Ý Ø�Ò�Þ�Ô5Ò�Ý�Õ5ßáà�à�àÂ'Ñâ�Ò�Ñ�ß5Ò�Ý�ß�Ú1×�Òã�ä�Ò�Ø�Ï�×'Ü�Ý�å'Ò1×aß�æçÚ1Î�Ñ�ÑÚ1×�Ò.Ì Ô Ñ9Þ�Ô Ò9Ý�Õ5Ô5Í�ØÚ�ÒBÕ¬» Õ�×�Ø�Ø�ÒBÕ{ÍB×'Ü9Ý�ßß ÒBÕ�Ö@×�Í1×'ÒBÕ5ßèàÌ�Ô5Ñ�Ø1Î�â�ÒÚ�ÒBÕ�é�×'Ñ9ß Ò�æêÙ1Ò�Ï Ü9Ý Ò"»�Õ�×'Ø�Ø�Ò1ÕÎ'Í�Ú�Ò1Õ�Ò"»�Õ�×�Ø�Ø�ÒBÕÎ5Ô Ñ9Ï ä�Ò�Ñ�Ò�Í�å�ä�Ò�Í�Í�Ò�Í�ëà ÒBÕ¬» Õ�×�Ø�Ø�ÒBÕ�ß�Õ�×�Ø�¿9ÒB×'Í�Ñ�å�Î'Í�ÍÚB×'Ò6Þ ä9Ï Ø�Ò�Í�Ú�Ò�Í"»�Õ�×�Ø�Ø�ÒBÕÎ5Ô Ñ9Ï ä�Ò�Ñ�Ò�Í�ë ìíß�Õ�×�Ø�¿1Ó�Ù9ÒB×�ì�æìîß�Õ�×'Ø ¿9ÚBÕ'Ò1×�ì�æ ìíß�Õ�×�Ø�¿1ï1×'ÒBÕ�ì�æ ìîß�Õ�×'Ø ¿�Þ�Ô5Ò�Í�Þèì�æ ìíß�Õ�×�Ø�¿1Ñ�Ò�Ü9Ý Ñ�ì�æà ÒBÕ¬» Õ�×�Ø�Ø�ÒBÕ�ß�Õ�×�Ø�¿9Ó Ù9ÒB×Ûå�Î'Í�ÍÚB×'Ò6Þ ä9Ï Ø�Ò�Í�Ú�Ò�Í"»�Õ�×�Ø�Ø�ÒBÕÎ5Ô Ñ9Ï ä�Ò�Ñ�Ò�Í�ë ìíß�Õ�×�Ø�¿1Ú1Õ'ÒB×�ì�æà ÒBÕ¬» Õ�×�Ø�Ø�ÒBÕ�ß�Õ�×�Ø�¿9ÚBÕ'ÒB×Ûå�Î'Í�ÍÚB×'Ò6Þ ä9Ï Ø�Ò�Í�Ú�Ò�Í"»�Õ�×�Ø�Ø�ÒBÕÎ5Ô Ñ9Ï ä�Ò�Ñ�Ò�Í�ë ìíß�Õ�×�Ø�¿1ï1×'ÒBÕ�ì�æà ÒBÕ¬» Õ�×�Ø�Ø�ÒBÕ�ß�Õ�×�Ø�¿9ïB×'ÒBÕÛå�Î'Í�ÍÚB×'Ò6Þ ä9Ï Ø�Ò�Í�Ú�Ò�Í"»�Õ�×�Ø�Ø�ÒBÕÎ5Ô Ñ9Ï ä�Ò�Ñ�Ò�Í�ë ìíß�Õ�×�Ø�¿ Þ�Ô Ò�Í�Þ�ì�æìîß�Õ�×'Ø ¿9Ñ�Ò�Ü�Ý5Ñ�ì�æà ÒBÕ¬» Õ�×�Ø�Ø�ÒBÕ�ß�Õ�×�Ø�¿�Þ�Ô Ò�Í�Þ,å�Î'Í�ÍÚ1×'Ò6Þ5ä�Ï Ø�Ò�Í�Ú�Ò�Í"»�Õ�×'Ø�Ø�Ò1ÕÎ5Ô5Ñ�Ï5ä�Ò�Ñ�Ò�Í�ëà ÒBÕ¬» Õ�×�Ø�Ø�ÒBÕ�ß�Õ�×�Ø�¿9Ñ�Ò�Ü9Ý Ñ�å�Î'Í�ÍÚ1×'Ò6Þ5ä�Ï Ø�Ò�Í�Ú�Ò�Í"»�Õ�×'Ø�Ø�Ò1ÕÎ5Ô5Ñ�Ï5ä�Ò�Ñ�Ò�Í�ë ìîß�Õ�×'Ø ¿9Ò1×�Í�Ñ�ì�æË�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë

Die zugehörige Konfluenzanalyse vom Programm:Ã�×�ÒÛÊ�ä1Õ�Î5Ô Ñ�Ñ�Ò�ß5Ó�Ô5Í�Ø6Þ�Ô5Ò1Õ"ð ä�Í9Þ�Ï�Ô Ò�Í�Ó�×'Ñ�ß.»�ÒBÕ�ÖS×'Í1×�Ò1Õ5Ô5Í�Ø�àÃ�×�Ò�Ñ�ÒÊ�ä1Õ�ÎaÔ Ñ�Ñ�Ò�ß5Ó�Ô Í�Ø�×'Ñ�ß�Í1×�Ü�Ý�ßñÒBÕ5Þ�Ô Ò�Ï�Ï�ß�àÃ�×�Ò.Ì1Í1ÎaÏMÐ�Ñ�ÒÛÓ9Ô�Õ"ð ä�Í�Þ�Ï�Ô Ò�Í�ÓñÙ@×�Õ'Ú6ß�Õ�ä�ß Ó�Ú�Ò�Ö�Ú9Ô�Õ'Ü9Ý Ø�Ò9Þ�Ô5Ò�Ý�Õaß�àË�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�Ë�ËÌ9ÍBÎ5ÏMÐ Ñ�ÒÚ�ÒBÕ�ð5ä�Í9Þ�Ï�Ô5Ò�Í�Ó.ÙS×�Õ'ÚÚ9Ô�Õ'Ü9Ý Ø�Ò�Þ�Ô5Ò�Ý�Õaß�à�à�à

D.h. folgende Triggerpaare sind ungeordnet:»1¼ ½h¾5¿SÂ1½\Ä'Åwò³»1¼ ½h¾a¿9ÊS½�Â5¼»1¼ ½h¾5¿SÂ1½\Ä'Åwò³»1¼ ½h¾a¿�Å�Â�Æ�Ç�Å»1¼ ½h¾5¿1À5Á Â1½�ò³»1¼ ½h¾a¿9ÊS½�Â5¼»1¼ ½h¾5¿ Ã�¼�Â1½�ò³»1¼ ½h¾a¿�Å�Â�Æ�Ç�Å»1¼ ½h¾5¿1ÊS½�Â5¼�ò³»1¼ ½h¾a¿@È5É�Â5Ä�È»1¼ ½h¾5¿SÈ5É�Â5Ä�È�òó»B¼�½U¾5¿�Å Â'Æ9Ç'Å

Für diese 6 Paare von Triggern müssen die Mengen R1 und R2 gebildet werden:

R ô = {»1¼ ½h¾a¿@Â1½\Ä'Å

}R2 = {

»1¼�½U¾5¿1ÊS½'Âa¼}

Der Trigger »B¼�½h¾a¿@ÂB½>Ä'Å

kann alle anderen angegeben Trigger auslösen, der Menge R ôwerden also die Trigger hinzugefügt, die eine höhere Priorität haben als der Trigger»1¼�½U¾5¿1ÊS½'Âa¼

, jedoch hat keiner dieser Trigger eine höhere Priorität als »1¼�½U¾5¿9ÊO½'Âa¼

. Der

Page 144: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang D Beispiele zur Analyse der Terminierung und Konfluenz im erw. TSS 138

Trigger õBö�÷høaù9úO÷'û5ö kann die Trigger õ1ö ÷høaù@ü5ý�û5þ�ü und õ1ö ÷hø5ù�ÿ�û����'ÿ auslösen, õ1ö�÷Uø5ù@üaý�ûaþ�ü undõ1ö�÷Uø5ù�ÿ�û����'ÿ haben aber keine höhere Priorität als õBö�÷høaù@ûB÷>þ'ÿ , werden also der Menge R2

nicht hinzugefügt. Die Mengen R � und R2 wurden nicht geändert, daher sind dieTrigger õ1ö�÷Uø5ùSû1÷>þ�ÿ und õ1ö ÷høaù9úS÷�û5ö auf Kommutativität zu untersuchen: Die Trigger sindnicht kommutativ, da der Trigger õ1ö�÷Uø5ùSû1÷>þ�ÿ den Trigger õ1ö ÷høaù9úS÷�û5ö auslösen kann.

Die Analyse vom Programm liefert:

��� ������������������������� ö�� ����� ö���� ����������� õ ����������� �"!����� ù ������#$�%�����&�"!����� ù�' �����(��)��������� ö�� )��"!����� ù ������#*�+�����������,��������� ö�� )��-!����� ù�' �����(�. / 0�01��!2�!� ' ��!2���!�#�! ��#�!3����� õ �����������,2�� #������������������ ö�� ����� ö�� )õ �����������4!����� ù ������#65�2���������� õ ������������!����� ù�' �����72�� #��/���#����*8+��2�9 ���4#������7����� õ �����������3����:�9�!5�/ 0�01��!2�!� 'õ �����������4!����� ù ������#;� ���7!������ ù�' ������2�������������������#��� <���� ÿ= 2��! ���?>�>�>õ �����������4!����� ù ������#;� ���7!������ ù�' ������2�������������������#��� <���� ÿ= 2��! ���?>�>�>õ ����������������������������� ö�� ����� ö�� #�����������:�9�!75�/�0�0@��!�2�!� '$A

Dann sind die Mengen R1 und R2 für die Trigger õ1ö�÷Uø5ùSû1÷>þ�ÿ und õ1ö ÷høaù�ÿ�û�����ÿ zu bilden:

R � = { õ1ö ÷høaù@û1÷\þ'ÿ }R2 = { õ1ö�÷Uø5ù�ÿ�û����'ÿCB

Zur Menge R � werden die Trigger õ1ö ÷hø5ù�D�E û1÷ und õ1ö�÷Uø5ù1úS÷'ûaö hinzugefügt, da sie vomTrigger õ1ö ÷høaù@û1÷\þ'ÿ ausgelöst werden können, und eine höhere Priorität als der Triggerõ1ö�÷Uø5ù�ÿ�û����'ÿ haben.

R � = { õ1ö ÷høaù@û1÷\þ'ÿ 8 õBö�÷høaù�D�E�û1÷ 8 õBö�÷Uø5ù9úO÷'ûaö }Der Trigger õ1ö ÷høaù@û1÷\þ'ÿ wird vom Trigger õ1ö�÷Uø5ù�ÿ û����'ÿ ausgelöst, darf aber nicht derMenge R2 hinzugefügt werden, da gilt: ri = õ1ö ÷høaù@û1÷\þ'ÿ .Der Trigger õ1ö ÷hø5ù�D�E û1÷ kann den Trigger õ1ö�÷Uø5ù@F�ö�ûB÷ auslösen, dieser Trigger hat aberkeine höhere Priorität als der Trigger õ1ö�÷Uø5ù�ÿ û����'ÿ , wird daher der Menge R � nichthinzugefügt.Die Menge R2 ändert sich wieder nicht. Die Mengen R � und R2 ändern sich also nichtmehr, daher müssen für jedes Paar die Trigger der Mengen R � und R2 kommutieren.Dies ist nicht der Fall, da u.a. der Trigger õ1ö�÷Uø5ù@ûB÷>þ�ÿ wieder alle anderen Triggerauslösen kann. Durch das Programm wird geliefert:��� ������������������������� ö�� ����� ö���� ����������� õ ����������� �"!����� ù ������#$�%�����&�"!����� ù #���:�9 #*��)��������� ö�� )��"!����� ù ������#*� �"!����� ù�' �����G� �"!����� ù�H�I ���(�%�����������,��������� ö�� )��-!����� ù #���:�9 #$�. / 0�01��!2�!� ' ��!2���!�#�! ��#�!3����� õ �����������,2�� #������������������ ö�� ����� ö�� )

õ �����������J!������ ù ������#K5�2����L����� õ �����������J!������ ù #���:�9�#M2���#� /���#����$8N��2�9����J#������O����� õ ���������������:�9�!75�/�0�0@��!2�!� 'õ �����������J!������ ù�' �����P5�2����L����� õ �����������J!������ ù #���:�9�#M2���#� /���#����$8N��2�9����J#������O����� õ ���������������:�9�!75�/�0�0@��!2�!� 'õ ����������������������������� ö�� ����� ö�� #�����������:�9�!75�/�0�0@��!�2�!� '$A

Bildung der Mengen R1 und R2 für die Trigger õ1ö�÷Uø5ù�D�E�ûB÷ und õ1ö ÷hø5ù1úS÷�û5ö )R � = { õ1ö ÷høaù�D�E û1÷�BR2 = { õ1ö�÷Uø5ù1úS÷'ûaö }

Der Trigger õ1ö ÷hø5ù�D�E û1÷ kann den Trigger õ1ö ÷hø5ù@F�ö�û1÷ auslösen, welcher aber eineniedriegere Priorität hat als der Trigger õBö�÷høaù9úO÷'û5ö . Der Trigger õ1ö�÷Uø5ù9úO÷'ûaö kann dieTrigger õ1ö�÷Uø5ùSü5ý�ûaþ�ü und õ1ö ÷hø5ù�ÿ�û����'ÿ auslösen. Die Trigger õ1ö ÷høaù@ü5ý�û5þ�ü und õ1ö�÷Uø5ù�ÿ�û����'ÿhaben eine niedrigere Priorität als der Trigger õ1ö ÷hø5ù�D�E û1÷ , die Mengen R1 und R2

Page 145: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang D Beispiele zur Analyse der Terminierung und Konfluenz im erw. TSS 139

wurden also nicht weiter verändert, daher sind die Trigger Q�R@SUT�V�W�X@Y�S und Q�R1SZT�V�[CS�Y�R aufKommutativität zu untersuchen:

Die Trigger TRIG_ZWEI und TRIG_VIER sind kommutativ: Sie ändern wederdieselben Spalten, noch löscht der eine Trigger etwas, worauf der andere reagiert,und sie lösen sich nicht gegenseitig aus. Das Programm:

\]�^ _�`�a�b�_�c�d�e�c�a�b�c�a R�f `�a�_ R�g�h `�c�d�_�]�c Q d�]�b�b�c�d i"jd�]�b V�k�l c�](i%`�a�_&i"jd�]�b V�m ]�c�d(i�ne�c�a�b�c R�f n�i"jd�]�b V�k�l c�]Gi+`�a�_�_�]�c,e�c�a�b�c R�g n�i-jd�]�b V�m ]�c�d(io p q�q1`�jr�j] m ]�jr�c�j�s�j c�s�j3_�c�d Q d�]�b�b�c�d,r�` s�_�c�a�e�c�a�b�c�a R�f `�a�_ R�g nQ d�]�b�b�c�d�_�c�d�e�c�a�b�c�a R�f `�a�_ R�g s�]�a�_6t�p q�q1`�jr�j] m*u

Bleiben noch die letzten drei Triggerpaare zu untersuchen:

\]�^ _�`�a�b�_�c�d�e�c�a�b�c�a R�f `�a�_ R�g�h `�c�d�_�]�c Q d�]�b�b�c�d i"jd�]�b V _�d�c�](i%`�a�_&i"jd�]�b V s�c�v�w s*i�ne�c�a�b�c Rf nOi-jd�]�b V _�d�c�](i i"j�d�]�b V�m ]�c�dGix`�a�_y_�]�cye�c�a�b�c R�g nOi-jd�]�b V s�c�v�w s*i i-jd�]�b V c�]�a�s$ii"j�d�]�b V�m ]�c�dGi i"j�d�]�b V�k l c�]Gio p q�q1`�jr�j] m ]�jr�c�j�s�j c�s�j3_�c�d Q d�]�b�b�c�d,r�` s�_�c�a�e�c�a�b�c�a R�f `�a�_ R�g nQ d�]�b�b�c�dJj�d�]�b V�m ]�c�dPt�r�a�aL_�c�a Q d�]�b�b�c�dJj�d�]�b V s�c�v�w�sMr�`�s�^ p�c�s�c�a$zN_�r�w�c�dJs�]�a�_O_�]�c Q d�]�b�b�c�da�]�v�w�j7t�p�q�q@`�jr�j] mQ d�]�b�b�c�d�_�c�d�e�c�a�b�c�a R�f `�a�_ R�g s�]�a�_�a�]�v�w�j7t�p�q�q@`�j�r�j] m$u\]�^ _�`�a�b�_�c�d�e�c�a�b�c�a R�f `�a�_ R�g�h `�c�d�_�]�c Q d�]�b�b�c�d i"jd�]�b V�m ]�c�d(i%`�a�_&i"jd�]�b V1h `�c�a h i�ne�c�a�b�c R�f n�i"jd�]�b V�m ]�c�dGi+`�a�_�_�]�c,e�c�a�b�c R�g n�i-jd�]�b V@h ` c�a h io p q�q1`�jr�j] m ]�jr�c�j�s�j c�s�j3_�c�d Q d�]�b�b�c�d,r�` s�_�c�a�e�c�a�b�c�a R�f `�a�_ R�g nQ d�]�b�b�c�dJj�d�]�b V�m ]�c�dPt�r�a�aL_�c�a Q d�]�b�b�c�dJj�d�]�b V1h ` c�a h r�`�s�^ p�c�s�c�a$zN_�r�w�c�dJs�]�a�_O_�]�c Q d�]�b�b�c�da�]�v�w�j7t�p�q�q@`�jr�j] mQ d�]�b�b�c�d�_�c�d�e�c�a�b�c�a R�f `�a�_ R�g s�]�a�_�a�]�v�w�j7t�p�q�q@`�j�r�j] m$u\]�^ _�`�a�b�_�c�d�e�c�a�b�c�a R�f `�a�_ R�g�h `�c�d�_�]�c Q d�]�b�b�c�d i"jd�]�b V@h `�c�a h i%` a�_&i"j�d�]�b V s�c�v�w�s$i�ne�c�a�b�c R�f nJi"jd�]�b V1h `�c�a h i{` a�_J_�]�cJe�c�a�b�c R�g nJi"jd�]�b V s�c�v�w s*i i-jd�]�b V c�]�a�s$i i-jd�]�b V _�d�c�](ii"j�d�]�b V�k l c�]Gio p q�q1`�jr�j] m ]�jr�c�j�s�j c�s�j3_�c�d Q d�]�b�b�c�d,r�` s�_�c�a�e�c�a�b�c�a R�f `�a�_ R�g nQ d�]�b�b�c�d�_�c�d�e�c�a�b�c�a R�f `�a�_ R�g s�]�a�_6t�p q�q1`�jr�j] m*u|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|}�a�r�^�~@s�c k `�d3o�p�a h ^�`�c�a k w�r�j3c�d�b�c���c�a*z�_�r�s�s�_�]�cQ d�]�b�b�c�d�a�]�v�w�j7t�p�a h ^�`�c�a�j3s�]�a�_ u|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|}���b�c�q�c�^�_�c�j3��c�]���d�r�v�^�c}1^�^ c m c�d k p�c�b�c�d�j�c�a Q d�]�b�b�c�d l `�d�_�c�a6]�a�s�jr�^�^]�c�d�j u

Page 146: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

140

ANHANG E:

Beispiel von Triggern, die sichgegenseitig aufrufen

Zum Testen des erweiterten TSS wurden 2 verzögerte Trigger auf, der bereits imAnhang A verwendeten Tabelle �1���1�����1�������1� , definiert, die sich gegenseitig aufrufen.

Der Trigger ������� reagiert auf eine Einfügung in die Tabelle �1���1�����1�������1� und löscht dieTupel in der Tabelle, die eine Angestelltennummer ( ��� ) > 100 haben:

��� ��������������� ��� ���;� � ������� � ������������ � � ������� � �3�����1���1�����1�������@�� ����������7������� � ������;�������

����� ��� �;� � �����1���@�����1�������1���@� � � ��� �� 6¡�¢�¢¤£¥�¦�§ ��¨�©�ª��1«�ª��­¬Z«�ª���¨1�@®����¯1°±� � ������� � ���������C� � �²��³ ��������³ ��� � �x°�´ £�����²��� £����� £

Der Trigger µ ����� reagiert auf diese Löschung und fügt ein Tupel mit einerAngestelltennummer 200 ein.

��� ��������������� ��� ���;� � ������� � µ����������� � � ����� ��� �������1���1�����1�������@�� ����������3����� ��������7��� ���

������� � �7����� ���1���@�����1�������1��¶�����³����·¯�¸ ¢�¢º¹"»�»º¹½¼�¢ ´ £¥�¦�§ ��¨�©�ª��1«�ª��­¬Z«�ª���¨1�@®����¯1°±� � ������� � µ������¾�C� � �²��³ ��������³ ��� � �¤°�´ £�����²��� £����� £

Page 147: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang E: Beispiel von Triggern, die sich gegenseitig aufrufen 141

Der Ablauf des erweiterten TSS:

Nach Aufruf des Programms ¿1À�Á�Â�Â�Ã�À wird der Benutzer nach dem Benutzernamengefragt. Hier ist Ä�Å�Æ�¿�¿ einzugeben. Das zu diesem Benutzer zugehörige Passwort ist¿(ÇUÈ@É�Ê . Danach ist der Name der Datei einzugeben, in der die verzögerten Trigger Ã�Á�Ë�Ìund Í�Î�Ã�Á stehen. Die Trigger werden nun installiert. Danach meldet das Programm:Ï Á�Ã3¿@À�Á�Â�Â�Ã�À¾Î�Ã�À�Ð�Ã�Ë6Á�Ë,Ð�Ã�À4Ñ Ò�Ó Â�Ã�Ë�Ð�Ã�Ë;Ê Ã�Á�Ô Ã�Ë�Ñ Ò�Ó Â�Ã6Õ�Ö Ì�Â�Ã�Ñ�Ö Ã�Ô�À�׺ØÙ(Ú ¿1À�Á�Â�Â�Ã�ÀGØ�Í Î�Ã�ÁÛºÚ ¿1À�Á�Â�Â�Ã�ÀGØ�Ã�Á�Ë�Ì

Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�ÜÝ Ë�Õ�Ó�Þ@Ì�Ã�Í�Ö�Àß¿�Ã�ÀáàâÁ�Ë�Á�Ã�À�Ö Ë�Â�ÎCÁ�À�Ð,Ð�ÖÀ�ã�Ô Â�Ã�Ñ�Ö�Ã�Ô�À�× Ú�Ú�ÚÉ�Ì�ä�Ã�Ì�×�Ã�Ô�×3Ð�Á�Ã�å�Ò�Ã�Â�Ó�Á�ã�Ô�æ�Ã�Á�׺çèÐ�Õ�Ì�Ì�Ð�Á�Ã Ý Ö Ì�Ñ�Ö Ã�ÔÀ�Ö�Ë�ÂÐ�Ã�Àß¿@À�Á�Â�Â�Ã�À�Ë�Á�ã�Ô�×�× Ã�ÀéàâÁ�Ë�Á�Ã�À�× ÚÝ Ö�Ì�Â�Õ�ä�Ã�Ð�Ã�À3ê�Á�Ì�× Ã$çëÎ�Ã�Ó ã�Ô Ã4¿1À�Á�Â�Â�Ã�À�Õ�Ë�Ð�Ã�À�Ã4¿1À�Á�Â�Â�Ã�À�Õ�Ö Ì�Ó Ò�Ã�Ì�Ã�˲æ�Ò�Ã�Ë�Ë�Ã�Ë$ØÏ Ã�Àß¿@À�Á�Â�Â�Ã�À�Ã�Á�Ë�̲æ�Õ�Ë�Ë,Ð�Á�Ã;Ñ Ò�Ó Â�Ã�Ë�Ð�Ã�Ë4¿1À�Á�Â�Â�Ã�À�Õ�Ö�Ì�Ó Ò�Ã�Ì�Ã�Ë$Ø ì½Í�Î�Ã�Á(ì�çÏ Ã�Àß¿@À�Á�Â�Â�Ã�À�Í Î�Ã�Á,æ�Õ�Ë�Ë,Ð�Á�Ã;Ñ Ò�Ó Â�Ã�Ë�Ð�Ã�Ë4¿1À�Á�Â�Â�Ã�À�Õ�Ö�Ì�Ó Ò�Ã�Ì�Ã�Ë$Ø ì½Ã�Á�Ë�Ì$ì�çÜ�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�ÜÏ Á�Ã,í�Ò�À�Õ�Ö Ì�Ì�Ã�×�Í�Ö�Ë�Â;Ñ�Ö�Ã�À4î Ò�Ë�Ñ�Ó�Ö Ã�Ë�Í6Á�Ì�×�¿Ã�ÀéàCÁ�Ë�Á�Ã�À�Ö�Ë� ÚÏ Á�Ã�Ì�Ã�í�Ò�À�Õ�Ö Ì�Ì�Ã�×�Í�Ö Ë�Â6Á�Ì�×3Ë�Á�ã�Ô�×�Ã�À�Ñ�Ö Ã�Ó�Ó�× ÚÏ Á�Ã Ý Ë�Õ�Ó�Þ1Ì�Ã,Í�ÖÀ4î Ò�Ë�Ñ�Ó�Ö Ã�Ë�Í�ÎâÁ�À�Ð;×À�Ò�× Í�Ð�Ã�à²Ð�ÖÀ�ã�Ô Â�Ã�Ñ�Ö�Ã�ÔÀ�× ÚÜ�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�ÜÝ Ë�Õ�Ó�Þ@Ì�Ã�Ð�Ã�À3î�Ò�Ë�Ñ�Ó�Ö�Ã�Ë�Í�ÎCÁ�À�Ð�Ð�ÖÀ�ã�Ô Â�Ã�Ñ�Ö�Ã�ÔÀ�× Ú�Ú�Ú

ï Á�Ó Ð�Ö�Ë�Â�Ð�Ã�À�å�Ã�Ë�Â�Ã�Ë;Ê Ù Ö�Ë�Ð;Ê Û Ñ�Ö�Ã�À�Ð�Á�Ã3¿@À�Á�Â�Â�Ã�À ìðÃ�Á�Ë�Ì$ì%Ö�Ë�Ð&ìðÍ Î�Ã�ÁGì�Øå�Ã�Ë�Â�Ã;Ê Ù Ø�ìðÃ�Á�Ë�Ì*ì+Ö�Ë�Ð�Ð�Á�Ã,å�Ã�Ë�Â�Ã;Ê Û Ø,ì½Í�Î�Ã�Á(ìî Ò à�à1Ö�×Õ�×Á�ñ�Á�×Õ�Ã�×�Ì�× Ã�Ì�×3Ð�Ã�Àß¿@À�Á�Â�Â�Ã�À,Õ�Ö Ì�Ð�Ã�Ë�å�Ã�Ë�Â�Ã�Ë;Ê Ù Ö�Ë�Ð;Ê Û Ø¿1À�Á�Â�Â�Ã�ÀòÃ�Á�Ë�Ì æ�Õ�Ë�ËóÐ�Ã�Ëô¿1À�Á�Â�Â�Ã�ÀõÍ�Î�Ã�ÁóÕ�Ö Ì�Ó Ò�Ã�Ì�Ã�Ë$çMÐ�Õ�Ô�Ã�ÀõÌ�Á�Ë�ÐóÐ�Á�Ãö¿@À�Á�Â�Â�Ã�ÀõË�Á�ã�Ô�×æ�Ò à�à1Ö�×Õ�×Á�ñ¿1À�Á�Â�Â�Ã�À�Ð�Ã�À�å�Ã�Ë�Â�Ã�Ë;Ê Ù Ö�Ë�Ð;Ê Û Ì�Á�Ë�Ð�Ë�Á�ã�Ô�×7æ�Ò�à�à@Ö�×�Õ�×Á�ñ ÚÜ�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�ÜÝ Ë�Õ�Ó�Þ@Ì�Ã�Í�Ö�À3î�Ò�Ë�Ñ�Ó�Ö�Ã�Ë�Í7Ô�Õ�×3Ã�À�Â�Ã�ä�Ã�Ë*ç�Ð�Õ�Ì�Ì�Ð�Á�ÿ1À�Á�Â�Â�Ã�À�Ë�Á�ã�Ô�×7æ�Ò�Ë�Ñ�Ó�Ö�Ã�Ë�×3Ì�Á�Ë�Ð ÚÜ�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�Ü�ÜÝ ä�Â�Ã�à�Ã�Ó�Ð�Ã�×3ä�Ã�Á�Æ�À�Õ�ã�Ó�ÃÝ Ó�Ó Ã�ñ�Ã�À�Í�Ò�Ã�Â�Ã�À�×�Ã�Ë4¿1À�Á�Â�Â�Ã�À�Î1Ö�À�Ð�Ã�Ë6Á�Ë�Ì�×Õ�Ó�ÓÁ�Ã�À�× Ú

D. h. die Analysen von Terminierung und Konfluenz haben ergeben, daß die Triggerweder terminieren noch konfluent sind.

Zur Laufzeit könnte sich dann z. B. folgendes ergeben:

Angenommen folgendes Tupel wird in die Tabelle Ý1÷ È@É�Ä�¿1É�ê�ê�¿1É eingefügt:

Die Eingabe einer SQL-Anweisung, die diesen Zyklus startet:

Äø�ê ù6Á�Ë�Ì�Ã�À�×úÁ�Ë�×�Ò²Õ�Ë�Â�Ã�Ì�×�Ã�Ó�Ó�× Ã�ñ�Õ�Ó�Ö�Ã�ÌCû Û ü�ü ç ü�ü ç ü·ý1þ

Page 148: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang E: Beispiel von Triggern, die sich gegenseitig aufrufen 142

ÿ������������ ������Und wird nach Eingabe dieser Löschung das Transaktionsende durch Aufruf derProzedur ����� ��� ����� � gekennzeichnet, so endet das Programm mit den Meldungen:

������������� ��� � ��� ���!� �" � ��#�# ��$ ��%�& � � ���')( &�# �*�(��+�� �, �� # - � � +.����0/ � *�*)��� %�1 ���2� -�- %" � ��#�# �� 1 �� � � � ���')( &�# �*�(��+�� �, �� # - � � +.����0/ � *�*)��� %�1 ���2� -�- %" � ��#�# ��$ ��%�& � � ���')( &�# �*�(��+�� �, �� # - � � +.����0/ � *�*)��� %�1 ���2� -�- %" � ��#�# �� 1 �� � � � ���')( &�# �*�(��+�� �, �� # - � � +.����0/ � *�*)��� %�1 ���2� -�- %" � ��#�# ��$ ��%�& � � ���')( &�# �*�(��+�� �, �� # - � � +.����0/ � *�*)��� %�1 ���2� -�- %3 � 3)4 5�6 ��7 "83�9;:�4�6 ����<;=�> ?A@�@�@B ��C������.D����������(��� & (����� &�& *�( -�-E� ��� � D - ��������������

D. h. es erfolgt ein Rollback aufgrund der selben Tupel in den Transitionstabellen.Die Folgefehler, die ausgegeben werden sind nicht zu vermeiden, da die Prozedur��� � ��� ���!� � den Trigger

� � *�* � ��� ��# auslöst, und in diesem Trigger das Rollback erfolgt.

Bemerkung:

Ein Rollback erfolgt erst nach dem 3. Aufruf der Trigger. Dies ist auch richtig, da dieTransitionstabellen des 2. Aufrufs der Trigger und des 3. Aufrufs erstübereinstimmen.

Page 149: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

143

ANHANG F:

Der Programmcode deserweiterten TSSDie Headerdatei FHGJILKNM�O :

P�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q PP�Q�R�SUTWVUXZY Q PP�Q Q PP�Q[Y�\�]��\�_) a)b�\[�c�\�_ed�fgTih�hgj)f Q�PP�Q Q PP�QkSgc�l�m�_onpR�]�_�q c)r.sta�u�v)b�\�_ j�_xw�\�a l�\�_)lynpz b ])c)�a�]es \ {�_ {�]){)u Q PP�Q |W}~X���c�b a�|����)} �t]�u�c�]�_�|���� � Q�PP�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q P� a�u�q b�c��\.� r l��a�m�XZ{��� a�u�q b�c��\.� r l�_�a�u��LXZ{)�� a�u�q b�c��\.� q l��t��\�XZ{��� a�u�q b�c��\.� r�\ l)�����LXZ{)�� a�u�q b�c��\.� \�_�_�u�m�XZ{��� a�u�q b�c��\.��l�\�_x�!a�mLXZ{)�P�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�PP�Q[��m�u�r�l�]�u�l�\�u Q P� �\ �a�u�\0d�ftTih)StV��'|)� P�Qk�!]���X�S�u���]){�bk�\�_edg_�a�����\�_$Q P� �\ �a�u�\�R�St��z������)R V��8| � P�Qk�!]���X�S�u���]){�b.�\�_e����])b�l)\�u���_�m.dt]���\ b�b)\�Q�P� �\ �a�u�\�R�St��d�ftTih���j)V�| ������� P)Qk�!]���Xp��\�a�q {�\�u�]�u���] {�b�aE��dg_�a�����\�_$Q P� �\ �a�u�\0s���f�d�� j)V�|)��� P�Qk�!]���X�s�m�_ l�b ]�\�u���\�Q P� �\ �a�u�\[VWS�R�j)� j)V.� � P�Qk�!]���Xe�idg]���\�b�b�\�ut��\ l)qLXW�eV ]E��\�u b�]�\�u���\�Q P� �\ �a�u�\[ ��)��z ����j V¡| ������� P)Qk�!]���XN��]�\�u���\�\�a�u�\�r�� c.r�\�u��\�u��\�u[ �b�m�q�v�r�Q�PP�Q']���{�]�\�u���a���¢�m�u.dt_�a�����\�_)b�]�\�u���\�Q PP�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�PP�Q'£�\�{�b)\�_�v�m�u�r�l�]�u l�\�u Q P� �\ �a�u�\¤TWV)z���R�¥)�;¦�d�ftTih8|� �\ �a�u�\0d�����¦g�)� V�h�§� �\ �a�u�\[V���¦g�f)��¥;d�fgT©h��� �\ �a�u�\0d�ftTih)¦tV�� dg£�����V�ª}� �\ �a�u�\0d�ftTih�)��¥�¥ª«

Page 150: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 144

¬�­�® ¯�°�±�®¤²W³�´gµ)¶�·'¸¬�­�® ¯�°�±�®[¹�µ º�µW·tµ0»¬�­�® ¯�°�±�®[¼�½ ¹W¾�·tµ$¿¬�­�® ¯�°�±�®�À ¶)Á�¬�­�® ¯�°�±�®¤²W³�´gµ)¶�·o²;³�Ã8Ä)Ŭ�­�® ¯�°�±�®[¼�½ ¹W¾�·A²W³�ÃÆÄ�Ĭ�­�® ¯�°�±�®[¹�µ º�µW·A²W³�ÃÆÄ Ç¬�­�® ¯�°�±�®0·�¶t²iÃ)Èt³�À ·gÉ�À�¼�³�¹WÈ!½�Ä�Á¬�­�® ¯�°�±�®0·�¶t²iÃ)Èt³�À ·gÉ�À�¼�³�¹WÈ!É�ÄWÊË�Ì�Ì�Ì�Ì�Ì�Ì�Ì�Ì�Ì�Ì�Ì�Ì�Ì�Ì�Ì�Ì�Ì�Ì�Ì�Ì�Ì�Ì�Ì�Ì�Ì�ËË�Ì�Í Î)Ï�Ð�Ñ)Î ®�Ò Ñ�Ó ° Ñ�Ð Î ®�± Ì ËÔ Õ Ñ Õ °�Ö�×�Ø�Ù�È Ð Ú ¯.×�Ø�Ù�È�® Ó�ÓoÛÔ Õ Ó)Ú Ö Õ�Õ Ó ° Í�Í ® Ó ÜÖ Ý Ñ�Ó Õ Ñ�Ð Î ®tÞ�³;¾�ß�µ º�µ ³�àoá Ë)Ì · Ñ�Ð ® Î�Î ®�±�± Ñ Ø�® Ì�˱ Ñ Ø�®!Þ�³W¾�ß�µ º�µ)³ à Û Ë)Ì · Ó ° Í�Í ® Ó ± Ñ Ø�® Ì�ËÔ Ý Ï�Ó Õ °�± Ô ® Ó Õ á Ë)Ì É Î�Ñ�Í Ô ¯ Ú ® Ó · Ó ° Í�Í ® Ó�Ñ�Ó Õ Ì Ë­�® Î ® Õ ®LáÚ Ù�­ Ñ Õ ®LᯠΠÑ�Í�Û Ë�Ì[Ú ±!â Ë�Ð ®�± Ú Õ�ã�Õ â�É Î�Ñ�Í�Ì�ËÎ�Ï ± Í Ù Ï Ô Û Ë�Ì ½ Ï Ô ° Õ ° Ï ±�­�® Ô · Ó ° Í�Í ® Ó�Ó Ú Ø�Ù�¯�â�ä�® Í °�±�± Ô Ì ËË�Ì °�±�­�® Ó ¹ Ñ Õ ®�° Ì ËÔ Õ Ó)Ú Ö Õ Ñ ­�× Î.Ì ¯ Ï�Î�ÎUÛ Ë�Ì º�° Ô�Õ ®�á Ú Ø�­�°�®[¯ Ï�Î�Î)Ï�å Ô Ì�ËË�Ì · Ó ° Í�Í ® Ó�Ñ)Ú ¯ ã Ú ±�®�ÝWØ�®�± Ì Ë°�± Õ Ô ®�®�± Û Ë�Ì0æ ° Ó ­ ã Ú ·g°�® ¯�®�± Ô Ú Ö Ý)® Ð ®�± Ï ® Õ ° Í Õ Ì�Ë°�± Õ Ù Ó ° Ï�Û Ë�Ì ½ Ó ° Ï�Ó ° Õ Ñ ® Õ ­�® Ô · Ó ° Í�Í ® Ó Ô Ì ËÔ Õ Ó)Ú Ö Õ Ñ Ö Õ ° Ï ± Ô Ì�Ñ Ö Õ ° Ï ± Û Ë)Ì ¾!ç Õ ° Ï ±�®�±�­�® Ô · Ó ° Í�Í ® Ó Ô Ì ËÔ Õ Ó)Ú Ö Õ Õ Ó ° Í Ô Ì Õ Ó ° Í�Í ® Ó Ô ÛèË)Ì · Ó ° Í�Í ® Ó áp­�°�®�­ Ú�Ó Ö Ý.­�°�®$¾�ç Õ ° Ï ±�®�±Ñ)Ú Ô Í ® Î�Ï ® Ô Õ å ® Ó ­�®�±'ç Ï ®�±�±�®�± Ì ËÔ Õ Ó)Ú Ö Õ Ö Ï Î�Ú Ø�± Ô Ì Ö Ï Î Ô Û Ë�Ì ä�®�± Ú Õ)ã Õ ®0´�Ù Ñ)Î Õ ®�±�á å ®�±�±�°�±�­�® Ó�Ñ ç Õ ° Ï ±�®�°�±Ú Ù�­ Ñ Õ ® Ô Õ ® Ý ÕUé Ì�Ëê Û Ë�Ì ´ Õ Ó)Ú ç Õ Ú Ó ¯ Ú ® Ó�Ñ Î�Î ®.· Ó ° Í�Í ® ÓªÌ�ËÔ Õ Ó)Ú Ö Õ Ñ ­�× Î�ÜÔ Õ Ó)Ú Ö Õ Ñ ­�× Î.Ì ±�®�ë Õ ÛÖ Ý Ñ�Ó Õ Ó ° Í�Í ® Ó Þ�³W¾�ß�µ º�µ)³ à Ûê ÛÔ Õ Ó)Ú Ö Õ Ñ Ö Õ ° Ï ± Ô ÜÖ Ý Ñ�Ó$Ï Ù�® Ó�Ñ Õ ° Ï ±tÞ�¹�µ º�µW·tµ�à ÛÖ Ý Ñ�Ó Õ Ñ�Ð ® Î�Î ®!Þ�³W¾�ß�µ º�µ)³ à ÛÔ Õ Ó)Ú Ö Õ Ñ Ö Õ ° Ï ± Ô Ì ±�®�ë Õ Ûê ÛÔ Õ Ó)Ú Ö Õ�Õ Ó ° Í Ô ÜÖ Ý Ñ�Ó ± Ñ Ø�®!Þ�³W¾�ß�µ)º µ)³ à ÛÔ Õ Ó)Ú Ö Õ�Õ Ó ° Í Ô Ì ±�®�ë Õ Ûê ÛÔ Õ Ó)Ú Ö Õ Ö Ï Î�Ú Ø�± Ô ÜÖ Ý Ñ�Ó Õ Ñ�Ð ® Î�Î ®!Þ�³W¾�ß�µ º�µ)³ à ÛÖ Ý Ñ�Ó Ô Ù Ñ)Î Õ ®tÞ�³W¾�ß�µ)º µ)³�à ÛÔ Õ Ó)Ú Ö Õ Ö Ï�Î�Ú Ø�± Ô Ì ±�®�ë Õ Ûê ÛÔ Õ Ó)Ú Ö Õ�Õ Ó ° Í�Í ® Ó Õ Ó ° Í ÞE·�¶g²©Ã)¾g³)ì�à Û°�± Õ Ï�Ó ­�® Ó ÞE·�¶g²©Ã)¾t³�ì�à�Þ�·�¶g²ià ¾g³�ì�à ÛíË)Ì ß Ñ Õ Ó °�ë�á Ú Ø�­�°�®�®�î�®�± Õ Ú ® Î�Î.Ð ® Ô Õ ® Ý�®�±�­�®�± Ì Ë

Page 151: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 145

ï)ð�ñ�ò�ó�ô õ�ô�ö�÷�ô'ø õ�ù�ú�õ�ô�÷ ûWü�÷�ôLýpð�ïþ û ø�ò ù�ÿ���÷�ô�øEü�÷�������� ï)ð ��ø��)÷�ÿ ü!ÿ��������gò�ÿ�ö�ö�÷�ò�ô�ð ïÿ�ô�� ú������ù�÷�û���÷�ò�� ï�ð��!ÿ�ò�ó�ô�ø þ û��! #"$��%�÷�û��)÷�ò�ô�ö�÷�&�÷���ú#�.ð�ï��ò�ÿ�ö�' þ ô��(� ï)ð�)�ô�ú�ø)û��.ó�÷�ò������tò�ÿ�ö�ö�÷�ò$ð ïø�*��+',� ò�ÿ�ö�� ï)ð�ó�÷�ò�ø�*��yý-���.�gò�ÿ�ö�ö�÷�ò�/�÷�ÿª÷�ÿ�ô�÷�ò0�! #"�1gø�ò�ô õ)ô�ö�ð ï/ õ ÿ���ó�'�2�ò43 þ � ï)ð5%���ø�ö�� ÿEü5���.�gò�ÿ�ö�ö�÷�ò�ò õWü�2�ùeügõ�&6&87gò436&�&���ï.ð ïï)ð 9���÷�ÿ�ô6& þ û ò�÷�ÿ�/ õ)ô�ö:/�÷�ø þ û6��÷#�0��÷�ò�ó�÷�ô�ð ïÿ�ó; ï�ð:<�ø�÷ û��)÷�ò0ù�õ)÷�ò�/�÷6& õ þ û���÷ 9)ô�3#�)÷�ô�ð ïÿ�ô�� 2�ò�ÿ43�ò�ÿ��.=> ï)ð:<�ø�÷�û��)÷�ò��NõWü@?�ò�ÿ43�ò�ÿ�� ø�÷���÷�ô�ú�õ�&�÷#��ú�÷�ô�ð ïÿ�ô�� ��÷�òEü6'gù�÷�û���÷�ò� ï)ð��!ÿ�ò�ó�ö�÷�&�÷#��ú��(�A��÷�ô�ô�ó�ÿ�÷CB�÷�ô�ö�÷�ó�÷�ò�gò�ÿ�ö�ö�÷�ò$÷�D�÷�ô#��õ�÷����.ô�ÿ þ û��:��÷�òEü�ÿ�ô�ÿ�÷�ò��.ð�ïÿ�ô�� *43�ô ù6��õ�÷�ô�ú�ï�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ïï�ð'ÿ�ô[û)÷�ø�ó�'!ø�ô�ó�'/�3�óE= ý þ ð�ïÿ�ô��¡ò�÷�ø�ó�',�.=,2GF6H,D�3�ÿ�ó'ò�÷�ø�ó�'/#��3 þ *$F�H,ÿ�ô��¡ò�÷�ø�ó�',� ò�ÿ�ö�ö�÷�òF�H�þ û ø�ò$ð�ö�÷#�+'���3*�÷�ôIF�H,D�3�ÿ�ó'ÿ)ùE'�÷�ò�&�÷#�)ú�÷�ôGF�H�ï�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ïï�ð'ÿ�ôkü�=#' þ 3�ü�ü�ÿ��Uý þ ð�ïD�3�ÿ�ókü�=�' þ 3�ü�ü!ÿ��,F6H,D�3�ÿ�ó�ó�ò�3�2�'�ø����E'�ó�÷ ù,F6H,ï�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ð�ïï�ð'ÿ�ôkü�ø�ÿ�ô�ýJ2 þ ð ïD�3�ÿ�ó:3�ò�ø þ �)÷�',��3�ö�ÿ�ôGF6H,D�3�ÿ�ó:3�ò�ø þ �)÷�',��3�ö63 õ���F�H�D�3�ÿ�ó:&�÷�ô�ó�÷�'�/#��3 þ *F�H�D�3�ÿ�ó:/ õ ÿ���ó�',��ò�ÿ�ö�ö�÷�òK'!ø�ô�ó�'���ø4/IF�H�þ û ø�ò$ð�ô�õWü�'���3�'&#� òF�H�þ û ø�ò$ð*�3�2�ÿ�÷�ò�÷IF�H�D�3�ÿ�ó:&�L���÷�ò�ò43�ò$F�H�D�3�ÿ�ó:&�L��+�!ø�ò�ôGF6H,

Page 152: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 146

M�N$O4P�Q�R6O4SGT6U,VW�X6X�X�X6X�X6X�X�X6X�X�X6X�X6X�X�X6X�X�X6X�X6X�X�X�WW�X O4S:Y$Z�Z4N$Z4[�\^]�_ X#WM�N$O4P�Q�O�[�`�Y$Z�ZT6U,VM�N$O4P:[#a�N�b�`YZ�Z$T�U�VW�X6X�X�X6X�X6X�X�X6X�X�X6X�X6X�X�X6X�X�X6X�X6X�X�X�WW�X O4S:_6N�S#c6d�e�Y6S�_6Y�\J_ X#WM�N$O4P:NZ�P�YZ�Y�PGT6U,VO4S�f�_6N#d�[�`�_6N�Q�]$R�Z�YGT�U�VM�N$O4P�Q�Y6S�g�Y6SGT�U�VO4S�fih�N�Q6Q�`,f�Y�[#f�T�U�VM�N$O4P:_�N6S#c�d6e�Y�S6_�YIT�U,VW�X6X�X�X6X�X6X�X�X6X�X�X6X�X6X�X�X6X�X�X6X�X6X�X�X�WW�X O4S f�YZ.QGO4SR�f�Y;\J_ X#WM�N$O4P f!Z6O4g�g6YZ.`[�Y�f,T�U�VM�N$O4P:_�N�Q�]R6Z4YGT6U,VM�N$O4P f!Z6O4g�g6YZ4[�`�N�e�f,T6U,VM�N$O4P f!Z6O4g�`MO4[$O�f�T�U,VM�N$O4P f�Y$Z.Q�O�SR�f�YGT6U,VW�X6X�X�X6X�X6X�X�X6X�X�X6X�X6X�X�X6X�X�X6X�X6X�X#WW�X O4S a�Y#d�]�`,f�N6N#d�[�\J_ X�WM�N$O4P d!O�[#f�Y6S�`�O�SO�f,T�U�VM�N$O4P:]Z�Y�_�Y6P�Y�[�`,d#O4[#f�T�U�VO4S�fCf#Z�O�g�`�S�e+Q(T6U,VM�N$O4P c�N�d�d�N�b�[�`�d!O�[#f,T6U,VM�N$O4PjR4_�f!O4N6S�`�O�S�[IT�U,VM�N$O4P:_�N�d+`�O�S�[GT6U,VM�N$O4P:MO�[O�f�T�U,VM�N$O4P:[�Y$R�Z4_�a,T�U�VM�N$O4P c�N�d�d+`N#e�f�T�U�V

Page 153: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 147

Das Modul kmlon;pGqrlsp;t�qvuxw�l;yoz({}|�~�y :���6�����6���6�����6�����6���6�����6�����6���6�����6���6�����6�����6���6�����6�����6���6�����6���6�����6�����6���6�����6�����6��������:���6�#�6�(�-���(�E� ������ ������j�4�����#�4�#�6���$�4� �!���������������6�.�6�������:����5�����$���!�������6���-���� �#����:����:�#�+��#�!�� ����#������K���#���#���6���6�5�������6��¡6��� �#���� ��������,�6���$���-�����¢#���¤£��4�$�����$�C�6�.¥���������(�-�#�!�����$���0£!�#�#���#����� �#���� ¦+§�ª©$���#�C¦�«�«�§ ©,���#�#���:¦4«�«�¬ �#����6�����6���6�����6�����6���6�����6�����6���6�����6���6�����6�����6���6�����6�����6���6�����6���6�����6�����6���6�����6�����6�����­ ����¢#�6���6�@® �������� �,®��°#�4�8±!²����E���#�6³�#�µ±#²#������ �(¶ ���8±!²������o�ª±#²#�$ ����6�4�$�·������$�4�6��� ���6�¤£����4�$�4�6���:�#����¹6�6��6��6�6��6�6��6��6�6��6��6�6��6�6��6��6�6��6��6�6��6��6�6��6�6��5�#����»ºª��6�4¢#����,�����$�4�G¼6½ º�������»º º�������»º¾��������#�4���;�¿�������!�����6���j�����#���6���$�4��À6�����:�$�4¢#�¤�$���4¢����:�#�#�4¢#�Á º�������»ºÂ6�6��6��6�6��6�6��6��6�6��6��6�6��6��6�6��6�6��6��6�6��6��6�6��6��6�ú��#�Ä �$�4�:��6�4¢#����,�����$�4�G¼6½Å�#�#����¢��:����K���4�:�6�#�(�-�$� Ä �;¶��°#�4�8±!²��CÆ#�+Ç��E�:!�4���+���!�0±,�4��È��.�#�(¶É �������+�,�:�#�4��Ê�¦�Ë!Ì�¶É �������+�,�¤��¥���Ê�¦�Ë!Ì�¶��°#�4�8±!²��i����:!���#�+���!�0±,����È��.�#�Á¶Í��������$�+ÎI �¦�¶¡#�#��������$�4��¢�ÎË(¶��6�4����Í,¼6®+Ï��#Æ��6�#����À��$�4��K�����0®6½,¶�������I¼+�!����Ð�����$½,¶��6�4����Í,¼6®+Ï��#Ñ��6����¥����(�0®�½,¶

�4�6¢#�6�,¼+ËÁ�ÒÈ#��Ç,�EÈ���� Ó��$� Ä �I½,¶ ���:��4�jÔ6�4����¥�����0¥������:��4�6���#�����6���:�#������4Î#�� Ä ��¶ ���:�#����� Æ!�����6��¢#�#���.�G���������¡��:�#������( ¢�,�6Í��#�4�:Ó�Î:Õ,���#���;¶�4�6¢#�6�,¼+ËÁ�ÒÈ#��±,�EÈ���� Ó��6�#�,½�¶�������I¼���¥��Ð�����$½,¶�4�6¢#�6�,¼+ËÁ�ÒÈ#��±,�EÈ���� Ó��$� Ä �I½,¶�!���� ������Î!���!�������G¼E�!����Ö�6���½�¶��¥�� ������Î!���!�������G¼.��¥��Ö�6���½�¶��°#�4�8±!²���£�!���!� É ����±!²��!���������C��:��×#���������$¼�½,¶��°#�4�8±!²���£�!���!� É ����±!²��4£��,�����+�4Çj��C�6×#�+¥G�����G¼�½�¶��°#�4�8±!²����6�#���#�4��ÈØ� �!���@�E!����È�����4��:Æ�ÙÚ�J��¥��¶��6�4����Í,¼6®+Ï������6������#�����#�¤¡��$�������¢#���ÛÏ��G®�½�¶Ü

Page 154: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 148

Ý�Þ¹ß6ß�ß6ß�ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß6ß�ß�ß5Þ#ÝÝ�Þ»àªáâ6ã4ä#å�æ�ß,å�á�ç6á#è�é�ê�ë à�Þ#ÝÝ�Þ»à à�Þ�ÝÝ�Þ»à¾ì�è�íî�é#ï4á�í;ð¿ì�è�æ�ñ!â�é�ò6æ�í�ó,è�ô#å�á6ç�õ$â4á�ö6æ�ô�ôjã�è�ô:÷â6ã4ä#å�æCò�è!â�ä#ñ(ø à�Þ�ÝÝ�Þ»àÂß6ß�ß6ß�ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß�ß6ß�ßÃà�Þ#Ýù á$ï4ò:áâ6ã4ä#å�æ�ß,å�á�ç6á#è�é�ê�ëú û�ü#û4ý8þ!ÿ��¤ý ÷��������#÷��� � û��!û ó þ,û �õâ6ï4í�é��,ê�����í�ó��6ç�æ��æ#å�ò�æ#é���æ$ï�÷â�ã�ä#å�æ���í���ë �� Ý�Þ:á$â�ã4ä�å�æ�ß,å�á6ç�á#è6é,ê6ë Þ�Ý

Ý�Þ¹ß6ß�ß6ß�ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß6ß�ß�ß5Þ#ÝÝ�Þ»àªô�æ6í�ò�æ�ß��#å�á�ä$îê�� � ÷ ý ,ë à�Þ#ÝÝ�Þ»à à�Þ�ÝÝ�Þ»à¾ì�è�íî�é#ï4á�í;ð þ ä#ñ#ï4ä$î�é¤ò�æ�í�� � Ý þ#ÿ�� � ��å�á�äî�í$ã4ä#ñþ#ÿ�� ö#è!â þ õ�æï�ä#ñ�æ$â�è�í�ç�ø à�Þ�ÝÝ�Þ»àÂß6ß�ß6ß�ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß�ß6ß�ßÃà�Þ#Ýù á$ï4ò:ô�æ6í�ò�æ�ß��#å�á�ä$îê���å�á6äîëä#ñ#ã�â��#å�á�äî� "! �úû�ü#û4ý8þ!ÿ�� � û #$�&%' û4ý�� ó(� û0þ,û4ý �$�.÷�% �) ó(� ý * ó+�¤ò�è�����,#ß���å�á6äî� �-�.�.�.�.�! � Ý�Þ��æ$ï·óæ�í6ò�æâ�è�í6ç ù á�í/� � ÷ ý �!û %Ûã�æ�í�ò6æâ�íCÞ�Ýû�ü#û4ý8þ!ÿ��iû %�'' û�ý�� ó(� û0þ,û�ý �$�.÷�% �

ô#é#â4ä6õ�,�ê.ò#è&���",�ß��#å�á�ä$î�øÖã6â�â$01�#å�á�äî$ë �ò#è&����,#ß���å�á6äî�ø¯å�æ�í32!ô�é!â�å�æ�íGê.ò#è&���",�ß��#å�á�ä$î�øÖã6â�â$ë �û�ü#û4ý8þ!ÿ��Ûû�ü!û�ý4 �û ����� û '(� ó5� û ð^ò#è&���",�ß��#å�á�ä$î � Ý�Þjã���ô�ä�ñ!ï4ä$î4æ6íCÞ�Ý� Ý�Þ:ô6æ�í�ò6æ�ß6�#å�á6äîê6ë·Þ#Ý

Ý�Þ¹ß6ß�ß6ß�ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß6ß�ß�ß5Þ#ÝÝ�Þ»à7�#è#ï�å�ò�ß,é!â6ï4ç6ç�æâKß�ã�í�ò�ß�é!ã8�Iê�ë à�Þ#ÝÝ�Þ»à à�Þ�ÝÝ�Þ»à¾ì�è�íî�é#ï4á�í;ð û â4ö6æ#è�ç#é'!ï�����æ$â4æ�í6ö#é#ã8��æ�å�å�æ6íjï.ß,Ý�ò�ß,Ý6è+ß��6�+�9#� �ï�!�ø:%+ó�� û 0 à�Þ�ÝÝ�Þ»à è�í6òCò6æ�í;�,â6ï4ç�ç6æâ:ã�è����6�+�9#� �ï�!�ø<��ó+� �!û ö#è&� àÒÞ#ÝÝ�Þ»à ã�è6é�á��Gã�é!ï�ô�ä�ñ�æ�íjì�è�æ#å6å�æ�í:ò6æâ;'!ï3����æ$â4æ�í6ö#é#ã8��æ�å�å�æ6í�ø àÒÞ#ÝÝ�Þ»àÂß6ß�ß6ß�ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß�ß6ß�ß6ß�ß�ß6ß�ß�ß6ß�ßÃà�Þ#Ýù á$ï4ò�#è#ï�å�ò�ß,é!â6ï4ç6ç�æâKß�ã�í�ò�ß�é!ã8�Iê�ëúä#ñ#ã�â�ô#é&�,é6 �=">�>?!$0é!ã��#å�æ( A@�.5!B0é!ã��#å�æ�ß�ä6á#å6è���í6ô( 8=�Þ���ó ü�ý ÷ � 4 ��% þ !� �@�.5!B0 Ý�Þ/%!ãC�æ è�í�ò;�8,�õ:æï4í6æâ þ õ$ã�å�é�æ:Þ#Ýñ!ï�å��Eß�ä�á�å�è&��í( ���ó ü�ý ÷ � 4 ��% þ !� A@�.5!$0á#å�ò�ßä�á#å6è��í( A��ó ü�ý ÷ � 4 ��% þ !� �@�.�!$0í�æ"D�ßä�á#å6è��í( A��ó ü�ý ÷ � 4 ��% þ !� �@�.�!$0ä�á�å�è&��í�ô�ß�ô�é��,é? A��ó ü�ý ÷ � 4 ��% þ Þ�@�.5!$0ò#è&����,E A��ó ü�ý ÷ � 4 ��% þ Þ�@�.5!B0í�æ"D�á�å�ò�ßò#è&���",F A��ó ü�ý ÷ � 4 ��% þ Þ�@�.5!$0ñ!ï�å��Eß�ò#è&����,E A��ó ü�ý ÷ � 4 ��% þ Þ�@�.5!B0é!â6ï4ç6ç�æâ� A��ó ü �?�+��# �!û %5!$0 Ý�ÞCò6æâ�ö#è�ôãA����æ6í�ç�æ��ã�è�é�æG� � �,â6ï4ç�ç6æâ�Þ#Ý��è�í�ä�ß�ä�á"��õ$ã�â4æH A��ó ü �?�+��# �!û %�!$0 Ý�Þ òï4æjì�è�íî�é!ï4á6í:òï����+ß�ä6á��õã�â�æCÞ�Ý��è�í�ä�ß,ñ!ï�å��? 8=">�>6! �ï4í�é�ä6á#åEß�ã4í6ö( ��?�+�9#�ó+%�I6! � Ý�Þ�óí�ö$ã�ñ�å¤ò6æâ þ õã�å�é�æ�íjï4í:æï�í�æâJ��ã8��æ�å�å�æ:Þ�Ý

Page 155: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 149

K8L�MNM�O�K�P�Q�R�S�T(UCV6W(X�Y�Z(["\?]$^_ L�M8`?ab^ c"de6f8g�h�i�MNM�f8j�i"g�Q _ S�i�k�l6L�T(m�n�K8L�M5O�f8g�P�gd�c_ S�i�k&l�L�Q�f8L�e�`6aE^ c�doZ�L�e?f�h�i�p�g6OJV+f�j�g�i�i"g�L�T�R?f�i�M�g�Ld�c_ S�k"L�M"g6OB^K8L�T�g?O�Mb^ c"d�q�i5f�P�T/r�k�g6OJV+f�j�g�i�i"g�L�M�s(Rd�cp�g�i"g�M"gt^k"R�p6f3M"gt^hb^ c"d;u _ h�i�g6K�r�g�L�v?f�O�K�f8j�i"g�Ld�cK�`?ab^w�`?ab^x `?abyK8L�MNiEyn�z�n8{;u5|�}N~�n�Y$X&[�5n8{�}�Z(W5nJu+n8{3V$XC��[by� Z(W"{���Z+W�T�M5f�M�g�l�g�L�M?U8�"���6]$y� Z(W"{���Z+WM�f8j(U��8�6]By c�d�f�i�i�g�T/r�k�g6O;�5f3M5f�m��5K _ M5K�S�L6f�O�sEm9Z�L�r5O�f�P�gd�c� Z(W"{���Z+W _ S�i�k&l�L�Q6L6fAl�g(U���a5]By� Z(W"{���Z+W _ S�i�k&l�L�Q(M�s(R�g(U��6]$yK8L�M _ S�i�k�l6L�Q+i�g�L�P�M�hEyK8L�M _ S�i�k�l6L�Q�R?O8g _ yK8L�M _ S�i�k�l6L�Q�T _ f�i�gtyT�h�S6O3M _ R�Q�K8L�p�y c�dGX�L�p?K x f�M"S?O�m � f�O�K�f8j�i"g�L/r�k"g6O;[�k�i�i?m"n�K�L�M�O�f8g�P�gd�cT�h�S6O3M _ T�Q�K8L�p�y� Z(W"{���Z+W _ O8g6f3M"g�p"Q+M�O�K8P�P�g6O�U"�3a�a�a�a5]Byn�z�n8{;u5|�}�n3[���5n�{�}�Z(W5nJu+n�{�V$XC��[Ey

r"S?O���h8`?aby�h8�?M5O�K�P�Q _ L�MEy�h"�����M5O�K8PHU8h5]B��r�i5f8P3`6abyr"S?O���h8`?aby�h8�?M5O�K�P�Q _ L�MEy�����h(��c"d/r�k�g6O�w�g�p�g�L;V(O�K8P�P�g6OB������d�c�

T�M�O _ R�st�&M5f�j�i"g�^�M5O�K8PHU8h5]B��M5f�j�i�g��+yT�M�O _ R�st�Cp�k&l�l"s�^�M5O�K8PHU8h5]B��L6fAl�g��+yT�M�O _ f�M+�Cp�k&l�l"s�^��������(yc"d T�M�O _ R&st�Cp�k�l�l"s�^&�����+y�d�cT�M�O _ R�st�&h5K3i�r�Q6p�k�l�l"s�^������+yT�M�O _ R�st�CL�g"��S�i�p�Q�p�k�l�l"s�^&�����(yT�M�O _ R�st� _ S�i�k�l6L�Q�L?fCl6gt��f�O�O$^J�����+yT�M�O _ R�st� _ S�i�k�l6L�Q+MCs+R�gt��f�O�O$^J�����+yT�M�O _ R�st�&M5f�jt��f�O�O$^:M5f�j�i"g��+yM5f�jt�:i"g�L3`5T�M5O�i�g�L��&M5f�jt��f�O�O6�(y_ L�M8`?abyn�z�n8{;u5|�}�5n8{�}�Z+W�n;k"T�g?OCQ(M5f8j"Q _ k�O8T�S6O�{���W�u5��W�q���Wu(n�}5n�{�V _ S�i�k�l6L�Q6L6fCl6gt^1p6f�M�fCQ+MCs+R�gt^�p?f�M5fAQ+i�g�L�P�M�hE^�p6f3M5fCQ6R6O�g _ K�T6K8S�Lt^p6f�M�fCQ�T _ f3i"g�q�W"���T�s+T���k�T�g6OAQ+M5f�j�Q _ S�i�k�l�L�T� �5n�W�n;}"� � n�W+�&M5f�j�i"g"Q�L?fCl�g���`��:M5f�jtyn�z�n8{;u5|�}��6��n3[Nk�T�g?OCQ+M�f8j"Q _ k�O8T�S?O$yn�z�n8{;u5|�} q�n�V�{��k"T�g6OCQ(M5f�j�Q _ k5O8T�S6O�X�[�V5�¡� _ S�i�k&l�L"Q�L6fAl�gt^�� _ S�i�k&l�L�Q(M�s(R�gt^_ S�i�k&l�L�Q(i"g�L�P�M�hb^�� _ S�i�k�l6L�Q�R?O8g _ � _ R�QHK�L�p�^�� _ S�i�k�l�L"Q�T _ f�i�gt� _ T�QHK�L�p�y

Page 156: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 150

¢+£�¤�¥�¦�§�¨�©�¥�ª6«$¬1¨�©�¥�ª�­�®�¦�¯�¯6°+±J²�³N¨�­�¥�«8´�µ�¦N¦�¨;¶5·6«3¥�¸�¦�´µ6¤8¹�¸�º�»5¼J½(«8¹�¦�¥�¥"¦³�²¾ª�­�¥�»&¿�´"À�´6«A¿�¦t¬9«�¼�¼�ÁAª�­�¥�»�¿�´"À�´6«A¿�¦�¬�¥"¦�´6Â�¯ÄÃ�Å�°bÃ�ƪ�­�¥�»&¿�´"À+¸�Ç(·�¦t¬9«�¼�¼�ÁAª�­�¥�»�¿�´"À+¸�Ç(·�¦�¬�¥"¦�´6Â�¯ÄÃ�Å�°bÃ�ƨ�¸5¼8ª�·�Ç�§�¸5«�¹�¥"¦"À�ª�­�¥�»&¿�´�¨(ÁAª�´�¸5ÂBÈ�ª�­�¥�»&¿�´�À6´6«A¿�¦t¬9«�¼�¼?±+ƨ�¸5¼8ª?«�¸(§�®�»&¿�¿"Ç�È�¸�«8¹�¥�¦�À6ª�­�¥�»�¿�´�¨(Á�ª�´�¸�É�É6Â?±+ƨ�¸5¼8ª?«�¸(§�®�»&¿�¿"Ç�È�ÊÊ�±(ƨ�¸5¼8ª�·�Ç�§�¸5«�¹�¥"¦"À�ª�­�¥�»&¿�´�¨(ÁAª�´�¸5ÂBÈ�ª�­�¥�»&¿�´�À(¸�Ç(·�¦t¬9«�¼�¼?±+Ƥ3Ȩ̈C¨�¸�¼8ª�¿6·�§�¸�«8¹�¥"¦�À6ª�­�¥�»�¿6´�¨(Á�ª�´�¸5Â$È&Ê�Í�Î&Ï+Ð(Ê�±�¯�¯6°¡Ñ�Ѩ�¸5¼8ª"¿�·�§�¸5«�¹�¥"¦"À�ª�­�¥�»&¿�´�¨(ÁAª�´�¸5ÂBÈ�ÊCÒ�Ï+Ð�Í�Î�Ï(Ð�Ó(Ê�±�¯�¯6°¡Ñ�Ѩ�¸5¼8ª"¿�·�§�¸5«�¹�¥"¦"À�ª�­�¥�»&¿�´�¨(ÁAª�´�¸5ÂBÈ�Ê&Ð�Ï5ÔBÊ�±�¯�¯6°(±²"³�¤�´N®?¤8¦�¨�¦�´�Õ�«�¦�¥�¥"¦�´ª�­�¥�»&¿�´�À(¥"¦�´�µ�¸�£N¥�¦�¨�¦�´³�²¾

¨�¸5¼�ª6«�¸(§�¸�«8¹�¥�¦�À�ª�­�¥�»�¿�´�¨(ÁAª�´�¸�Â$È�Ê�§�Ê�±+ƨ�¸5¼�ª6«�¸(§�¸�«8¹�¥�¦�À�ª�­�¥�»�¿�´�¨(ÁAª�´�¸�Â$È�´�»�¿�À+¸"­"À�¨�¸�¼6§Cª�­�¥�»�¿�´"À+¥�¦�´�µ�¸�£+±�±+ƨ�¸5¼�ª6«�¸(§�¸�«8¹�¥�¦�À�ª�­�¥�»�¿�´�¨(ÁAª�´�¸�Â$È�Ê�±�Ê�±+ÆÖ¦�¥"¨�¦�¤3Ȩ̈C¨�¸�¼8ª�¿6·�§�¸�«8¹�¥"¦�À6ª�­�¥�»�¿6´�¨(Á�ª�´�¸�Â$È&Ê�×�Ø�Ù�Ú�Û�Ð+Ê�±�¯�¯?°+±²"³/×5«8ª�£5Ü�­�¿�¿�«�Ý�»"´�®�Þ�¦�¨?«C¿+¸�¨�¸"¦�¥�¥�¦�´6«�´�º6«3£�¥�¦�´/¥"¦�¨�¦�´³�²¾

¤�Ëߧ�ª�·"ÀH¤�´�®Eà1¯�Ý"á?±J²"³/Ë5«3¥�¥"¨�Ü8¦?¤8´/×�Ø�â�â&¢�¦6¼3¸o³�²¾¨�¸5¼�ª6«3¸+§�¸�«8¹�¥�¦�À6ª�­�¥�»�¿6´�¨(Á�ª�´�¸�Â$È&Ê�§�Ê�±+ƨ�¸5¼�ª6«3¸+§�¸�«8¹�¥�¦�À6ª�­�¥�»�¿6´�¨(Á�ª�´�¸�Â$È´�»&¿�À+¸�­�À6¨�¸5¼?§�ª�­�¥�»&¿�´�À6·6¼8¦�ª�±�±+Ƥ�Ëߧ�ª�¨�ÀH¤�´�®Fà�¯�Ý�á6±J²"³�Ë5«�¥�¥"¨�Ü8¦?¤8´/×�Ø�â�â�¢6¦6¼�¸�³�²¾

¨�¸�¼8ª6«3¸+§&¸5«8¹�¥"¦�À6ª�­�¥�»�¿6´�¨(Á�ª�´�¸5Â$È&Ê+È&Ê�±+ƨ�¸�¼8ª6«3¸+§&¸5«8¹�¥"¦�À6ª�­�¥�»�¿6´�¨(Á�ª�´�¸5Â$È´�»&¿�À+¸�­�À6¨�¸5¼?§�ª�­�¥�»&¿�´�À6¨�ª6«3¥"¦�±�±+ÆÖ¨�¸5¼�ª6«3¸+§�¸�«8¹�¥�¦�À6ª�­�¥�»�¿6´�¨(Á�ª�´�¸�Â$È&Ê�±�Ê�±+ÆÖ ²"³�¤�Ë�³�²Ö ²�³¦�¥"¨�¦³�²

¨�¸5¼8ª?«�¸(§�®�»&¿�¿"Ç�È�¸�«8¹�¥�¦�À6ª�­�¥�»�¿�´�¨(Á�ª�´�¸�É�É6Â?±+ƨ�¸5¼8ª?«�¸(§�®�»&¿�¿"Ç�È�Ê(È�Ê�±(ÆÛ3ã5Û8Í;¶�ä�â Õ�Û&½5Í�λ"¨�¦6¼AÀ+¸5«�¹�À�ª�»5¼�¨�­6¼�å&×8½5æ¡ç�ª�­�¥�»�¿�´"À�´6«A¿�¦�È�ç�ª�­�¥�»�¿�´"À+¸�Ç(·�¦�Èç1ª�­�¥�»�¿6´�À+¥�¦�´�µ�¸�£EÈ�ç�ª�­�¥�»�¿�´"À�·6¼�¦�ª�ç�ª�·"ÀH¤8´�®tÈ�ç�ª�­�¥�»�¿6´�À6¨�ª6«3¥"¦�ç�ª�¨"ÀH¤8´�®tÆÖ ²�³�¢(£5¤3¥"¦³�²Û�ã�Û8Í;¶5ä�â�Í�â"æ3¶+Û;»"¨�¦6¼CÀ(¸5«�¹�À�ª�»5¼8¨�­6¼Bƪ�­�¥�»&¿�´�À�«8´�º�¯5ª�´�¸�²�Óbƪ�­�¥�À�«8´�ºHÁ8£�Â诠ª�­�¥�»&¿�´�À�«8´�º�ƨ�¸�¼8ª�·�Çt§Cª�­�¥�»�¿6´�¨�À6¨�¸&¿+¸bÈ1®�»�¿�¿"Ç�±+ƨ�¸�¼8ª�·�Çt§C¨�¸&¿+¸bÈ&Ê�ª6¼�¦6«3¸"¦/¸5«8¹�¥"¦�¤CÀEÊ�±(Æ ²"³�¤8´�¨�¦6¼3¸"¦�®"À5½�Ï(Ú�â�Ûé³�²¨�¸�¼8ª?«�¸+§C¨�¸&¿+¸bÈ1ª�­�¥�»�¿6´�¨�À6¨�¸�¿(¸+±(ƨ�¸�¼8ª?«�¸+§C¨�¸&¿+¸bÈ&Ê8¼8­"¢H¤�®�¦�´�¸oª�£5«�¼6§8á�ê�±�±�Ê�±(ƨ�¦�´�®�¦�À�¹�¥"­�ª6Ü6§C¨�¸�¿(¸+±(ƨ�¸�¼8ª�·�Çt§C¨�¸&¿+¸bÈ&Ê�ª6¼�¦6«3¸"¦/¸5«8¹�¥"¦/£5¤3¥�Ë&ÀH¤CÀEÊ�±+Æ ²�³/£5¤�¥�Ë�ÀH¤�´�¨�¦6¼�¸�¦�®"À5½�Ï(Ú�â5Û�³�²¨�¸�¼8ª?«�¸+§C¨�¸&¿+¸bÈ1ª�­�¥�»�¿6´�¨�À6¨�¸�¿(¸+±(ƨ�¸�¼8ª?«�¸+§C¨�¸&¿+¸bÈ&Ê8¼8­"¢H¤�®�¦�´�¸oª�£5«�¼6§8á�ê�±�±�Ê�±(ƨ�¦�´�®�¦�À�¹�¥"­�ª6Ü6§C¨�¸�¿(¸+±(Æ

Page 157: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 151

ë�ì�í8î�ï�ðtñCë�ì&ò+ìbó&ô�î6í�õ6ö3ì"õ/ì5ö8÷�ø"õù�úEô�û(ü ý"þù�õ�ø�õ�ì�õ�ù�ú�ÿ���������þ�ýë�ì�í8î?ö�ì+ñCë�ì&ò+ìbó1î��ø��ò���ë�ú6ë�ì�ò(ì+û(ü ��ï���õ6í8õ�ñ�ë�ì�ò+ìEó�ë�ì&ò+ìEó�ë�ì�í�ø"õ���ñCë�ì�ò(ì+û����6û(üë�ì�í8î?ö�ì+ñCë�ì&ò+ìbó&ô�û�ô�û+üë�õ���ù�õ�ú�÷�ø���î ñCë�ì�ò(ì+û(üë�ì�í8î�ï�ðtñCë�ì&ò+ìbó&ô�î6í�õ6ö3ì"õ/ì5ö8÷�ø"õ����3ø�&ú�ù�úEô�û+ü ý�þ�����ø���ú�ù�õ�ø�õ�ì"õ�ù�ú�ÿ���������þ�ýë�ì�í8î?ö�ì+ñCë�ì&ò+ìbó1î��ø��ò���ë�ú6ë�ì�ò(ì+û(ü ��ï���õ6í8õ�ñ�ë�ì�ò+ìEó�ë�ì&ò+ìEó�ë�ì�í�ø"õ���ñCë�ì�ò(ì+û����6û(üë�ì�í8î?ö�ì+ñCë�ì&ò+ìbó&ô�û�ô�û+üë�õ���ù�õ�ú�÷�ø���î ñCë�ì�ò(ì+û(üë�ì�í8î�ï�ðtñCù�&ò�ò"ð�ó�ì5í��������������6öAò�õ�û+ü ý"þ�"ï�ù?ö�ì�õ�ù�ú�ÿ��������þ�ýë�ì�í8î?ö�ì+ñCù�&ò�ò"ð�ó�ô�ñ�ô�û(ü���?í�ñ�� �"!bü#� $�î��ìEüJû%

ë�ì5í8î?ö�ì(ñ�ù�&ò�ò"ð�ó�ô&��ø"ù"úbô�û+üë�ì5í8î?ö�ì(ñ�ù�&ò�ò"ð�ó�ì�ö8÷�ø�õ�ú6î��ø��ò'��ë�����(("�6û+üë�ì5í8î?ö�ì(ñ�ù�&ò�ò"ð�ó�ôô�û(üë�ì5í8î?ö�ì(ñ�ù�&ò�ò"ð�ó�ì�ö8÷�ø�õ�ú6î��ø��ò'��ë�����(("�6û+üë�ì5í8î?ö�ì(ñ�ù�&ò�ò"ð�ó�ô(ó�ô�û(ü)���?í�ñ�� �"!bü#� $�î��ìEüJû%

ë�ì5í8î?ö�ì(ñ�ù�&ò�ò"ð�ó�ô&��õ+*�úbô�û+üë�ì5í8î?ö�ì(ñ�ù�&ò�ò"ð�ó�ì�ö8÷�ø�õ�ú6î��ø��ò'��ë�����(("�6û+üë�ì5í8î?ö�ì(ñ�ù�&ò�ò"ð�ó�ôô�û(üë�ì5í8î?ö�ì(ñ�ù�&ò�ò"ð�ó�ì�ö8÷�ø�õ�ú6î��ø��ò'��ë�����6û(ü�,�ÌñCî��ì�-(�(��6ûë�ì5í�î6ö�ì(ñ�ù'�ò�ò�ð�ó�ô(ó�ô�û+üõ�ø"ë�õë�ì5í8î?ö�ì+ñCù�&ò�ò"ð�ó�ô(ó�í���*��8ù�õ��ìoî'�5ö�í?ñ��+.�û�û�ô�û(ü

)ë�ì�í8î�ï�ðtñCë�ì&ò+ìbó&ô�î6í�õ6ö3ì"õ/ì5ö8÷�ø"õ��úEô�û(ü ý"þ�����ø�&ú��ï�ù6ö3ì"õ�ù"ú5ÿ,�������þ�ýë�ì�í8î?ö�ì+ñCë�ì&ò+ìbó1ù��ò�ò"ð�û+üë�õ���ù�õ�ú�÷�ø���î ñCë�ì�ò(ì+û(üë�ì�í8î�ï�ðtñCë�ì&ò+ìbó&ô�î6í�õ6ö3ì"õ/ì5ö8÷�ø"õ����3ø�&ú��úEô�û+ü ý"þ�����ø�&ú�"ï�ù6ö3ì"õ�ù"ú5ÿ�������éþ�ýë�ì�í8î?ö�ì+ñCë�ì&ò+ìbó1ù��ò�ò"ð�û+üë�õ���ù�õ�ú�÷�ø���î ñCë�ì�ò(ì+û(üë�ì�í8î�ï�ðtñCë�ì&ò+ìbó&ô�î6í�õ6ö3ì"õ/ì5ö8÷�ø"õù��,��&úbô�û(ü ý�þ0/,132 ÿ+ö�÷�õ�ø�ø"õ54�&ò ë��8î'�"õ6í+�ù�õ?í76������"õ?í8õ��4�ì5ö�÷�õ�ø�ø"õ��Nþ�ýø�� ë�ì5í�ø�õ��ñ�ù�&ò�ò"ð�û+üù�&ò�ò�ð8�8ø"�����9�;:=<�!>:�ü ý"þ?:�û�: ö�÷�ë�î'����õ��8ù�õ�þ�ýë�ì�í8î?ö�ì+ñCë�ì&ò+ìbó1ù��ò�ò"ð�û+üë�ì�í8î?ö�ì+ñCë�ì&ò+ìbó&ôÌó9ö���46ö���ø@�'�ò6÷�õ6í?ñBA�û�û�ô�û+üë�õ���ù�õ�ú�÷�ø���î ñCë�ì�ò(ì+û(ü

) ý�þ����6í7��þ�ýý"þC��í+4�õ'���õ��Nù�õ6íJÿ+ö�÷�õ�ø�ø"õï6í+��ì�� ��ø�ø�þ�ý

ï6í�����ì�+ñ�ô���í�4�õ'���õ��ù�õ6íJÿ+ö�÷�õ�ø�ø"õï?í���ì�� ��ø�ø�<���ô�û+üë�ì�í8î�ï�ðtñCë�ì&ò+ìbó&ô�î6í�õ6ö3ì"õ/ì5ö8÷�ø"õï6í+��ì�� ��ø�ø+ô�û+üë�ì�í8î?ö�ì+ñCë�ì&ò+ìbó&ôNñ&ì5í������õ6í��?öCò6õNî'�5ö�í6ñBD'!+û+óE4?ö8õ���ø"õ6íF�'�ò�÷�õ6í?ñBA�û�û�ô�û(üë�õ���ù�õ�ú�÷�ø���î ñCë�ì�ò(ì+û(ü

Page 158: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 152

G�H�I�J�K�L5LM�N�OFP�Q+NSR,M�T"U�V�Q+JT5N�O+WN�M�XN�T0H'G

Y V�O�Z�K []\^LM�TZ+_�ZJ+`�K�a�O�N]b^cBZ�O+N�a,V�N5J�O5O�N�K�d�a+ZN�LM�TZ�V�Q�J�T0P"Q�L�L _'Z�J+`'K"aO+Nec�f�gY V�O�Z"a�V�\^LM�TZ+_�ZJ+`�K�a�O�N]b^c0\^h _ia�TW"a�h�d@T'M `'j�N�O"f k�Tlcf�gY V�O�Z"a�V�\^LM�TZ+_�ZJ+`�K�a�O�N]b^c�O�N'VM�O�T5T�M^`'jN"O0Q Y k�Ticf�gY V�O�Z"a�V�\^LM�TZ+_�ZJ+`�K�a�O�N]b^c�QFT�M^`'jN"Omgnk�Tic�f�gY V�O�Z"a�V�\^LM�TZ+_�ZJ+`�K�a�O�N]b^c�a�Z'V _ia�TW5T'M `'j�N�Omgnk�Tlcf�gY V�O�Z"a�V�\^LM�TZ+_�ZJ+`�K�a�O�N]b^cBT�M^`ST�M `�jN"Omg=k�Ticf�gY V�O�Z"a�V�\^LM�TZ+_�ZJ+`�K�a�O�N]b^cBT�M^`�oFT�M^`'j�N�Omgnk�Tic�f�gY V�O�Z"a�V�\^LM�TZ+_�ZJ+`�K�a�O�N]b^cBT�M^``�N�OFT�M^`'jN"Omg=k�Tic�f�g

Y V�O�Z"a�V�\^LM�TZ+_�ZJ+`�K�a�O�N]b^cBjN�X�Q+T�k�T"Qmprq"s>gnk�Tic�f�gY V�O�Z"a�V�\^LM�TZ+_�ZJ+`�K�a�O�N]b^c tu�v�w,_'x�y+z�{�y+z3|}{�y�z,_�~�� ���"\�����N�O+X�d�N"Q�Z�h�P�N�O

t�Q,LL�N"O�N�TW�V�a�jN'dd�NT]�^f�g c�f�gY V�O�Z"a�V�\^LM�TZ+_�ZJ+`�K�a�O�N]b^c d�J�JK'k�Tic�f�g

Y V�O�Z"a�V�\^LM�TZ+_�ZJ+`�K�a�O�N]b^cBT�M^``�N�O�prq"s>g=k�T�Qmp�q�Q+��omgnk�Tic�f�gG�H�t�Q�NCR�M�T�U�V�Q�JT@�iQO�P5j�N�QFPN+`�z�OQ�X�XN"O�j�a,M�a,M�Z'h@��N�O���J�d�d Y V�a�N�TP�Q+X�V�H'G

G�H���Q,dL Y V�O�Q�XX�N�O'��u�a,M�H�G

L�J"OC\ h�q"s>g�h��"V�OQ+X+_�ZT�V8gE���h�f�G�H�LM�N�OF�N�PNT7z�OQ�X�XN�O�||�|�H'G�

Y V�O�Z�K []\^V�a+j�d�N�b=V�O�Q�X���h���|=V�a+j�d�Nif�gY V�O�Z�K []\&P�M^``�[�b=V�O�Q�X���h���|�T�a�`'Nlf�gY V�O�Z"a�V�\&P�M^``�[�b c\�cf�gY V�O�Z�K []\^h�Q,dL _�P�M `�`�[�b cc�f�gY V�O�Z�K []\&TN��'J�d�P+_'P'M `�`�[�b^ccf�gY V�O�Z�K []\&ZJ'dM `�T+_'T"a&`�N]|�a�OOmb�c�cf�gY V�O�Z�K []\&ZJ'dM `�T+_�V&[�K�N]|�a�OOmb�c�cf�gY V�O�Z�K []\^V�a+j]|�a�OOmbnV�a+j�d�Nlf�gV�a+j]|nd�NT,q Y V�O�d�NTi\^V�a+j]|�a�OO�f�gZT'V�q"s>g

�������7w��'~�x�{�,�0M Y N"O&_�V�a�j�_'Z�M�O Y J"Omg�������7w��'~�R� z����5M Y N�O&_�V�a+j+_'Z'M�O Y J�OC� �+z�x?p�Z�J�dM^`'T�_'T�a�`'N]b�p�Z�J�dM^`'T+_�VB[�KN]bZJ'dM^`'T+_�d�N�TX�V�h>bp�ZJ'dM `�T+_'K"O�N�Z]p�Z�K+_�Q+TP�bp�Z�J�d�M `'T�_ Y Z"a�d�N]p�Z Y _�Q+TP�g

��h�Q�d�Ni\ Y�  d�Z�am| Y  d�ZJ�PN�q�q�s�f�G�H Y J�d�a�TX�N0N Y w�K�a,dV�NT5X�Q�j'V�W�M�O�z�a�jN'dd�N5H'G�

Z�J�dM^`'T�_'T�a�`'N]|}aO�O���Z�J�d�M `'T�_'T�a�`'N�|=d�N�T�� q¡�=k�s>�gZ�J�dM^`'T�_�VB[�KN]|}aO�O���Z�J�d�M `'T�_�VB[�KN�|=d�N�T�� q¡�=k�s>�gY V�O�Z�K [�\ V�a+j�d�N�_'Z�J�dM^`'T Y ��Z�T�V���b�Z�J�dM^`'T+_�T�a�`'N]|}aOO"f�gY V�O�Z"a�V�\BP�M^``�[�b=V�a�j�d�N+_�ZJ�d�M `'T Y � ZT�V�����"f�gY V�O�Z"a�V�\BP�M^``�[�b c5cf�gY V�O�Z�K [�\ V�a+j�d�N�_'Z�J�dM^`'T Y ��Z�T�V���b�Z�J�dM^`'T+_�VB[�KN]|}aOO"f�gQ,L¢\ Y V�O�Z+`�Ki\ V�a�j'd�N+_�ZJ'dM `�T Y � ZT'V��mb^cB���^£�¤�cf�q�q�s?¥¥

Y V�O�Z�`'Kl\ V�a+j�d�N�_'Z�J�dM^`'T Y ��Z�T�V���b c&�+£�¤���� £�¤¦�cf�q�q�s?¥¥Y V�O�Z�`'Kl\ V�a+j�d�N�_'Z�J�dM^`'T Y ��Z�T�V���b c^¤ £�§�cf�q�q�s�f

G�HCQ+T0P"Q�N Y NTCRa+N�d�d�NT5Z�J�dM^`'T+_�d�N�TX�V�h0d�N Y NT5H�G�

Y V�O+Z�a�V�\ V�a�j�d�N+_'Z�J�d�M `'T Y ��Z�T�V��mb c�\c�f�gY V�O+Z�a�V�\ V�a�j�d�N+_'Z�J�d�M `'T Y ��Z�T�V��mb�T'M `�_�V�J�_ Y V�O�\&ZJ�d�M `'T�_�d�NTX'Vh�f�f�g

Page 159: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 153

¨�©�ª+«�¬�©�­ ©�¬�®�¯�°+±'«�²�¯�³ ´'µ�¨�¶�«�µ�©�·m¸ ¹�º¹�º�»¼°'¯�¨°C½,¾¢­&¨�©�ª�«+´�¿i­ ©�¬�®'¯�°+±�«²�¯�³ ´�µ¨�¶ «µ�©�·m¸^¹ ÀÁ�Â�Ã�Ä�Å�¹�º�ÆÆ"Ç�º

È�É À�¬�«'Ê�Ë+²+´´i¬�ÌF³�µ�Í�Î�°¨"¬&´�©�¨�©�°'¯¯�°µ�¬+µÏ�¬,ʯ�°µ�¯�°�¨°µ É�ÈÐ

½�¾Ñ­B«¿�±�½+µÍ8Ò�ÆiÌ�Ó"º È�É ¾�¬,¯¯�¨CË�°"½�µ�ÀÁ�ÔÔ^Õ'°�ª,© É'ÈÐ

¨�©�ª+«�¬,©�­ ©�¬�®�¯�°+±�«²�¯�³ ´�µ¨�¶ «µ�©�·m¸^¹­¹�º�»¨�©�ª+«�¬,©�­ ©�¬�®�¯�°+±�«²�¯�³ ´�µ¨�¶ «µ�©�·m¸

µ�³^´±�©�²+±�¨�©�ª"­B«²'¯³^´'µ+±�¿�ª�°�«iº�º�»½�¾Ñ­B«�¨+±�½+µÍÖÒ�ÆiÌ�Ó�º È�É ¾�¬�¯�¯�¨CË�°"½�µ�ÀÁ�ÔÔ Õ�°�ª�© É'ÈÐ

¨�©�ª�«�¬,©�­^©�¬�®'¯�°+±�«²'¯³ ´�µ¨�¶ «µ'©�·m¸^¹�¸^¹º�»¨�©�ª�«�¬,©�­^©�¬�®'¯�°+±�«²'¯³ ´�µ¨�¶ «µ'©�·m¸µ�³^´±�©�²+±�¨�©�ª"­B«²'¯³^´'µ+±�¨«�¬,¯�°lºº�»

¼¨�©�ª+«�¬,©�­ ©�¬�®�¯�°+±�«²�¯�³ ´�µ¨�¶ «µ�©�·m¸^¹º¹�º�»

¼ È�É ½�¾ É�ȼ È�É °�¯�¨�° É�È

¨'©�ª�«"¬�©�­BÍ�³^´´�×�¸=©�¬�®�¯�°+±�«²�¯�³ ´'µ�¨�¶ «µ�©�ØØ�·"º�»¨'©�ª�«"¬�©�­BÍ�³^´´�×�¸ ¹�¸ ¹º�»Ä,Ù�Ä�Ú7Û�Ü�Ô�ÝÄ^Þ�Ú�ß5³�¨�°�ª�±�©�¬+®+±'«'³�ª+¨²�ªCà^À�Þ�á?â�«�²�¯�³ ´'µ�±'µ�¬�´'°�¸â�«�²�¯�³ ´'µ�±�©B×�¿°�¸â�«²�¯�³ ´�µ+±�¯�°µã'©Ê8¸â�«�²�¯�³ ´'µ�±'¿�ª+°«�â�«¿�±�½�µ�Í]¸�â�«²'¯³ ´�µ+±�¨«�¬,¯�°�â�«¨�±�½�µ�Í]»

¼ È�É Õ�Ê�½,¯�° É�ÈÄ�Ù�Ä�Ú7Û�Ü'Ô�Ú�Ô�á,Û�Ä7³�¨�°�ª&±�©�¬+®+±'«'³�ª�¨�²�ª�»

«²'¯³^´'µ+±i¬�µ�Ï�Æ�«�µ�© È�ä »¨�©�ª�«�¿ ×]­&«²'¯³ ´�µ¨+±�¨�©^´�©>¸�Í�³ ´�´�×�º�»

½�¾Ñ­"Ò�©�ª�½�ã�¶�Ê�·�å=¾¯�¬�ãlºÐ

½+µ¨°"ª�©+Æ�Ç>»Í�°�¯�°'©�°,Æ�Ç>»³�¿Í�¬,©�°,Æ�Ç>»«�²�³�µ'©�°"ª Æ�Ç8»

¾�²�ªC­�½^Æ�Ç>»#½^æ�©�ª�½�ã+±�«µ'©>»#½�ØØlº È�É ß�½�¯�¾�¨�©�ª½+ãã°"ª�Ì ç²�ª+®°�ª+°�½,©³�µ�ã°µ É'Ƚ,¾¢­"Ò�©�ª½�ã�¶�½·�å=¾�¯�¬�ã5è�è0¨'©�ª�«�´'¿l­ ©�ª�½�ã�¶�½·�å=©�¬+®�¯�°]¸=©�ª½�ã�¶�Ê�·må=©�¬�®�¯�°iº}ÆÆ�Ç�ºÐ È�É ½�µ�¨°�ª,©>¸EÍ°'¯�°�©�°]¸�³�¿�Í�¬�©�°5¨�¬&´�´'°'¯�µ]¸EÍ�¬ É'È

È�É µ�³�ªé°"½�µ�ß�½,¯¾�¨'©�ª�½�ãã�°�ªF¿�ª+²�Þ�¬�®�°�¯¯�° É'È©�ª½+ã�¶�½�·mån¾¯�¬+ãØØ�»©�ª½+ã+±'¿�²¨�¶�«²'³�µ�©�°�ª+ØØ�·^Æ�½m»½�¾Ñ­�ÒB½+µ¨�°�ª�©�èè�©�ª½�ã�¶�½�·må�½+µ¨°"ª�©�º

½�µ¨�°�ª,©�ØØ�»½�¾Ñ­�Ò�³�¿Í"¬�©�°5èè�©�ª½�ã�¶�½�·må=³�¿Í�¬,©�°lº

³�¿Í"¬�©�°ØØ�»½�¾Ñ­�ÒêÍ�°�¯�°�©�°5èè�©�ª½�ã�¶�½�·må�Í�°�¯�°'©�°lº

Í°�¯�°�©�°ØØ�»¼

¾�²�ªC­�½^Æ�ë�Æ"Ç>»#½ æ�«²�¯�³ ´�µ+±�¬+µÏ]»ìë�Æ ä�É Ø�Ø�½�º È�É�í °'¾�½�µ"½�©�½+²µ�°µ]å�åå É�ÈÐ

¨�©�ª+«¿ ×�­ Ê�½�¯¾^±'«²'¯³^´'µ�¶�½·m¸n©�¬+®�¯�°�±'«�²�¯³^´'µ¨�¶�ë"·�º�»¨�©�ª+«�¬�©�­ Ê�½�¯¾^±'«²'¯³^´'µ�¶�½·m¸^¹=±�Ê�½�¯�¾�¹�º�»

Page 160: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 154

î�ï�ð+ñò ó�ôBõ'ö�÷+ø�ñõ�ö�ù ú�û�ü�ý�þmÿ��&õ�ö�÷+ø������î�ï�ð+ñ���ï�ôBõ'ö�÷+ø�ñõ�ö�ù ú�û�ü�ý�þmÿ=ï��'ö �+ø�ñõ'öù ú�ûî�ü���þ����î�ï�ð+ñò ó�ôBû����ø�ñõ�ö�ù ú�û�ü�ý�þmÿ��&û�� �ø������î�ï�ð+ñ���ï�ôBû����ø�ñõ�ö�ù ú�û�ü�ý�þmÿ=ï��'ö �+ø�ñõ'öù ú�ûî�ü���þ����

î'ï�ð�ñ�ò ó�ô ï�ð�ý�������ð�ÿ��Bñ"ð�����ï ��ï�ð�ý�������ð������ � ����ý,ö���î'ï�ðý�������ð��+õò������î'ï�ð�ñ���ï�ô ï�ð�ý�������ð�ÿ=ï����ö �!���î'ï�ð�ñ���ï�ô ï�ð�ý�������ð�ÿ��=ø�" ��� ø�#�ðý������"ð $�û�� ��ï �"ð0ý+ûî���ð�ï�õ�ðF÷���ö �'ï �%�����î'ï�ð�ñ���ï�ô ï�ð�ý�������ð�ÿ��Bõ"ð7ù�ò÷���ï �5õ�û&�����î'ï�ð�ñ���ï�ô ï�ð�ý�������ð�ÿ=ï����ö �!���î'ï�ð�ñ���ï�ô ï�ð�ý�������ð�ÿ���$�û���õ�ð'���+ñ(�ð�õ �)$�û!�����î'ï�ð�ñ���ï�ô ï�ð�ý�������ð�ÿ��B÷��ñ'ö��ð��*$�û!����� � ��" ����ö���ð��,ï�ý�õ�û��û+���î'ï�ð�ñ���ï�ô ï�ð�ý�������ð�ÿ���ý+ûî5û�ù^ú���"ð,�-$�û5÷���ö�û'ù ú����ð.�/$�û�ù�ò�÷5û�ù ú���"ð,�/$�û&�����

��õ�ðCô�ý10�� 0�2��#ý�3�ñõ�ö�ù ú�û+ø4�+û�56�7�80�9 ��:�:"ý��;

î�ï�ð+ñ���ï�ô ï�ðý�������ð�ÿ/(�ý�ö��^ø'ñõ'öù^ú'û�ü�ýþ����î�ï�ð+ñ���ï�ô ï�ðý�������ð�ÿ��+�����î�ï�ð+ñ���ï�ô ï�ðý�������ð�ÿ=ï���ö �+ø'ñ�õ�ö�ù ú'û�î�ü���:�<�þ����î�ï�ð+ñ���ï�ô ï�ðý�������ð�ÿ����=�����

î'ï�ð�ñ���ï�ô ï�ð�ý�������ð�ÿ���$�û������ý+û*$�û!����� � ��>ù^ú'ò�?���

î'ï�ð�ñ�ò ó�ôBû�� �'õ�ö�÷+ø�÷�ù ú�ú�ó�ÿ��������

î'ï�ð�ñ�ò ó�ô�(�ý,ö�� ø�÷�ù^úú�ó�ÿ��������

��õ�ðCô�ý10�2��#ý13�ñû'ï��@� � ��" ���AEû�� �'õ'ö�÷+ø�÷�ù ú�ú�ó)��;

î�ï�ð+ñ���ï�ôBû����'õ'ö�÷+ø�÷�ù^úú�ó�ÿ���B�û�� �CA������î�ï�ð+ñ���ï�ôBû����'õ'ö�÷+ø�÷�ù^úú�ó�ÿ=ï����ö �+ø'ñ�õ�ö�ù ú'û�î�ü�ý�þ����î�ï�ð+ñ���ï�ôBû����'õ'ö�÷+ø�÷�ù^úú�ó�ÿ��D0�õ�ö�÷+ø������î�ï�ð+ñ���ï�ôBû����'õ'ö�÷+ø�÷�ù^úú�ó�ÿ=ï����ö �+ø'ñ�õ�ö�ù ú'û�î�ü�ý�:�:"þ����ý �ÑôBñû'ï E�:�:�ý��

î�ï�ð+ñ��,ï�ôBû����'õ'ö�÷�ø'÷�ù^úú�ó�ÿ��1$�û���û�÷&�������ö�î��0î'ï�ð+ñ���ï�ôBû�� �'õ'ö�÷+ø�÷�ù ú�ú�ó�ÿ����-$�û%�����

��õ�ðCô�ý10�2��#ý13�ñõ'öù ú�û+ø!��û�5F�=� � ��" ����AG(�ý,ö�� ø�÷�ù^úú�ó)���;

î�ï�ð�ñ���ï�ô1(�ý,ö�� ø�÷�ù ú�ú�ó�ÿ/(�ý,ö�� ø�ñõ'öù ú�û�ü�ý�þ����ý �Ñô&ñõ�ö�ù ú�û+ø4�+û�5�E�:�:"ý��

î�ï�ð+ñ���ï�ô�(�ý�ö��^ø'÷�ù^úú�ó�ÿ���ÿ/$�û%������

� �Sý8��ý�ûî���ð,ï�ý�û��HA�A�A7��

î'ï�ð�ñ���ï�ô ï�ð�ý�������ð�ÿ���ý8��ý�ûî���ð�ï�ý�û���ï�( �û�$�ûI�����

Page 161: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 155

J K�L�MON8P�Q�R7N8S�T�K�U VW X�L.RYN�Z�Z![\

] W�L�T�^�_FM�W`�ab X6c/WL�d�e�f�WL�d�e g�^�K ] f�N�h�h,ijV�`lk�XI[�R] W�L�T�` W�M�WL�d�e�e�X�L.c�m'd�V ] X�L8W*d�VW K�n�d b�J�g4dog�m�[�R] W�L�T�` W�M�WL�d�e�e�X�L.c/W`�ab X![�R] W�L�T�` W�M�WL�d�e�e�X�L.c�m1p V+q�` b�U X ] M�rjV�X�sCi1m�[�RJ K�L�M�d1P�QtRud1S�T�V�W�R@[\

] W�L�T�`8W�M�WL�d�e�e�X�L,c/W`�a�b X�g�T�Kb�U�k�V ] f d�Z�Z�h�[�Rd J)MOT�VW v�Z�Z�d�[

] WL�T�`8W�M1W�L�d�e�e�X�L,c1m�c/p VwrjV�X sCi�m�[�RXb ] X ] W�L�T�`8W�M�WL�d�e�e�X�L,c�m�cxryV�X sCiDL�K�s!d�z![�R=m�[�R

{{'| } J K�L'N }|] W�L�T�` W�M�W�L�d�e�e�X�L.c�mOX�V�z�d JtR/p V%m�[�R

| } d8J+U ^�z�` Wd�V�e }|

] W�L�T�` W�M�W�L�d�e�e�X�L.c�m�d8J+U ^�z�` W�d�V�e�W�n X�V�p VIm�[�R

J K�L�MON8P�Q�R7N8S�T�K�U VW X�L.RYN�Z�Z![\

] W�L�T�^�_FM�W`�ab X6c/WL�d�e�f�WL�d�e g�^�K ] f�N�h�h,ijV�`lk�XI[�R] W�L�T�` W�M�WL�d�e�e�X�L.c�m ] Xb X�TW?T�KU V�W�M } ['d�VW K�d�V ] JL�K�k)n�d8b�J1g4dlgtm�[�R] W�L�T�` W�M�WL�d�e�e�X�L.c/W`�ab X![�R] W�L�T�` W�M�WL�d�e�e�X�L.c�m1p V�s�n X�L�XwrjV�X�s~iDL�K s4d�z8P�L�K�s4d�z�X�V�W�RGp VIm�[�R] W�L�T�` W�M�WL�d�e�e�X�L.c�m�d J*d�V ]�� P�QxW�n X�V*U ^�z�`8W X�n�d8b�J1g4dlgtm�[�R] W�L�T�` W�M�WL�d�e�e�X�L.c/W`�ab X![�R] W�L�T�` W�M�WL�d�e�e�X�L.c�m1p V ] XW)m�[�RJ K�L�M�d1P�QtRud1S�T�V�W�R@[\

] W�L�T�`8W�M�WL�d�e�e�X�L,c/W`�a�b X�g�T�Kb�U�k�V ] f d�h�[�R] W�L�T�`8W�M�WL�d�e�e�X�L,c�m�P�ryV�X�s~i�m�[�R] W�L�T�`8W�M�WL�d�e�e�X�L,c/W`�a�b X�g�T�Kb�U�k�V ] f d�Z�Z�h�[�Rd J)MOT�VW v�Z�Z�d�[

] WL�T�`8W�M1W�L�d�e�e�X�L,c1m�c/p V%m�[�R{] W�L�T�` W�M�WL�d�e�e�X�L.c�m1p V�s�n X�L�XwrjV�X�s~iDL�K s4d�z8P�L�K�s4d�z�X�V�W�R-p V%m�[�R] W�L�T�` W�M�WL�d�e�e�X�L.c�mlXb ] X ] Xb X�TW?T�KU V�W�M } ['d�VW K�U ^�z�J�L�K�k

n�d8b�J�g�U�gtm�[�R] W�L�T�` W�M�WL�d�e�e�X�L.c/W`�ab X![�R] W�L�T�` W�M�WL�d�e�e�X�L.c�m1p V�s�n X�L�XwrjV�X�s~iDL�K s4d�z8P�L�K�s4d�z�X�V�W�R-p V%m�[�R] W�L�T�` W�M�WL�d�e�e�X�L.c�m�d J+U ^�z � P�QxW�n X�V*U ^�z�`8W X�n�d8b�J1g�U�gtm�[�R] W�L�T�` W�M�WL�d�e�e�X�L.c/W`�ab X![�R] W�L�T�` W�M�WL�d�e�e�X�L.c�m1p V ] XW)m�[�RJ K�L�M�d1P�QtRud1S�T�V�W�R@[\

] W�L�T�`8W�M�WL�d�e�e�X�L,c�mlV�X s�g�m�[�R] W�L�T�`8W�M�WL�d�e�e�X�L,c/W`�a�b X�g�T�Kb�U�k�V ] f d�h�[�R] W�L�T�`8W�M�WL�d�e�e�X�L,c�m�P�ryV�X�s~i�m�[�R] W�L�T�`8W�M�WL�d�e�e�X�L,c/W`�a�b X�g�T�Kb�U�k�V ] f d�Z�Z�h�[�Rd J)MOT�VW v�Z�Z�d�[

] WL�T�`8W�M1W�L�d�e�e�X�L,c1m�c/p V%m�[�R{] W�L�T�` W�M�WL�d�e�e�X�L.c�m1p V�s�n X�L�XwrjV�X�s~iDL�K s4d�z8P�L�K�s4d�z�X�V�W�R@m�[�R

Page 162: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 156

�������� ����������������.���1� ����� ������������� �*����� �����8���������t������������� ����������������.�/����� �!����������� ����������������.���1� �+��� ��� ���&�������� �������1���t�u�1���������������!��

��������8����������������,���� j��� ¡6¢1�������������8����������������,�/������ �����������£�����¤ ������¥������������8����������������,�����/� �&�����

¦� �������1���t�u�1���������@��

��������8����������������,���� j����§C¢1�������������8����������������,�/������ �����������£�����¤ ������¥����� �)�O���� ¨��������

�������8���1�������������,�1���/� �%�����¦�������� ����������������.�����x y����§~¢D����§4��¡!���/� �+����¡�� ���-� �I������������� ����������������.���©¡���� �� ������� £)��� �������1��������������� ����������������.�/����� �!����������� ����������������.���G§�� ������� �%������ �������1���t�u�1���������@��

��������8����������������,�����O����§��t�������������8����������������,�/������ �����������£�����¤ ��¥������������8����������������,��������� ¡��t�������������8����������������,�/������ �����������£�����¤ ��¥������������8����������������,���©���ª����§��t�������������8����������������,�/������ �����������£�����¤ ��¥������������8����������������,���'���x�������*����¡+�� ¡����������������8����������������,�/������ �����������£�����¤ ������¥������������8����������������,���'���x���������������� �)�O���� ¨��������

�������8���1�������������,�1��� ������¡%�����¦

�������� ����������������.�����Y����¡�� �t�/� �%�����¦'« ¬ � ���ª­ ¬�«��������� �����������������.���O����¡�� �t�/� �%�����« ¬ �8�?¡��� �������F¢�¢�¢ ¬�«

��������� �����������������.�����8�?¡��� ������������ ���� �%�����

� �����O­8�����7­8������� �� ���.�Y­����!��

�������®�¯F������� �6�/�������¤������� ��®�����¤�­�¥�¥,¢j���l£��I���������� ���1�������������,�1�O���� ����?����� ���� ¬ �ª���� ��������������£)��� �����!�l��������������� ����������������.�/����� �!����������� ����������������.���1� ��§�� �����w j��� ¡F¢D��� §4��¡8������§4��¡��������G� �I������������� ����������������.����� �*������°j���x��� ���x¡��� ��� ��������£)���8�����!�l�t������������� ����������������.�/����� �!����������� ����������������.���1� ��§�� �����w j��� ¡F¢D��� §4��¡8������§4��¡��������G� �I�����

������� ���1�������������,�1�O��� ���+����� ����?����� ���� ¬ �'���� ��� ®�¡������ £)��� �������1��������������� ����������������.�/����� �!����������� ����������������.���1� ��§�� �����w j��� ¡F¢D��� §4��¡8������§4��¡��������-� �%������������� ����������������.����� �+� ®�¡�°j���x��� ���� �+����� ����)�����

Page 163: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 157

± ²�³�´�µ1¶�·t¸uµ1¹�º�»�¼�¸@½¾

¿ ¼�³�º�À8¼�´�¼³�µ�Á�Á�Â�³,Ã�Äl²Å Æ�Ç�Ä�½�¸¿ ¼�³�º�À8¼�´�¼³�µ�Á�Á�Â�³,Ã/¼À�È�Å Â�Ç�º�²Å�É�Ê�» ¿�Ë µ�Ì�Ì�Í�½�¸µ ±)´Oº�»¼ Î�Ì�Ì�µ�½

¿ ¼³�º�À8¼�´1¼�³�µ�Á�Á�Â�³,Ã1Ä�Ã/Ï »%Ä�½�¸Ð¿ ¼�³�º�À ¼�´�¼³�µ�Á�Á�Â�³.Ã�Ä1Ï »�µ�»¼ ²%Ä�½�¸¿ ¼�³�º�À ¼�´�¼³�µ�Á�Á�Â�³.Ã/ѵ Å�±1Ç�ÆÉ1Ê�Ê Ò6½�¸¿ ¼�³�º�À ¼�´�¼³�µ�Á�Á�Â�³.Ã�Ä1Ï »�±�³�² Ê)Ñ�µ Å�±�Ç�É�Ç�Ä�½�¸¿ ¼�³�º�À ¼�´�¼³�µ�Á�Á�Â�³.Ã/¼À�ÈÅ Â!½�¸¿ ¼�³�º�À ¼�´�¼³�µ�Á�Á�Â�³.Ã�Ä1Ï »�Ó�Ñ Â�³�ÂwÔj²�Å ÆFÕD³�² Ó4µ�Æ8¶�³�²�Ó4µ�Æ�Â�»�¼�¸-Ï »%Ä�½�¸¿ ¼�³�º�À ¼�´�¼³�µ�Á�Á�Â�³.Ã�ÄlÆ�Š¼ Â�±³�²�Ê)ѵ Å�±1Ç�É�ÇtÄ�½�¸¿ ¼�³�º�À ¼�´�¼³�µ�Á�Á�Â�³.Ã/¼À�ÈÅ Â!½�¸¿ ¼�³�º�À ¼�´�¼³�µ�Á�Á�Â�³.Ã�Ä1Ï »�Ó�Ñ Â�³�ÂwÔj²�Å ÆFÕD³�² Ó4µ�Æ8¶�³�²�Ó4µ�Æ�Â�»�¼�¸-Ï »%Ä�½�¸¿ ¼�³�º�À ¼�´�¼³�µ�Á�Á�Â�³.Ã�Ä�µ�» ¿ Â�³ ¼*µ�»¼ ²�ѵ Å�±1Ç�Æ�ÇtÄ�½�¸¿ ¼�³�º�À ¼�´�¼³�µ�Á�Á�Â�³.Ã/¼À�ÈÅ Â!½�¸¿ ¼�³�º�À ¼�´�¼³�µ�Á�Á�Â�³.Ã�Ä1Ï »+Ö�À Å�É Â ¿ ´�Ä�½�¸¿ ¼�³�º�À ¼�´�¼³�µ�Á�Á�Â�³.Ã/ѵ Å�±1Ç�ÆÉ1Ê�Ê Ò6½�¸¿ ¼�³�º�À ¼�´�¼³�µ�Á�Á�Â�³.Ã�Ä�½�¸/Ï »xÂ�Å ¿ Â×µ�» ¿ Â�³ ¼*µ�»�¼ ²�Ñ�µ8Å�±1Ç�Æ�ÇtÄ�½�¸¿ ¼�³�º�À ¼�´�¼³�µ�Á�Á�Â�³.Ã/¼À�ÈÅ Â!½�¸¿ ¼�³�º�À ¼�´�¼³�µ�Á�Á�Â�³.Ã�Ä1Ï »+Ö�À Å�É Â ¿ ´�Ä�½�¸± ²�³�´�µ1¶�·t¸uµ1¹�º�»�¼�¸@½¾

¿ ¼�³�º�À8¼�´�¼³�µ�Á�Á�Â�³,Ã�Ä�Ôj²�Å Æ6Õ1Ä�½�¸¿ ¼�³�º�À8¼�´�¼³�µ�Á�Á�Â�³,Ã/¼À�È�Å Â�Ç�º�²Å�É�Ê�» ¿�Ë µ�Ì�Ì�Í�½�¸µ ±)´Oº�»¼ Î�Ì�Ì�µ�½

¿ ¼³�º�À8¼�´1¼�³�µ�Á�Á�Â�³,Ã1Ä�Ã/Ï »%Ä�½�¸Ð

¿ ¼³�º�À ¼�´1¼�³�µ�Á�Á�Â�³,Ã1Ä�½�¸/Ï »+Â�»�Æ�µ ±�¸-Ï »+Â�»�Æ×µ8±�¸-Ï »%Ä�½�¸Ð'Ø Ù ± ²�³'Ú ÙØ

¿ ¼�³�º�À ¼�´�¼�³�µ�Á�Á�Â�³.Ã�ÄOÂ�»�Æ�µ ±t¸/Ï »%Ä�½�¸¿ ¼�³�º�À ¼�´�¼�³�µ�Á�Á�Â�³.Ã�Ä©Â�»�Æ6¸/Ï »!Ä�½�¸

¿ Â�»�Æ�Â�Ç�ÈÅ ²�º�Û�´1¼�³�µ�Á�Á�Â�³�½�¸ Ø Ù�Ü µ Å�± ¿ ¼�³�µ�Á�Á�Â�³ ¿ Â�»�Æ�Â�» Ù�ØÐ'Ø Ù µ ±ÞÝ�¼�³�µ�Á Ë ÑÍ,Õ-±�Å�À�Á ÙØ

¿ ¼³�º�À ¼�´1±�É »�º�Ç�º�²�Ê�ß�À�³�Â6Ã1Ä ¿ Â�Å Â�º¼?º�²�É »¼�´ Ù ½'µ�»¼ ²+»É1Ê)±�³�² Ê×Æ�µ ±�±�Ç�Ä�½�¸¿ ¼³�º�À ¼�´1±�É »�º�Ç�º�²�Ê�ß�À�³�Â6Ã-¼�³�µ�Á Ë Ñ�Í,Õy»�ÀlÊ�Â!½�¸¿ ¼³�º�À ¼�´1±�É »�º�Ç�º�²�Ê�ß�À�³�Â6Ã1ÄàÓ�Ñ Â�³�Â�À�»�á�À Ñ�Ū¶)µ.¸/Ï »IÄ�½�¸¿ ¼³�º�À ¼�´1±�É »�º�Ç�º�²�Ê�ß�À�³�Â6Ã1Ä�µ ±?»�É�Ê�Î�·+¼�Ñ Â�»Ï »IÄ�½�¸¿ ¼³�º�À ¼�´1±�É »�º�Ç�º�²�Ê�ß�À�³�Â6Ã1Ä ¿ Â�Å Â�º¼?º�²�É »¼�´ Ù ½'µ�»¼ ²+»É1Ê)±�³�² Ê×Æ�µ ±�±�Ç�Ä�½�¸¿ ¼³�º�À ¼�´1±�É »�º�Ç�º�²�Ê�ß�À�³�Â6Ã-¼�³�µ�Á Ë Ñ�Í,Õy»�ÀlÊ�Â!½�¸¿ ¼³�º�À ¼�´1±�É »�º�Ç�º�²�Ê�ß�À�³�Â6Ã1Ä�Ï » Ó�Ñ Â�³�Â�À�»�á�À8Ñ�Å'¶�Ñ�Ç4À�»�á�À8Ñ�Å�Ï »!Ä�½�¸¿ ¼³�º�À ¼�´1±�É »�º�Ç�º�²�Ê�ß�À�³�Â6Ã1Ä�À�»�Æ+»�²¼?Â�â�µ ¿ ¼ ¿ ´�´�´1Ï »!Ä�½�¸¿ ¼³�º�À ¼�´1±�É »�º�Ç�º�²�Ê�ß�À�³�Â6Ã1Ä ¿ Â�Å Â�º¼)Ä�½�¸¿ ¼³�º�ß�Ò6´1±�É »�º�Ç�Ñ�µ Å�±�Ã1Ä�Ä�½�¸± ²�³�´�µ�¶Ú ¶�·�¸jÚ8¹�º�»�¼�¸yÚ ¶�ã Ù Ì�Ì�µ�½¾

¿ ¼�³�º�À ¼�´�±�É »�º�Ç�Ñ�µ8Å�±�Ã1ÄO»�Â�Ó�ÇtÄ�½�¸¿ ¼�³�º�À ¼�´�±�É »�º�Ç�Ñ�µ8Å�±�Ã-¼�À�ÈÅ Â Ç�º�²�Å�É1Ê�» ¿4Ë Ú�Í�½�¸¿ ¼�³�º�À ¼�´�±�É »�º�Ç�Ñ�µ8Å�±�Ã1Ä�ÃGÏ »+²Å Æ�ÇtÄ�½�¸¿ ¼�³�º�À ¼�´�±�É »�º�Ç�Ñ�µ8Å�±�Ã-¼�À�ÈÅ Â Ç�º�²�Å�É1Ê�» ¿4Ë Ú�Í�½�¸¿ ¼�³�º�À ¼�´�±�É »�º�Ç�Ñ�µ8Å�±�Ã1Ä�Ã1Ä�½�¸

Page 164: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 158

äå�æ ç�è é�ê�ë8ì�å�íoîïð ì ñ�ç!ò1å�æ ç�è�é�êë ì�å�ó ô õ�ö@÷ùø/ú�ûtø�üîïð�è�ý ï�ò1å�æ ç�è�é�ê�ë ì�å�þ1ÿ=åð�������ë å�å1é�ÿ�ó�üîïð�è�ý ï�ò1å�æ ç�è�é�ê�ë ì�å�þ-ï�ð�ë���í�êö��yç�ý��ñ!ó�üîïð�è�ý ï�ò1å�æ ç�è�é�è������ý�ð�ñ6þ-å�æ ç�è�é�ê�ë ì�å�ó�üîïð�è�ý ï�ò1å�æ ç�è�é�è������ý�ð�ñ6þ1ÿ�ú ç� �ê ñ�ð�ñ�ý�ç��ý ê�ì'÷�ê�é!ý�ç���ý ê�ì�ó�ú ç!ÿ�ó�üîïð�è�ý ï�ò1å�æ ç�è�é�è������ý�ð�ñ6þ1ÿ��4ë�çæ î!òOî�ñì ñ�èï)ÿ�ó�üîïð�è�ý ï�ò1å�æ ç�è�é�è������ý�ð�ñ6þ-å�æ ç�è�é�ê�ë ì�å�ó�üîïð�è�ý ï�ò1å�æ ç�è�é�è������ý�ð�ñ6þ1ÿ�ú ç� �ê ñ�ð�ñ�ý�ç��ý ê�ì'÷)ë�ó�ó@æ ç�ë���çú ç!ÿ�ó�üîïð�è�ý ï�ò1å�æ ç�è�é�è������ý�ð�ñ6þ1ÿ�ò�òlî�ñ�ì ñ�è�ï)ÿ�ó�üîïð�è�ý ï�ò1å�æ ç�è�é�è������ý�ð�ñ6þ-å�æ ç�è�é�ê�ë ì�å�ó�üîïð�è�ý ï�ò1å�æ ç�è�é�è������ý�ð�ñ6þ1ÿ� �ê ñ�ð�ñ�ý�ç���ý ê�ìª÷)ë�ó�ú çIÿ�ó�üîïð�è�ý ï�ò1å�æ ç�è�é�è������ý�ð�ñ6þ1ÿ��4ë�çæ î!òOî�ñì ñ�èï)ÿ�ó�üîïð�è�ý ï�ò1å�æ ç�è�é�è������ý�ð�ñ6þ-å�æ ç�è�é�ê�ë ì�å�ó�üîïð�è�ý ï�ò1å�æ ç�è�é�è������ý�ð�ñ6þ1ÿ� �ê ñ�ð�ñ�ý�ç���ý ê�ìª÷�ê1é4ý�ç���ý8ê�ì�ó�ó�ó�ü-ú çIÿ�ó�üîïð�è�ý ï�ò1å�æ ç�è�é�è������ý�ð�ñ6þ1ÿOî�ñ�ì ñ�èï?è��æ çï�ò��!ó'ë�çï��+çæ��4õ å�ð�������ë8å�å�étÿ�ó�üîïð�è�ý ï�ò1å�æ ç�è�é�è������ý�ð�ñ6þ-ï�ð�ë���í�ê�ö��yç�ý��ñ!ó�üîïð�è�ý ï�ò1å�æ ç�è�é�è������ý�ð�ñ6þ1ÿ� �ê ñ�ð�ñ�ý�ç���ý ê�ìª÷�ê1é4ý�ç���ý8ê�ì�ü-ú ç!ÿ�ó�üîïð�è�ý ï�ò1å�æ ç�è�é�è������ý�ð�ñ6þ1ÿ�ë å?ç�æ��*÷�û+ï�ê ñ�ç�ú çIÿ�ó�üîïð�è�ý ï�ò1å�æ ç�è�é�è������ý�ð�ñ6þ1ÿ ç�æ����ñ�ð�� ÷*çæ����ñ�ð���õ,ü/ú ç!ÿ�ó�üîïð�è�ý ï�ò1å�æ ç�è�é�è������ý�ð�ñ6þ1ÿOñ�ç���ë å�ü-ú ç+ñ�ç��×ë8å�ü-ú ç�ú çIÿ�ó�ü

ä � ��å���ð ê�� �îï�ð�è�ý ï�ò�å�æ ç�è é�è������ý�ð�ñFþ�ÿ�ú ç!ÿ�ó�üîï�ð�è�ý ï�ò�å�æ ç�è é�è������ý�ð�ñFþ�ÿ�ë8å)ò�òOç�æ�����ñ�ð@÷�û�ó ��ð�ò�ë=÷�ê�é!ý�ç���ý ê�ì�ô�õ�ó�ó@ï�ê ñ�çú ç!ÿ�ó�üîï�ð�è�ý ï�ò�å�æ ç�è é�è������ý�ð�ñFþ�ÿ�ð�ñï�æ�ð�ç%òlçæ�����ñ�ð�ó�ü-ú ç!ÿ�ó�üîï�ð�è�ý ï�ò�å�æ ç�è é�è������ý�ð�ñFþ�ÿ©ñ!�ë ï�ü-ú ç+ñ�ç��×ë8å�ü-ú ç!ÿ�ó�üîï�ð�è�ý ï�ò�å�æ ç�è é�è������ý�ð�ñFþ�ÿOñ�ç��ì�����Fü/ú çIÿ�ó�üîï�ð�è�ý ï�ò�å�æ ç�è é�è������ý�ð�ñFþ�ÿOñ�ç�Fü�ÿ�ó�üî�ñ�ç���ñ�é�"ì���è�#�ò�å�æ ç�è é�è������ý�ð�ñIó�ü

� � ��ð�ë�ç�ï�å�ò�ÿ�å�æ ç�è$�&%�îú ç!ÿ�þ-å�æ ç�è�é�è������ý�ð�ñ!ó�ü&� �� ��'�ð���ñæ���ñ�ç(��ñ�î�)�ð�ë����ñ�ð�î(��ë8å�å�é�ï�ð�ë��*�,+ ñ�ð-)�ð�ë����ñ�ð,þ&��ñ�ð+ý æ�å?ñ�ë�ç�ñ.'�ë�çå�æ ñ��æ ç�

ë�ç(��ë�ñ/)�ý�"�ñ�ì�ì ñ(��ð��ï���#��ì�ì*ð�ñ�ý���ë�ñ�ð8ï+æ ç�(��ë�ñ/0�ë�è�ê ñ�ð8æ ç��1��ñ�ð/+�ë8å�å ñ�ð�ñ�ç��ôï�ý�"�ñì�ì ñ�ç(2��ð�ç�ë3���ï4ì�ý8æ���ë�ý-5�ñêð ê�ý8ê çFþ76�ý�ç�æ�ý�ð+õ�8�8:9 � �îï�ð�è��;Fò�ïð�ë�����ñ�ð.þ�ÿlè�ð�ñ�ý ï ñ(��ðxð�ñ��ì�ý�è�ñ*ïð�ë����ñ�ð���ë å�å�é�ïð�ë��ú çIÿ�ó�ü � �

< ë8ì�å î�ï�ð�ë����ñ�ð#����å�� �îï�ð�è�ý ï�ò�ïð�ë�����ñ�ð.þ�ÿ�ý å�ï ñ�ð+ë�ç�î�ñ�ð8ï���ç(��ð���ï��=#��ì�ì�ú ç!ÿ�ó�üîï�ð�è�ý ï�ò�ïð�ë�����ñ�ð.þ�ÿ1å���ð'ñ�ý�èê*ð��� �ú ç!ÿ�ó�üîï�ð�è�ý ï�ò�ïð�ë�����ñ�ð.þ�ÿ��ñ�è�ì�ý�ð�ñú ç!ÿ�ó�üîï�ð�è�ý ï�ò�ïð�ë�����ñ�ð.þ�ÿ #'çæ���"�ñ�ð.ü/ú ç!ÿ�ó�üîï�ð�è�ý ï�ò�ïð�ë�����ñ�ð.þ�ÿ"�ñ��ë�çú ç!ÿ�ó�üîï�ð�è�ý ï�ò�ïð�ë�����ñ�ð.þ�ÿ�#�� ÷=>�ü/ú ç!ÿ�ó�üå���ð�ò�ë1÷�ûtüDë�?�ï�ð�ë���é�è�çïtüDë����!ó@

� �BA����ë�ñ(��ñ�ð æ�����ý8ï ñB+�ë8å�å ñ�ð�ñ�ç��ïý�"�ñ�ì�ì ñ(� �îïð�è�ý ï�ò1ï�ð�ë����ñ�ð,þ1ÿ�ë�ç�î�ñ�ð ï*ë�ç�ï��(��ë8å�å�étÿ�ó�üîïð�è�ý ï�ò1ï�ð�ë����ñ�ð,þ-ï�ð�ë���í ë�ö��yç�ý3��ñ!ó�üîïð�è�ý ï�ò1ï�ð�ë����ñ�ð,þ1ÿ©î�ñì ñ�èï+æ1é�ÿ�ó�üîïð�è�ý ï�ò1ï�ð�ë����ñ�ð,þ-ï�ð�ë���í ë�ö��yç�ý3��ñ!ó�üîïð�è�ý ï�ò1ï�ð�ë����ñ�ð,þ1ÿC�D�6þ/û+å�ð����)æ�étÿ�ó�ü

Page 165: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 159

E:F:G�H=I�FCJ�FKG�L�MM�N�G�OPFKG�L�MRQ�LS�TDU�I3V�NXWRYE:F:G�H=I�FCJ�FKG�L�MM�N�G�O�ZCYP[�UXZ�WCY\�]B^�_` L�N(aN�G/bKLdce�fCg(hKLdee�N=G�NU�i:F:I�jN�cc�N ]�\E:F:G�H=I�FCJ�FKG�L�MM�N�G�O�Z�L�UEN=G�FkL�U�F _ a�Ldee�flZWCYE:F:G�H=I�FCJ�FKG�L�MM�N�G�OPFKG�L�MRQ�LS�TDU�I3V�NXWRYE:F:G�H=I�FCJ�FKG�L�MM�N�G�O�Z EN:c�NH:F(b:L�ce�fCg�fmZWRYE:F:G�H=I�FCJ�FKG�L�MM�N�G�OPFKG�L�MRQ�LS�TDU�I3V�NXWRYE:F:G�H=I�FCJ�FKG�L�MM�N�G�O�ZCT ] O�n(eKG _ VobKLdce�fCg�flZWCYE:F:G�H=I�FCJ�FKG�L�MM�N�G�OPFKG�L�MRQ�LS�TDU�I3V�NXWRYE:F:G�H=I�FCJ�FKG�L�MM�N�G�O�ZCYP[�UXZ�WCY\�]B^�_` L�N(aN�G�aN�c�N�F�NBhKLdee�N=G�NU�i:F:I�jN�cc�N ]�\E:F:G�H=I�FCJ�FKG�L�MM�N�G�O�Z�L�UEN=G�FkL�U�F _ a�Ldee�flZWCYE:F:G�H=I�FCJ�FKG�L�MM�N�G�OPFKG�L�MRQ�LS�TDU�I3V�NXWRYE:F:G�H=I�FCJ�FKG�L�MM�N�G�O�Z EN:c�NH:F�a�fmZWRYE:F:G�H=I�FCJ�FKG�L�MM�N�G�OPFKG�L�MRQ�LS�TDU�I3V�NXWRYE:F:G�H=I�FCJ�FKG�L�MM�N�G�O�ZCT ] O-ZWCYe _ G.J�p�q=nmYDp�rKH _ c�fXI�U�iRQ�L�S�Ysp�ttuWvE�FKG�H�I�FRJ�FKG�L�M�MN�GwO�Z-xy�zzmO�ZWRYE:F:G�H=I�FCJ�FKG�L�MM�N�G�O�Z�x�yzzlO�n(e:G _ V�a�fmZWRYE:F:G�H=I�FCJ�FKG�L�MM�N�G�OPFKG�L�MRQ�LS�TDU�I3V�NXWRYE:F:G�H=I�FCJ�FKG�L�MM�N�G�O�ZCYP[�UXZ�WCY\�]B^�_` L�N(aN�G/bKLdce�f�aBhKLdee�N=G�NU�i:F:I�jN�cc�N ]�\E:F:G�H=I�FCJ�FKG�L�MM�N�G�O�Z�L�UEN=G�FkL�U�F _ a�Ldee�flZWCYE:F:G�H=I�FCJ�FKG�L�MM�N�G�OPFKG�L�MRQ�LS�TDU�I3V�NXWRYE:F:G�H=I�FCJ�FKG�L�MM�N�G�O�Z EN:c�NH:F(b:L�ce�f�a�fmZWRYE:F:G�H=I�FCJ�FKG�L�MM�N�G�OPFKG�L�MRQ�LS�TDU�I3V�NXWRYE:F:G�H=I�FCJ�FKG�L�MM�N�G�O�ZCT ] O-ZWCYe _ G.J�p�q=nmYDp�rKH _ c�fXI�U�iRQ�L�S�Ysp�ttuWvE�FKG�H�I�FRJ�FKG�L�M�MN�GwO�Z-xy�zzmO�ZWRYE:F:G�H=I�FCJ�FKG�L�MM�N�G�O�Z�x�yzzlO�n(e:G _ Vob:L�ce�f�a�flZWRYE:F:G�H=I�FCJ�FKG�L�MM�N�G�OPFKG�L�MRQ�LS�TDU�I3V�NXWRYE:F:G�H=I�FCJ�FKG�L�MM�N�G�O�ZCYP[�UXZ�WCY\�]B^�_` L�N(aN�G(L�U�EN=G�F(hKLdee�N=G�NU�i:F:I�jN�cc�N ]�\E:F:G�H=I�FCJ�FKG�L�MM�N�G�O�Z�L�UEN=G�FkL�U�F _ a�Ldee�flZWCYE:F:G�H=I�FCJ�FKG�L�MM�N�G�OPFKG�L�MRQ�LS�TDU�I3V�NXWRYE:F:G�H=I�FCJ�FKG�L�MM�N�G�O�Z EN:c�NH:FoZ�WCYe _ G.J�p�q=nmYDp�rKH _ c�fXI�U�iRQ�L�S�Ysp�ttuWvE�FKG�H�I�FRJ�FKG�L�M�MN�GwO�Z-xy�zzmO�ZWRYE:F:G�H=I�FCJ�FKG�L�MM�N�G�O�Z�L3fmZWRYE:F:G�H=I�FCJ�FKG�L�MM�N�G�OPFKG�L�MRQ�LS�TDU�I3V�NXWRYE:F:G�H=I�FCJ�FKG�L�MM�N�G�O�ZCT ] O�n(eKG _ V{LflZWRYE:F:G�H=I�FCJ�FKG�L�MM�N�G�OPFKG�L�MRQ�LS�TDU�I3V�NXWRYE:F:G�H=I�FCJ�FKG�L�MM�N�G�O�ZCYP[�UXZ�WCY

\�]B^�_` L�N(aN�G/bKLdce�f|L/hKLdee�N=G�NU�i:F:I�jN�cc�N ]�\E:F:G�H=I�FCJ�FKG�L�MM�N�G�O�Z�L�UEN=G�FkL�U�F _ a�Ldee�flZWCYE:F:G�H=I�FCJ�FKG�L�MM�N�G�OPFKG�L�MRQ�LS�TDU�I3V�NXWRYE:F:G�H=I�FCJ�FKG�L�MM�N�G�O�Z EN:c�NH:FoZ�WCYe _ G.J�p�q=nmYDp�rKH _ c�fXI�U�iRQ�L�S�Ysp�ttuWvE�FKG�H�I�FRJ�FKG�L�M�MN�GwO�Z-xy�zzmO�ZWRYE:F:G�H=I�FCJ�FKG�L�MM�N�G�O�Z�b:L�ce�f|LflZWRYE:F:G�H=I�FCJ�FKG�L�MM�N�G�OPFKG�L�MRQ�LS�TDU�I3V�NXWRYE:F:G�H=I�FCJ�FKG�L�MM�N�G�O�ZCT ] O�n(eKG _ VobKLdce�f|LflZWCYE:F:G�H=I�FCJ�FKG�L�MM�N�G�OPFKG�L�MRQ�LS�TDU�I3V�NXWRYE:F:G�H=I�FCJ�FKG�L�MM�N�G�O�ZCYP[�UXZ�WCYE:F:G�H=I�FCJ�FKG�L�MM�N�G�O�Z�g ` a�IdF�N(a�Ldee�flZWRY

Page 166: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 160

}:~:���=��~C��~K������������P~K�����R������D���3���X�R�}:~:���=��~C��~K�������������� }�:~k�������d������s������s�=��������=���C���=������R�}:~:���=��~C��~K���������������������d����.�m�����X���C��

}:~K������~R��~:���������w�������o�C�s�������s�����:���������.���-~�����������C�}:~K������~R��~:���������w���  ��¡�K¢=�����£���¤���¥=����u�C�D������s�=���:�������=�C�P���X���C�}:~K������~R��~:���������w�������k -¦o�/~�����k���X���C�}:~K������~R��~:���������w���������}��£|��¥¥:�:���=��~K��¤��£�������¤��=��§�¨�����¨m��©¡ª:����~������(¢��« �����}=��~:��¤��}:~K��¬��������(}�����¢1�����=���:�l�­��}(������¤:���:~������B®�¯:°°�±�²�³:´m��©��C�P���u��C�}:~K������~R��~:���������w�����¢.���l�����X��R�}:~K������~R��~:���������w�����¢.���l�����X��R�}:~K������~R��~:���������w�����¢$�����u��R�}���¢��£�¬:��¤�� =��~K����������=�C�µ�¶ ¥=�����~�R�� « �������=���&·}:���X�R��~K����������=�C� ¶:µ���:~�¸K���¹�� µ�¶ ¬�¸K����¢�£R~K������=�£X���¢�£C~K��¬X��� ¶�µ

µ�¶ £�££�£££�£££�££�£££�££�£££�£££�££�£££�£££�££�£££�££�£££�£££�££�£££�£££�££�£££�£££�££�£££�££�£££ ¶:µµ�¶»º �:�:����:¸��£C~�¤�£�}�~K�=�¼�½ «C¾�¿R¾ ®R� ºÀ¶:µµ�¶»º ºÀ¶�µµ�¶»º�Á ¸��� �~:��¤�$�ªC����¢���~��������(Ã������o���m���sÄÄu�����(������(Ã�����:����� ��:~~��B¸���� ºÀ¶�µµ�¶»º £�££�£££�£££�££�£££�££�£££�£££�££�£££�£££�££�£££�£££�££�£££�££�£££�£££�££�£££�£££�££�£££�£££�££ ºÀ¶:µ�:�:�� ¶ ��¸��£R~�¤�£�}:~:������¸��l�����~���¸����Å����~Æ�����l��:�:���}:~:�:�3Ç=����:�:���¢:¸�����¨:���

¢:¸���������È©����m©����o��:¸����Ä�Ä º�º ��¸��:¦��C�

���:~¸:���u����=����R� µ�¶ �K������}(�����:�~k�3�BÃ=�����¬�=�������:�(�m���sÄÄ ¶�µ}:~:����¥�É*�}:~:��������C����o��:¸����Äu�Å ���K�:¸�� µ ���m�

��¸��k�k�:¸���·.���l�¢�¸������K�-��©��l©sÊ.���}�~K���=��~R��}:~:���s¢�¸��l�C��

¢:¸������K�-��©��m©DÊ�:¸����}:~:���=��~C�}:~:���s¢�¸��m�R�����~¸:���X�}:~:���C�� µ�¶ ��¸��£R~�¤�£�}:~:���� ¶�µ

µ�¶ £�££�£££�£££�££�£££�££�£££�£££�££�£££�£££�££�£££�££�£££�£££�££�£££�£££�££�£££�£££�££�£££�££�£££ ¶:µµ�¶»º  �¤�¥����=���X�ÌË « ®K���ÍË « ®¨m�P° ¾ ½R� ºÀ¶:µµ�¶»º ºÀ¶�µµ�¶»º�Á ¸��� �~:��¤�$�,´�¤¥=���=��~�¢����(�=��}:~���B° ¾ ½1±ÉX~��}(Τ���Ë « ®¨��=���:��Ë « ®K�w� ºÀ¶�µµ�¶»º ª�¸:��¢�(��¤�:~:���*�&¢=�Ï}�~K�����¥�É*�� �=���:��~Æ�������~K���B�¸��= �~K��¤�=�����d~��*� ºÀ¶�µµ�¶»º £�££�£££�£££�££�£££�££�£££�£££�££�£££�£££�££�£££�£££�££�£££�££�£££�£££�££�£££�£££�££�£££�£££�££ ºÀ¶:µ

Page 167: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 161

Ð:Ñ:ÒÓ�Ô�Õ�Ö×�Ø�Ù�Ó�ÙuÚ�Ð�ÑKÛ�ÜDÐ:Ñ�ÝmÜ�Þ�ÙßXàÐ:Ñ:ÒÓ�Ð:Ñ:Û:á�âwÜsÐ:Ñ�Ý�á�â�ãØ�ß�ä1Þ�Ùß$ãåØ�ß�äÆØwãçæ

Ö=Ó.Ú�Ø�è=émãêØ�ë=Þ�Ùß¹ãêØ�ì�ìXàÐ:ÑKÛ�á�Ø�â�èKÐ�ÑÝ�á�Øâwã

Ð:Ñ:Û:á�Þ�Ùß=â�èÈí�îélíãï�ð Ô.Õ�Ö�×�Ø�Ù=Ó�ÙXÚ�à Ô ð

ð Ôòñ�ññ�ñññ�ñññ�ññ�ñññ�ññ�ñññ�ñññ�ññ�ñññ�ñññ�ññ�ñññ�ññ�ñññ�ñññ�ññ�ñññ�ñññ�ññ�ñññ�ñññ�ññ�ñññ�ññ�ñññ�Ô ðð Ô»ó7ôõ�Þ�Ù�Ó�Ó�Ö�Ó=Úà óÀÔ ðð Ô»ó óÀÔ ðð Ô»ó�ö�÷�ß�Õ�ä:Ø�Öß$øÂùCØ�ú�äkö�Ù:Ñ�Þ�Ù�Ó3û�Ù�Þ�ü:÷�ßý(úÙ=ØÏÙ=Ø�ß�Ù�û�þ�Ó�Ò�Ð:Þ�ÙRÿ�ö�Ù:Ñ�Þ�Ù�Ó(Ò�÷�ô�� óÀÔ ðð Ô»ó ñ�ññ�ñññ�ñññ�ññ�ñññ�ññ�ñññ�ñññ�ññ�ñññ�ñññ�ññ�ñññ�ñññ�ññ�ñññ�ññ�ñññ�ñññ�ññ�ñññ�ñññ�ññ�ñññ�ñññ�ññ óÀÔ ð� Ö=Ø�ü(ôõ�Þ�Ù�Ó�Ó�Ö�Ó=Úàå

ØæÚæÙ:Ñ�Þ�Ù=Ó�èèuÿ�Û�àå×=ÓØ�ß�ä

æÚ���î�ß:î�ß��KØ�ÙôÙ=Ó���Ùß�÷ä�Ù�Ó�ß�Òû�Ù��XØÓ�ü�ûXØ�ä�ü�Ø�ÙôÙ�û� �Ùß�ß���Ö�Ó�ä��àCã

×=ÓØ�ß�äæÚ�� � Öß(þ�������������ß=Ø�Ð:Ñ�äkÒÕ��Ù×�äKØ�Ù=Ó�ä�� î�ß:î�ß��àCã

Ù���ØdäCÚ�ÿ�Û�àRãï×�Ó�Ø�ß�ä

æÚ���î�ßþ�Ó�Ò�Ð:Þ�ÙRÿ�ö�Ù:Ñ�Þ�Ù�Ówø! �� Û��é�ôkî�ß"�CÜDôõ�Þ�Ð�Ò#�sôõ�Þ�Ù=ÓÓû$�sô�õ:Þ�Ù=ÓÓû�ÐXàRã

×�Ó�Ø�ß�äæÚ���î�ß&%CØ�Ù�ûR÷�Ù�ôôÙ�ß�Ø�ß�%�'(�()&��*�%kü�Ø�Ù�+RÒ�úÙ�ÞÞ�Ùß*Ü,+CÓ�Ø�ý�ýÙ�Ó/÷�ßü"��àCã

×�Ó�Ø�ß�äæÚ���)Ó�Ö�Ùü�÷KÓ�ÙßBî�ß�û|ØdäÏë�-Kü=Ó�Ö×�ñ|Ò�Þ�Þ.(Ùß�ä æ Ù�Ó�ß�Ùß��Pî�ß��àCã

æÙ�ÑÞ�Ù�Ó�èRÛ�ãÞ�Ö�ßý�/�û�×uÚ0/�û�×�ñ�Ù�ÓÓwÜ Û=àCã

ï ð Ô(ô�õ:Þ�Ù=ÓÓ�Ö�Ó�Ú�àvÔ ðð Ôòñ�ññ�ñññ�ñññ�ññ�ñññ�ññ�ñññ�ñññ�ññ�ñññ�ñññ�ññ�ñññ�ññ�ñññ�ñññ�ññ�ñññ�ñññ�ññ�ñññ�ñññ�ññ�ñññ�ññ�ñññ�Ô ðð Ô»ó7ôõ�Þ��|Ò�Ó�ßXÚ�à óÀÔ ðð Ô»ó óÀÔ ðð Ô»ó�ö�÷�ß�Õ�ä:Ø�Öß$øÂùCØ�ú�ä�1CÒÓ�ß:÷�ß�ý(úÙ�Ø�Ù=Ø�ßÙ=ÓÏþ=ÓÒ�Ð:Þ�Ù|ÿ01RÒÓ�ß�÷�ßý.Òd÷�ô�� óÀÔ ðð Ô»ó ñ�ññ�ñññ�ñññ�ññ�ñññ�ññ�ñññ�ñññ�ññ�ñññ�ñññ�ññ�ñññ�ñññ�ññ�ñññ�ññ�ñññ�ñññ�ññ�ñññ�ñññ�ññ�ñññ�ñññ�ññ óÀÔ ð� Ö=Ø�ü(ôõ�Þ��|Ò�Ó�ßXÚ�àå

×�Ó�Ø�ß�äæÚ���î�ß"2�û��÷�û�× æ � Öß�+CÓ�Ø�ýý�Ù�Ó� ô.Ø�ô�ä�Ù�Ø�ß.ö�Ù:ÑÞ�Ù�Ó3� î�ß"�CÜä:ÓØ�ý|á�Ò�Õ�ä�ñRäKÓØ�ý�â#�sß�Ò3û�ÙuàCã

×�Ó�Ø�ß�äæÚ���î�ß�4�5�ñ��þ�4�4�26+��|ØÓ�ü(ß�Ø�Ð�Ñä æ ÷�ß�Õ�ä:Ø�Ö�ß�Ø�Ù=Ó�Ùß7��î�ß"�àRã

×�Ó�Ø�ß�äæÚ���î�ß&%CØ�Ù�ûR÷�Ù�ôôÙ�ß�Ø�ß�%�'(�()&��*�%kü�Ø�Ù�+RÒ�úÙ�ÞÞ�Ùß*Ü,+CÓ�Ø�ý�ýÙ�Ó/÷�ßü"��àCã

×�Ó�Ø�ß�äæÚ���)Ó�Ö�Ùü�÷KÓ�Ùß:î�ß�ûXØ�ä�ë�-:ü�Ó�Ö×�ñXÒ�ÞÞ&.(Ùß:ä æ Ù=Ó�ßÙ�ß���î�ß"��àCã

æÙ�ÑÞ�Ù�Ó�èRÛ�ãÞ�Ö�ßý�/�û�×uÚ0/�û�×�ñ�Ù�ÓÓwÜ�ÝRàCã

ï ð Ô(ô�õ:Þ��XÒÓ�ßXÚà Ô ð

Page 168: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 162

89;:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:<9(889>=@?BA�C�D"E�F =G9�889>=H:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:I=G9(8J�K C�LM?BA�C�D"E�FN O�P�Q�R(S&T ?�U�E T ?VU�: RVW�W FYX 8&9[Z(U W&\ D�]?BA W�^�R_Q�R�S`�R D_9(8a&b�a�c Z�d(e�fhg a&i(a�jVa�k Z�d(e a&k�k&l(k_ml Q�n(oRhW�W�KhW E�FYXa&b�a�c Z�d(e�fhg a&i(a�jVa�k Z�d(e�f&p k�iYqri�stml Q�n�o�O A W D�E�FYXKVW A�u o&R : o&K ]VC�D"E�FYX 8&9 a C�D o&K ]�] R D_9�8L KN O�P(Q�R�ST ?VU"E T ?�U: RVW�W F�X 8&9[Z(U W�\ D�]?BA W�^�R_Q�R�S`�R D_9(8A ^�S : S�W C�] Phv Xw R�x�o&RVW�Phv XS�W C�]:�u�D S�Phv Xy \ C o L�:�U W�K u PVv X

89�z W C�]�] RhW�^�K�R U(w R{oR�Q�R D_yVC Q w R(x�oRVW w W�R C�] R(o�\ D�] R D_9(8OYx C o&R E W�R A�L�: S(W C�]�] RhW E�Fh| PVv FC�w}E S�W C�]�:Vu�D S&~(v FS(W C�]�:�u�D S�PVv Xw KhW E `&Phv X `&�VS(W C�]:�u�D S X `���� FU W C�D S w�E����&D&z W C�]�] RVW�� L�� ��Q A \ w�z�A�y R(o�o&R���Q �&D"�Y� `��V� �S(W C�]�� `h��� DVA�? R � S(W C�]�� `h����S A�y oR F�X89 m�klV� :�p�e�e � Z�d(e m A SR C RVW�`�R(\ ] R D_9(8L W�K U:BA o�o :VL R w�E�FYX89 a W�`�R�\ ] R m C&w�w RVW�R D `�S A�y R(o�oR D \ D�L{g�C o w Q�S�W C�]�] RVW 9(8y \ C o L�: S(W C�]�] RhW :BA�D�L: S A�y"E�F�X89 o&R�Q�R jB� z W C�]�] RVW ��k \&R ?�U�w R{\ D�L RVW�`�R(\ ] R LVA W A \&Q � W�K�`�R L \�W�R D_9(8U W C�D S wYE�� J�KVW_W�R A�L�:Vy oK u ^ ��FYXW�R A�L:�y o&K u ^ E�F�XU W C�D S wYE��0DhA�u x�W�R A�L:�y o&K u ^ ��F�XC&w�Erw R(x�oRhW�P�P<v FN 8&9 RhW�`�R(\ ] R_��� : c�l ��� q z �� W�K�`�R L \�W 9(8?�(:Vu K ?�?BC S E�F�X

8&9[z RVW ?BC�DhC RVW�\ D�] Q � z R�Q(S 9(8S&RVW ?"C�DhA SR E�FYX8&9�� K D�w o�\&R D ` � z R�Q(S 9�8u K D(w o�\&R D�u R E�F�X�� O�x C oR E�w R(x�o&RVW | PVv FYXKVW A�u o&R : oK ] K(\�S E�F�XU W C�D S wYE��r�D�p o�o&R�J�RVW�`�K�R ] RVW�SR D[z W C�]�] RhW�O�\�W L R DtC�D Q(S A o�o C RhW&S�� �D"��FYXR�� C S E v FYX�

Page 169: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 163

Das Modul ���I�7��� �¢¡7�#�¤£�¥$�"¦�§� :©ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�©©ª_«�¬�­(®��°²±�³��µ�¶�Y·�µr¶Y&¹(µº ª(©©ª ª�©©ª{µ�»�¼�½�¼<¾�®¿VÀ�Á�»�¬�¿�¼�¿{¼�½�¼�¿_­V»�¼[Â�Ã�»�Ä�Ä�¼hÃ�À�¬�¼�Å�Ƽ{®¿�­_¼hÃ�½(Á&¼(�¼�¿_­V»�¼ ª�©©ª{±�»��Æ&½(Á�Ç�È�¼(�¼�¿�®&¿�­_­�¼�¿<³�»�¿�Æ�®¼�Ä�¼�Á�Ã�»�Ä�Ä�¼hà ª(©©ª ª�©©ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�©©ªMY®�Á¬hÃ�°!«VÇ�Ã�É(®&½[Ê�»�¿hÀ&¼hà ª ¼hÃ�Ë�¼h»&Á&¼VÃ&ÁÌ°ÎÍ��Ç�®­V»�ÇÏÊ�¼(Ð(Ã&Ð�Ç�п ª(©©ª Ñ�ÒÔÓÖÕh®�(»�Ñ�×�×&Ò ª µ¼�Ø�¼�ÙVÈ�¼VÃ�©�Õ�Ç�¿(®(Ç�Ã_Ñ�×�×�Ú_ª(©©ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�ª�©Û »�¿�É(�®­�¼ÝÜÞÙBÇ�»�¿�ÓÞÐYÜÛ ­�¼(Æ�»�¿�¼�ßY³�³&à�¶(ßY³rÂ<áÛ ­�¼(Æ�»�¿�¼�ßY³�³&à�¶VÍ(â�ãäÑÛ ­�¼(Æ�»�¿�¼_¼�¿�­�¼3Ü0¼�¿�­"Ü©ª;¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶<ª(©©ª>å Ä�¼�Á�¶�Á¬VÀ�¼�¿"æ�¾&µÌçèÍ�çéÍ(·�Â#ê åGª(©©ª>å åGª�©©ª>åë¾&®&¿VÀ&Á(»�¬�¿7°²ì�»�¼�½(Á�Ç&®&½�­�¼VÃ�­(®(Ã�É�ÐM­�¼�¿t¾�»�¼�­�¼�½hÀ�Ã�»�Å(Á¬hÃ_¾&µ�Ç�¿�Ä�¼�Ä�¼�È�¼�¿�¼�¿ åGª�©©ª>å µ�Ç�Á¼V»�­hÇ�½_¿VÇ�¼�É(Ð&½(Á¼�Ê�¬hÃ&Á[­�¼hÃ�ì�Ç�¼�¿�Ä�¼_Í�·� åíª(©©ª>åH¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶�¶IåGª(©É(Ð(Ç�Ã�ª�Ä�¼(Á�¶�Á¬VÀ�¼�¿�æ�Æ­7çèÉ7çèÉ�¿�ÁYê»�¿�Á�Æ&­�çª�É�î¬�¿�Ä_ª�É�¿(Á�îï»�¿�ÁM­7çÉ�¬�®¿(Á�ð�ª�É�¿(ÁÌî ©ªtñ�¬�½V»�Á�»�¬�¿_­�¼�½t¾�»&¼�Å�¬V»�¿(Á&¼VÃ�½_ª�©É(Ð(Ç�ÃòË�¬hÃ&ÁVó�Ê�¹(ã�ÂVì(³&·�ô#îÉ(Ð(Ç�Ã�É(Ðhó�õ�ô#î½(Á(Ã�É�Å�ö�æÞË�¬hÃ&Á�çrÜ�÷�á�Ü�ê�î ©&ª�Ø�®¿hÇ�¼�É�н�Á�ì&¼�¼VÃ�½(Á(Ã�»�¿�Ä_ª(©

©ª{®&¼�È�¼hÃ&&¼�½�¼�¿�ø�¬�¿{ì¼�¼VÃ�ù�®�Ó!ú�¼h»&&¼�¿�¼�¿�­�¼�Ø�¼h»�É(Ð&¼�¿_ª(©ËYÐ(»&&¼Ýæ�æ0­�ðVÆÄ�¼(ÁÉ�æ�Æ&­"ê�êhûèðY³�¹V¾�ü�ü3æ�­&ð�ð(ý(õþå�åÖ­&ð�ðYÑ�áÿå�å ­�ð�ð(×"ê�ê�î»&Æ�æ�­Ìûèð�³�¹h¾Vêï ­�¬ ©&ª�¿hÇ�¼�É(н�Á¼_ú�¼h»�É(Ð&¼�¿hÀ�¼(Á�Á¼_ÈV»�½�ì&¼�¼VÃ�ù ¬7ÓÎú�¼V»�¼�¿�¼�¿�­�¼�Ø�¼V»�É�м�¿_ª�©ï É�ÐVó�á�ô�ð(­�îÉ�ÐVó&Ñ�ô�ð � ÷�á � î

©&ªtÇ&®½�½�¼hÃ�» ÙäÂ�Ã�»�Ä�Ä�¼hÃ�Ã�®�Ù�Å�Æ�à�¼h»�¿�È�®É(Ð&½(Á(Ç�È�¼�¿_ª(©»�Æ�æVû È�®�»�­�¶VÅVÃ�¬�É_ü�ü_É(Ðhó�á�ô��&ð � ´ � ü�ü_É�ÐVó�á(ô���ð � ú � êÉ(ÐVó�á�ôrðVÁ¬�¬�ËV¼VÃhæ0É(Ðhó�á(ôVêYî½�Á�Ã�ÉVÇ&Á�æ�ËV¬VÃ&ÁÌçèÉ(Ð�êYî� ËYÐ(»&&¼Ýæ�æ0­�ðVÆÄ�¼(ÁÉ�æ�Æ&­"ê�êhûèðY³�¹V¾�ü�ü_­ ûèð�ý�õMü�ü_­Ìûèð�Ñ&á[ü�ü_­Ìûéð�×�êYî

Page 170: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 164

��� ��� ������������ ��� � ���! �"�$#"# �%��&"&('�)+*"*,��&&.-0/ ## ��1 � ��2 �0�43 � �65�7 � � 18! � � �907 /;:<&;)=/ #"#

�%1 � � 2 �0�>3 � �?5@7 �"8�� 8 � � �907 /;:<&;)=/ #"# �%1 � � 2 �A�43 � �?5@7� �"�!B � � �907 /!:<&;)=//C��D!E )�F�&�� ���D!E 'F�&HG4I")6G �1 � � B � �43 � �?5J��D / ��

K � &.� � L KNM 8"8; �O 5QP 8!����8 � 8 � �8(O ��RTSVU;W O P 8!� ��D 8 �$X� 8 �;YV9 8"�"8 � K LK ���� & �"�� ���?� L K � 8 8 W ��� 8� � � ��� 8! �� � 1;� � � �"� K L V8 �" � �>3 � � / �� L K 9 8 � � � �;Y 8 � �"/ K L

L K ��"��"�"��"�"��"��"�"��"��"�"��"�"��"��"�"��"�"��"��"�"��"��"�"��"�"��"��"�"��"�"��"��"�"��"�"��"��"�"��"��"�"� K LL K *Z���@��8! �1"8 ��X 8 � �\[;]=^`_!a"b�c 5\W�d?5Je�5<e aV[ 5gf.U ]V[h/ * K LL K * * K LL K * W���!Y�� � �"�jiTS V18 ��X�� � 2lk M LVm.n M O�o"� ��!Y �"81qprO%[( "� 99 8! �1Na. R [!](^\_;a"b c * K LL K * s=���t� � 18! � � �"9u � ��D s.18�� 8 ���v�"�� ��� � K /w� ����� �x� � x� � � x��� * K LL K * �. ��2 ����[!]=^`_ E �F R>� BV��� 8 � ���t�x� � �� � � x��� u ) u�R * K LL K * W� 8! ��!B � � �"9j5 �"8���8 � � �"9 8"�8 � 1 ��R * K LL K *y��"��"�"��"�"��"��"�"��"��"�"��"�"��"��"�"��"�"��"��"�"��"�"��"��"�"��"��"�"��"�"��"��"�"��"�"��"��"�"��"�"��"�z* K L{ � �V�|���@��8! �1"8 ��X 8 � � � "� 9"��@2}5 ��� 5J��5<����?5 3 � � /W ^ M S K ��� � L K W ��� 8�"81 Y �V� ��� K L� ���q� "� 9"��@2}5 L K B Y��?R prO%[= � 9"9 8! K L

K ��5 L K �� d"@2"2 ~ 3�8; � K LK �"���?� L K ] 8 �;YV9 BV�"8 3�8; � K L

��D B" �3 � �!E F �C��D B" � 8� �!E�f.U ]�[ M S a.F �

1 � � � ~ � � 8� �?5J9 8 � � ���!Y 8 � ����� 5J#"��5J#"�"��� // �������1 � ��2 �0� � 8"� �65�7 � � 18! � � �907 /`&"&;)=/C

����� � � 9(E�� "� 9"���2 F R � � 1"8; � /C1"�! � ��� �=�>3 � �?5@7 18���8 ���v�"�� ��� � K /�� ����� �x� � �� � � x���N�. ��2 ���!�"1 � I �A7=5

� "� 9(E�� "� 9"��@2 F R<� B 2 8A/ �1 � � B � �43 � �65�7 ������� � �� � � ���� u ) 7 / ��

L K W 8 D � 8! 5 �.B��� 1�[ ~ � � � ��D� � � 18! � K L8�� 1"8$1 D � 3��8! !� � "� 9"���2}5 ^�a m(S ]�[h^�a�_h/ ��

8���1"8|������1 � ��2 �A� � 8"� �65�7 �8���8 � � �"9A7 /\&&!)=/C����� � � 9(E�� "� 9"���2 F R �8�� 8 � 80/C1�! "� ��� �=�43 � �65�7 1"8�� 8 ���v�"������ � K /�� ��� � ��� � x� � � ��!�N�. � 2 �����1 � I ��7=5

� "� 9(E�� "� 9"��@2 F R<� B 2 8A/ �1 � � B � �43 � �65�7 ������� � �� � � ���� u ) 7 / ��

L K W 8 D � 8! 5 �.B��� 1�[ ~ � � � ��D� �"8���8 � 8 K L

Page 171: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 165

��� �"�$��� ������!��!�@�.�"���"�����}�>�.�����������V���= ¡�����"�|��¢������.��£���¤A�%��"¥��6��¦���¤"§;¨��.���"�A¦"�\©©!ª=�«

��¢��@�.��V�(¬��.�"���"�����r­�®4��¤"§!¨�� �0�«�¤!�"�����¢=�4�!�!���6��¦¯�"��� �£��v£"�������(�%°0������� �|���!�!�x�=���!�!���!§N¢.�V� ������±�� 4²���¦=�

�.�"���(¬��.�"���"���@�r­�®<�!¨x���A�= ���.��£!¨��(�4�!�!���6��¦V��¢������;���=�@���;����§³�ª�¦"�( ¡

´ °¶µ����� �!���·¢.¨��� ���V¸(¤q�;�V£���$� ¤"§;¨����q° ´��� �"�$��� ������!��!�@�.�"���"�����}�>¹.º��@».�����V���= ¡

´ °N¢�¨��"���|¼V�!���v½(��¢��V��"�;���.���"� ´ §"��� �����V�"� ´ ��¤"§!¨��.���"�"³r¾t��µ����!��� �!�x�r¨�£�� ��"° ´�����"�«

���.�V£;¨��(�4���;���?�@¦$¦"�= ���.�V£;¨��(�4���;���?�J�"�¥��=�( ¡

¡ ´ °|��¢����;�V���� ¿�"�0��¯° ´´ °À��"��"�"��"�"��"��"�"��"��"�"��"�"��"��"�"��"�"��"��"�"��"��"�"��"�"��"��"�"��"�"��"��"�"��"�"��"��"�"��"��"�"�¶° ´´ °ÂÁZ�V�;¨V§��(�%¸=¤A�Vµ��=� Áð ´´ °ÂÁ Áð ´´ °ÂÁZµ����!¼����V�"�jÄÅ�.���"���Æ¿����l¨"¼��"� ���"�$� ��� �!������£��"���"���=��V�"��!��§"����V¸=¤$�!��� Áð ´´ °ÂÁ ���V�"��!���Æ�;�w§������� �$�;�v��¤"§!¨�� �j®"®"®@��® ÁÇ° ´´ °ÂÁ µ��ÈÄTµ��� �§"�"�;¼"��V¤����!�h�·É� �"£;¼V�;¨VÊ"�jÄZª�©.Ë�Ì?�TÍ��"�"���� ÁÇ° ´´ °ÂÁy��"��"�"��"�"��"��"�"��"��"�"��"�"��"��"�"��"�"��"��"�"��"�"��"��"�"��"��"�"��"�"��"��"�"��"�"��"��"�"��"�"��"�zÁð ´�V���t���!¨�§��=��¸=¤0�@¢ §A�µ!�@�.��°�¢�§� «£���¨"�����;���!¬�Î.Ë�É��!�����.­� �V���Æ£j�

£����©!ª?���¸=¤�©!ª? 

� ��"�N�.¨��"�"��� §"�«

���.�V£¤�¸j�4���;���?�J�"�����=���!¼��"�0�@¢ §��JÏ"£j�<Ï"£���=��= ´ °qÐ�����V¸(¤|�V�"��!���v° ´��¢��������V£��!¤0�4�!�!���?��¦��V��"�!���=¦"�`©"©;ª=�«

��¢����%¸(¤�©©=ÍÑÁ"ÁQ�%¸(¤�©"©�ÒÂÁ"ÁQ�%¸=¤�©"©�Ó0�«��� � �"�!�!�"�;���.��V� ��£"���?�@���VÔ(��ÉV���= �V����.���¶Í� ¡

��� ��«�%¸=¤Õ"Õj �.��V�r¬V�.��V� ��£"���.­h®`�V��"�!��� Õ"Õj ¡

Page 172: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 166

Ö×�ØqÙÚ�Û�ÜVÝ(Þ$ß"à�á�à�â à$Ø�×à�á ã"à|ä�å�æ�ã�â�çVè�Û!Þ0æ4é!Ú!ç�â?ê�ë�ß"à�á�à�â�à0ë"ì`í"í!î(ìï

ä�å�æ�â%Ý(Þ�íí!ð+ñ"ñQâ%Ý(Þ�í"í�òÂñ"ñQâ%Ý=Þ�í"í;ó=ìï

ã�ô Ú é"õ!à!ç"ç;æ�â.çäVö õ�è"÷�â?ê>ø.ù�ú�ù�Ü=ù;ì=ûçVà�âü.ç�÷¶ý�û

Öà�á ãàï

â%Ý=Þþ�í;ð?ûâ.çäVörÿVâ.çäVö õ�è"÷�â����Jß"à�á à�â�à"þ"þjû

ÖÖ×�ØqÙÚ�Û�ÜVÝ(ÞNü Þ"ß���â à$Ø�×à�á ã"à|ä�å�æ�ã�â�çVè�Û!Þ0æ4é!Ú!ç�â?ê�ë@ü Þ"ß���â�à0ë"ì`í"í!î(ìï

ä�å�æ�â%Ý(Þ�íí�� ñ"ñQâ%Ý(Þ�í"í�Âñ"ñQâ%Ý=Þ�í"í;ó=ìï

ã�ô Ú é"õ!à!ç"ç;æ�â.çäVö õ�è"÷�â?ê����ø� .Ü=ù;ì=ûçVà�âü.ç�÷¶ý�û

Öà�á ãàï

â%Ý=Þþ�í�� ûâ.ç"ä�ö(ÿ�â.ç"ä�ö�õ�è÷�â���4ü�Þ"ß���â àþ"þ�û

ÖÖ×�Ø�å��áá ã$à!ä�÷"à�ÜVÝ=Þ��V÷ö����à�å�à�ôá"âvØ�×à�á ã"àï

ã�ô Ú é"õ�à;ç"ç;æ�â.çäVö�õ!è"÷�â?ê�������������ú�õ.Ü������hì=ûç�à�âü.çV÷|ý�û

Öã�â.çVèÞ�Ýjæ4é�Ú;ç�â?êJö"à�â�õ=â�Ú���à"÷0æ@å ß�ê �"èjê!�"è÷�â=ìì=û×�Ø�å��áá ã"��$å à�ô"á"âvØ�×ä�å�æ�ã�â�çVè�Û!Þ0æ4é!Ú!ç�â?ê�ë�äV÷ã"à!ç�â=ë"ì`í"í;î ññ

ã�â�çVè�Û!Þ0æ>é�Ú!ç�â?ê�ë�ß"à�á à�â�à0ë"ì`í"í;î ññ,ã�â.ç�è�Û�ÞAæ4é!Ú!ç�â6ê�ë@ü Þ"ß���â àAë"ì`í"í!î(ìï

Û0äVã õ�à!çç!æ@â.ç"ä�ö�õ�è÷�â6ê�ë#�$�=ë"ì(ûç�à�âü.çV÷|ý�û

Ö×�Ø�å��áá ã|ùV÷ß"à$ß"à!ç Ü�Ý=Þ���÷"ö��%�"à÷qà;ç"ç�à!äVè�ô"âvØ�×à�á ã"à|ä�å�æ�ã�â�çVè�Û!Þ0æ4é!Ú!ç�â?ê�ë�Ú!ç!ëì�&Jí!î=ìï

è÷�â�í�� ûá�Và÷"ö"à�í('�ã�â.ç�á à"÷Aæ4é!Ú!ç�â(ì)' ý�û ×�Ø+*"ä�á�à"Þ"Ú;äV÷�â à!ç�ÙÚ!ç�á à�â),�â�à"ã$Ø�×

×�Ø.-�Ú!ç�âÆãà�â),"à"÷$Ø�×ä�å�æ�å ãà"à��!æ�å�ß�ê4á�Và÷"ö"àjê0/=ùù)1@õ$���=ì`í"í('�ý!ì

Page 173: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 167

2�3�4%56�7�8�9�:�5�;%<=�>�<�3@?�:�5(9�A�BCD)E 7F)>�>�G"HI.J�4%<>�<"K$L E$D<$>�G�<+4M7N8PO�5$6�Q�RSAT

G$=�U�V�W$<�3�3�8�6�3�4�X%W�O�5$6ZY!K$L�R(A[B3%<6�I�3�5+\]BC

<$>�G�<"O�56�^�^_B D)E KL`V_4�3�a"5�4�O$=�6`b_4M6�X�<�H�F%<=�>�6 EDC V�=4)>�<@8PO�56%c�d�A[B3�<$6�I3�5feZBC D�E 3%<�F�a�W�6Pg�2(8�A E$D

D�E W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W EDD�Eih 3�<�F�a%W�j>�U�O�k�8�A hlE$DD�Eih hlE$DD�Eih ;)I)5�k)64�U�5nmpo�4�<�G6.a�<�5rqMo D%s�t o�^�u�>�U�O�kv<�4�5�<�G"w[^Px�3�4%X�X�<�3�G+F)I)Gya�<�3 hlE$DD�Eih z FM6�<�4"4%5r;�{�o�|M}�~���|�<�4�5fI)5�a�V_F%5�a�<$>�6�4)=)5r4%5"<�4�5�<rq�3�U�H�<�a$I�3�I�b�� hlE$DD�Eih W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W hlEDD�E |�3�V$<�4)6�<�3)I�5�X�m�|�4%5>)<�G�<�5ya�<�3�2�3%<�O�<�a�<�G�I)5�af7�U$>�>�U�V$Gfo�4%G6)<�5 EDD�E |�4�5>)<�G�<�5"a�<�3�~(k)6�4%U�5�<�5fI�5�a"a�<�3`x�F%j�<>�>�<�5nY�4�5"a�<�5�<�5"a�4%<�~_k)64�U�5F)I)G�X�<$7�I)<=�3M6�V�<�3%a�<�5"G�U>�>�� EDJ�U�4�a+3�<�F�a%W�j>�U�O�k�8�A D)E�� 4�<�3�V(4�3�a"a�<�3"q)o D%s�t o�^�u�>�U�O�k�X�<>)<�G�<�5 EDT;�{�o�| E 7)a�B D)E ;�4)>�<�a�<�G�k�3�4�26)U�3 EDO=F�3�2�3%U�O[�%u�o�K����o�|)}��BO=F�3�V$U�3)6��P��KL%x�o|)}��]Y

5�<��6��P��K$L�x�o|)}��]YV$U�3)6�\$�#�KL�x�o�|)}��YV$U�3)6����#�KL�x�o�|)}��B

4�5$6���Y D)E.s O=�>)<�4M7�<�5�H�F%<=�>)<�3 EDO�Y D)E H$I�>)<6�H$6�X�<>)<�G�<�5�<�Gy��<�4�O$=�<�5 E$DO�5$6ZY2�B

G63)I�O$6"6�3�4%X�X�<�3 E 6ZB4�5$6�g�Y�4]Y�k]Y�G6�U�2�BG63)I�O$6�F�a��$> E F�BO=F�3�6�<��6��P��KL%x�o|)}��]B

2�3�4�56�7�8�9�:�5 z 4�<+q�3�U�H�<�a$I�3�<�5�Y�a�4%<ya�4�<"J�<�3�H�U�<�X�<�3)6)<�5�x�3�4�X�X�<�3�G�4�b�I�>4�<�3�<�5�V$<�3�a�<�5F�5�X�<>)<�X$6Z��:)5(9�A[B

jI4)>�a�W$2�3�U�OM��\�B D�E =4�<�3�b�I)G�G+F)I�7���3�U�G�G[^ D ��>�<�4%5�G�O=�3%<�4�j$I�5�XyX�<�F�O$=�6)<6`V$<�3�a�<�5 E$D7�aM��7�U�2�<�5(8�74)>�<�5�F�b$<�Y�9�3�9�A�B D)E H$I�b�o�<�G�<�5"U�<7�7)5�<�5 E$D7�U�3r8P�)��eZB��)c�63�4%X%W$O�56�B ��¡�¡(AT

F�kM6�W[6�3�4%X)���BO�5$6���eZB7�G�<�<�k�8�7)a�Y�6�3�4%X[������� 2�U�GnY s |�|)��W s |�x�A�B D)E F)I�7�x[3�4�X�X�<�3�3)I�b$27�^�u�<�X�4%5�5"X�<$=�<�5 EDG63�O�2�g�8P2�3%U�O�Y�9#O�3%<�FM6�<"2�3�U�O�<�aI�3%<@9�A�B D)E q�3�U�H�<�aI�3�k�U�2$7 EDG63�O�F)6�8P2�3%U�O�Y�6�3�4%X[������� 5�FPb�<(A[B D�E q�3�U�H���}�FPb�<+4�G6.w[^Px�3�4�X�X�<�3%5�FPb�< E$D

D�E 2�3�4�56�7�8�9�x�3�4�X�X�<�3�¢�G�b_4M6"}�3���¢�a:�5S9�Y�63�4%X[������� 5�FPb�<�Y!�SA�B ED

Page 174: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 168

£¤¥�¦�§)¤�¨P©�¥%ª�¦�«�¬�­�®+§%£¯¬�°�± ²�³f´�µ�¶)·�§�¥�§M¤�¸�ª�®�£¤)µ�¸M·�³$²£¤¥�¦�§)¤�¨P©�¥%ª�¦�«�¬v¸�¹$ª�¥P¹�º�¹$ª�¥�¹$»"®º�¼$½�µ�¥�±�­�®@¬�°[±

»�ª ¾£$¤�¥�¦�©�¿n¨�À$ª�¥)¤Z« Á�µ$¤�¹�¤)ª�¶%µ�®(¨�Â�»�« Ã�¦n«!Ã�¦�®¤�°�°�±²)³�´Ä�Å$Æ�Ç�ÈÄ�º�µ�½�µ�¥)·)µ�£�µ�®"³²¸MÂN¨P£¤¥�¦%¼�©(¨�À�ª�¥M¤Z«�¬P»�µ�¦·�§�¥�µ(¬�°�É�É�ÊÌË�ËÍ£¤¥�¦%¼�©(¨�À$ª�¥M¤Z«�¬P»�µ�¦·�§�¥�µ­)®(¬�°�É�É�Ê�°

£¤�¥%¦�©�¿n¨�À�ª�¥)¤�«!Á�µ$¤�¹[¤�ª�¶%µ�®(¨�Â�»n«!Ã�¦n«!Ã�¦�®¤[°�°�±¸MÂN¨P£¤¥�¦%¼�©(¨�À�ª�¥M¤Z«�¬�²�­)®(¬�°�Î!É�Ê[° ²)³"½�¸�£�Ï�¥�¸�Á�Á�µ�¥%µ�®�»�µ"®y³$²¾

¸)Â�¨#£¤¥�¦�¼$©(¨�À$ª�¥M¤Z«�¬�¸)Â[¬�°�É�É�Ê[°²�³�Ð�¸MÂѸ%®�£�µ�¥)¤¸�®�Á�Ò"ª�Ó�§%µ�Ó�µ�¥%£�µ¤)Ô�µ�®y³$²

¸)Â�¹�µ�¥�£�µ¤)Ô�µ�®S¨#Õ�«�Â�»n«!Ã�¦n«!Ã�¦�®¤�«ÖÀ$ª�¥)¤[°�±¸)Â�¨#£¤¥�¦�¼$©(¨�À$ª�¥M¤Z«�¬#©�¥%µ�¦�µ�»�µ�£(¬�°�É�É�Ê×Ë�ËØ£$¤�¥%¦%¼$©S¨�À�ª�¥)¤�«�¬�Â)ª·�·�ª%À�£(¬�°�É�É�Ê

Ë�ËÍ£¤�¥%¦%¼�©(¨�À�ª�¥)¤�«�¬P©�¥�µ�¦�µ�»�µ�£$­�®(¬�°�É�É�ÊÌË�ËÍ£¤¥�¦%¼�©(¨�À$ª�¥M¤Z«�¬�Â�ª$·�·�ª�À$£­)®(¬�°�É�É�ÊN°¾¸)Â�¨�¨#£¤¥�¦�¼$©(¨�À$ª�¥M¤Z«�¬#©�¥%µ�¦�µ�»�µ�£(¬�°�É�É�Ê�°@Ë�Ë

¨P£¤¥�¦%¼�©(¨�À$ª�¥M¤Z«�¬P©�¥%µ�¦�µ�»�µ�£$­�®S¬�°�É�É�Ê[°�°©�¥�µ�¦�µ�»�µ�£�¹�·�¸%£¤[¨#Õ�«�Â�»n«!Ã�¦n«!Ã�¦�®¤[°�±

µ·)£�µÂ�ª·�·�ª�À$£%¹[·�¸�£$¤�¨PÕ�«�Â)»�« Ã�¦�« Ã�¦�®$¤�°[±

¸)Â�¨�Â�µÙ�·�µ�¥¯Î ÉrÊ[° ¥%µ¤�º�¥�®n±Úµ·�£�µ¾

²�³$´�¸%µ�Ç(¶)¤¸�ª�®�£·�¸%£¤)µ�Â�º�µ�¥�Õ�µ�»�µ�®�Ï�¥�¸%Á�Á�µ�¥�Â�º�µ$·�·)µ�®�³$²¸)Â�¨P£¤�¥%¦%¼�©(¨�À�ª�¥)¤�«�¬%¸�®�£�µ�¥)¤[¬�°�É�É�Ê[°¾

£¤¥�¦�©�¿�¨�À$ª�¥M¤�Û�«lÀ$ª�¥)¤�°[± ²)³�À�ª�¥M¤�Û�É[¸�®�£�µ�¥M¤�³$²£¤�¥%¦�§M¤�¨#©�¥�ª�¦n«ÖÀ�ª�¥)¤[°�±�£¤¥�¦�§M¤�¨P©�¥�ª�¦�«�¬"¬�°�±£¤�¥%¦�©�¿�¨�À�ª�¥)¤�«!Á�µ¤�¹[¤�ª�¶�µ�®S¨�Â�»n«!Ã�¦�«!Ã�¦�®¤[°�°[±£¤�¥%¦�§M¤�¨#©�¥�ª�¦n«ÖÀ�ª�¥)¤[°�±�£¤¥�¦�§M¤�¨P©�¥�ª�¦�«�¬"¬�°�±Ü²)³r¸%®¤)ª

º�µ�½�µ�¥%£�©�¥�¸�®�Á�µ�®"³²£¤�¥%¦�©�¿�¨�À�ª�¥)¤�«!Á�µ¤�¹[¤�ª�¶�µ�®S¨�Â�»n«!Ã�¦�«!Ã�¦�®¤[°�°[±£¤�¥%¦�©�¿�¨�À�ª�¥)¤�ÝZ«lÀ$ª�¥M¤�°[± ²�³�À�ª�¥)¤�Ý�É�¤�§�½$·�µ�®�§P¼�µy³$²£¤�¥%¦�§M¤�¨#©�¥�ª�¦n«ÖÀ�ª�¥)¤[°�±�£¤¥�¦�§M¤�¨P©�¥�ª�¦�«�¬"¬�°�±

²)³@Þ#®"»�¸%µ�Ç(¶)¤�¸%ª�®�£·�¸%£¤)µy»�µ�£�Ï�¥�¸�Á�Á�µ�¥%£yµ�¸�®Â�º�µ�Á�µ�®"³²§�¦$¤�¸�ª�®%¹(¸�®�£S¨#Õ�«�Â�»n«!Ã�¦n«!Ã�¦�®¤�«ÖÀ$ª�¥)¤Û�«ÖÀ�ª�¥)¤�Ý�°[±Ú

µ·)£�µ¸)Â�¨#£$¤�¥�¦�¼$©S¨�À$ª�¥)¤Z«�¬�º)©�»�§M¤�µ(¬�°�É�É�Ê�°¾£¤�¥%¦�©�¿�¨�À�ª�¥)¤Û�«lÀ$ª�¥M¤�°[± ²�³�À�ª�¥)¤Û�É�º�©�»�§)¤�µ"³$²

£¤¥�¦�§M¤�¨P©�¥�ª�¦�«ÖÀ�ª�¥M¤�°�±�£$¤�¥�¦�§)¤�¨P©�¥%ª�¦�«�¬y¬�°�±£¤¥�¦�©�¿�¨�À$ª�¥M¤Z«!Á�µ¤�¹�¤�ª�¶�µ�®S¨�Â)»�«!Ã�¦�« Ã�¦�®$¤�°�°[±£¤¥�¦�©�¿�¨�À$ª�¥M¤�ÝZ«lÀ$ª�¥)¤�°[± ²)³�À�ª�¥M¤�Ý�É+¤§�½·)µ�®�§�¼$µ�³²£¤¥�¦�§M¤�¨P©�¥�ª�¦�«ÖÀ�ª�¥M¤�°�±�£$¤�¥�¦�§)¤�¨P©�¥%ª�¦�«�¬y¬�°�±

²�³@Þ#®"»�¸%µ�Ç_¶)¤¸�ª�®�£·¸�£¤)µ"»�µ�£�Ï�¥�¸�Á�Á�µ�¥%£yµ�¸�®$Â�º�µ�Á�µ�®y³$²§�¦¤¸�ª�®%¹_¸%®�£(¨PÕ�«�Â�»�« Ã�¦n«!Ã�¦�®¤Z«lÀ$ª�¥)¤�Û]«ÖÀ$ª�¥)¤�Ý�°�±

£¤¥�¦�©�¿�¨�À$ª�¥M¤Z«!Á�µ¤�¹�¤�ª�¶�µ�®S¨�Â)»�«!Ã�¦�« Ã�¦�®$¤�°�°[±Ü²�³Ìß £�µ¤�ß·�µ�£�µ�®"³$²

£¤¥�¦�§M¤�¨P©�¥�ª�¦�«ÖÀ�ª�¥M¤�°�±�£$¤�¥�¦�§)¤�¨P©�¥%ª�¦�«�¬y¬�°�±£¤¥�¦�©�¿�¨�À$ª�¥M¤Z«!Á�µ¤�¹�¤�ª�¶�µ�®S¨�Â)»�«!Ã�¦�« Ã�¦�®$¤�°�°[± ²)³à ©�§)·�¤)µ�®�®�§P¼�µ�®"Á�µ$·�µ�£�µ�®�³²²�³�Ï�µ�á¤�Â�µ·)»y½�¸�£�À�Ù)µ�¥%µyª�»�µ�¥â±p·�µ�£�µ�®y³$²

Page 175: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 169

ãä�å%æ�çMä�è#é�å�ê�ænëÖì�ê�å)ä[í�î�ãäå�æ�çMä�èPé�å�ê�æ�ë�ï"ï�í�îãäå�æ�é�ð�è�ä�ñ�ò$äZëÖì�ê�åMä�í�î�ã$ä�å�æ�ç)ä�è�ä�ñ�òäZë�ïyï�í�î�ãä)ê�é�ó�ô�îì�õö)÷�ñ@èPãä�å%æ%ø$éSè�ì�ê�å)ä�ë�ï�ì�õ�ñ�å�ñ(ï�íúù�ù"ãä�ê�é(íû

ãä�å%æ�é�ðnè�ì�ê�å)ä�ë!ü�ñ$ä�ý[ä�ê�þ%ñ�ÿ(è����në!ù�ænë!ù�æ�ÿä[í�í�îã$ä�å�æ�ç)ä[è#é�å%ê�æ�ëlì$ê�å)ä�í[î�ãä�å%æ�ç)ä[è#é�å�ê�ænë�ï"ï�í[îþ`ó�ãäå)÷�ñ�ÿ(è�ì$ê�åMä�í�î�ö�ó��Zî

ì�õ�öM÷�ñ@è�ö���ó�þ�íûö���è�ì$ê�å)ä��ö��ó�ó ��î���í

ãä)ê�é�ó��Zîö����nî

�ãä�å%æ�ç)ä[è�ä)ñ�òä�ëÖì$ê�å)ä[í�î�ãä�å%æ�çMä�è�ä)ñ�ò$äZë�ï"ï�í[î

�æ�ê÷�ý_ö%ÿ�ã(è���ëÖì�ê�åMä��Zë�ä�ñ�òä�í[î

�ñ÷�ã�ñ

ö���è#ã$ä�å%æ%ø$é@è�ì�ê�åMäZë�ï���ñ$÷�ñä)ñ(ï�í�ó�ó��íûã$ä�å�æ�é�ðnè�ì$ê�å)ä�ô]ëÖì�ê�å)ä[í�î�����ì$ê�åMä�ô`ó���ñ$÷�ñä)ñ����

ãä�å%æ�ç)ä[è#é�å�ê�ænëÖì$ê�å)ä[í�î�ãä�å%æ�çMä�è#é�å�ê�æ�ë�ï"ï�í[îãä�å%æ�é�ðnè�ì�ê�å)ä�ë!ü�ñ$ä�ý[ä�ê�þ%ñ�ÿ(è����në!ù�ænë!ù�æ�ÿä[í�í�î�������å%ê%ø

ê���ñ�å�ä�ç���ñ÷�÷�ñ�ÿ�ÿ�ç�ø$ñ�� �ö��Nè! ã$ä�å�æ�ø$é(è�ì$ê�å)äZë�ï"�å�ê%ø�ï�í�íû

ãä�å%æ�çMä�è#é�å�ê�ænëÖì�ê�å)ä[í�î�ãäå�æ�çMä�èPé�å�ê�æ�ë�ï"ï�í�îãä�å%æ�é�ðnè�ì�ê�å)ä�ë!ü�ñ$ä�ý[ä�ê�þ%ñ�ÿ(è����në!ù�ænë!ù�æ�ÿä[í�í�î

���$ä�ç#��ñ÷�÷�ñ�ÿ�ÿ�çPø�ñ�����

ãä�å%æ�é�ðnè�ì�ê�å)ä$�ZëÖì�ê�åMä�í�îé.ó�ãäå)÷)ñ�ÿ(è�ì$ê�åMä��[í�î��ê�å+è!ð�ó���î ð��é�î ð%���Sí

ì$ê�åMä��� ð&`ó+ä�ê$÷�ê%ì�ñ�å�è�ì$ê�å)ä��� ð'�í�îãä�å%æ�ç)ä[è#é�å�ê�ænëÖì$ê�å)ä[í�î�ãä�å%æ�çMä�è#é�å�ê�æ�ë�ï"ï�í[î

ç%æä�ö%ê�ÿ�ý_ö�ÿ�ã(è(�në)����ë!ù�æ�ë ù�æ�ÿ$äZëÖì�ê�åMä�ô�ëlì$ê�åMä��[í�î�

ñ÷)ã�ñûãäå�æ�ç)ä�èPé�å%ê�æ�ëlì$ê�åMä�í[î ãä�å%æ�çMä�è#é�å�ê�æ�ë�ï"ï�í[î

���ñ$÷�ã�ñû

ã�ñ�ÿ$��ñ%ý��÷)ê�æ�þ�è#é�å%ê�æSí�î�����*�å�ê$+�ñ���,�å"ç#��ã�æõö�æ�þ�ñ�ÿ$� �æ�ÿ$ä�ó.-)ô�î

�� ì�õö)÷�ñ@èPæ/!!ó%0#1�2�ù�ùyæ�ÿä'!!ó.-)ô�í�î

� �����)ê�å3�����

ã�ñ�ç�å�æ$õ�è�í[î ���54�ê�å)ä�ö%ñ�å�,�ÿ�ü���ñ�å76�å�ö%ü�ü�ñ�å38�ê�å%ÿ�ñ$õ�ø$ñ�ÿ��������+å�ñ�ç#��ý��÷)ê�æ�þ3���

Page 176: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 170

9�:<;$;�;$;�;�;$;�;�;$;�;$;�;�;$;�;$;�;�;$;�;�;$;�;$;�;�;$;�;�;$;�;$;�;�;$;�;$;�;�;$;�;�;$;�;$;�;�;$;�;�;$;�;$;�;�;$;�;�;$;�;$;�;�;$;�;$;�;�;=: 99�:?>A@#BC#D�;%EF@�G�H�H$B�@�I$J >K:�99�:?> >K:�99�:?>AL�M�N�O�E G#P�NRQTS�@�M�B U$EWV�XYN E C#Z�D�B@3[%\(]%@�G#H$H�B@�O#P$B�^ U�B�G#N�_ Ma`�B$N�B�N$N�B$N�D�B@5bFC�E�B�Gc>K:�99�:?> M�N$D�d$e f @#B�G�` EaD�G�Ba]%@�G#H$H�B@ \3M�N$Da]%C#`�B�g�g�B�N�NC�h�B�N�N�C#e�f >i: 99�:?> ]�j%kml.n�o&p)q�r�stW`$_�uvpw]jYkmlxn�o'pi]�r%y�z t&{|D�G#B}r�N�_�C�f�gaN�C�e f3]�j%kml�;�~ q#]�p >K:�99�:?> j�M�B�e�O�H�C#`$B�u�B�@�E/Q�\��3`�B�G�L�B f�g�B�@'{A�ad�P$N�d�E >i: 99�:?>�;$;�;$;�;�;$;�;�;$;�;$;�;�;$;�;$;�;�;$;�;�;$;�;$;�;�;$;�;�;$;�;$;�;�;$;�;�;$;�;$;�;�;$;�;$;�;�;$;�;�;$;�;$;�;�;$;�;�;$;�;$;�;�;$;�;�;$;�;�>K: 9

G#N�E�@�B�C�D�;YE @�G#H$H�B@�I�J�L�k�zFt3: U�D�� 9�:=L$G�g�B$D�B$d�O�@$G#^ E�P�@3: 9g�P$N�H�e�N�E#���/� 9�:�C$O�E�pTS�P�d�G�EFG#P$N�G#N�D�B@ab C�E�BG3: 9G#N�E�G'{ 9�:��C#B f$g��C�@�G$C#`�g�B�: 9

e����/{ 9�:�_�M�g�B E�_�E}H$B g�B�d�B$N�B�d��$B�G#e�f�B$N�:�9PO"���{ 9�:=L�gFC#HR{|P�`�bFC�E�B�G�O#P@�@�B�O�EaH$B�P�B�U�U�N$B E7uYM @#D$B�:�9d�E�P$^����/�

e f C�@�u�P@�E�n��F� j�]�z t�qFo'{ 9�:=C$O�E�p�] P�O#B$N�: 9_�u.G#d�e�f�B$N%n(� � j#]zFt�qFo&�

9�:$d EF@�M�e�E�E @�G#H$H�B@W:�E���: 99�:$d EF@�M�e�E�C�D�� ga:�g���:�99�:$d EF@�M�e�E�C�e EFG�P�N$d�:C#e�E���:�99�:$d EF@�M�e�E�E @�G#H$d�: EFG'��:�99�:$d EF@�M�e�E}e$P g�M�h�N$d�:$e�PR��: 9

D�P�

^@�G#N�E�U%I��"��N bFC�E�BG#N�C�h�BRQ��$JY�H$B E�dxI"U G�g�B$N�C�h�B.J%� 9�:�bFC�E�B�G�h�G�Ea��B�@�_�P�B$H�B@�E�B$N5]Y@�G�H�H�B@#N�: 9

9�:�U C�g$g�d�S�@�P�H�@$C�h�h.C#`$`�@�M�e faH�B�U�P�@�D�B@�Ea: 9G�U�I�d E @#e�h�^.I"U G�g�B�N�C�h�BR{"������Jm�$���%J�

P@�C�e g�B�;Yg�P�H�P�M�EYI$JY�B$Z�G�EYI�\���J%�

9�:�U C�g$g�d�L#B�f�g�B@W`$B�G�h���M�H�@$G�U$U C�M$U}DG#B�bFC�E�B�G3:�9G�U�I�C#e$e�B�d$d.I"U G�g�B�N�C�h�BR{i�&J����.\���J�

d�u�G�E�e f�I�B�@�@�N�P.J�

e�C#d$B�t�r�~$~�t�V Q^�@�G�N E$UYI���[�B�@�_�BG#e f�N�G�d�H$B�H�B$N�b�MF@�e f�d M�e�f�B�Nx��J%�^�@�G�N E$UYI���H$B�d�e�f�M�B�E�_�E��)��N�`�_�u�p�bFC�E�BG#d�e�f�M�E�_.�$JY�^�@�G�N E$UYI���`�G�E�d�H�B�d�EFC�E�E�B$N���M�H@�G�U$UaN�G#e�f�E�p ��Nx��JY�`�@#BC�O'�

e�C#d$B�t�q��t�q�] Q^�@$G#N E$UYI$�"bFC�E�B�G3B$Z�G#d�EFG�B�@�EaN�G�e f$E�p)��N.��J%�`�@�B�C�O'�

e�C#d$B�t�q���]�b%k"j�Q^�@$G#N E$UYI$�"¡�N$H M�B�g�E G#H�B@�S�UFC�D�N�C�h�BRp)��Nx��JY�

Page 177: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 171

¢�£�¤�¥�¦'§

¨�¤ © ¥�ª$«�¬�­® £$¯#° ¬$©Y±$²(³�³$³ ´�°x²�µ%§¢�£�¤�¥�¦'§

¶ ·�¸�¹�º ¯�¬�»�¼a¤�£�£�°�½ ¸ ·¶ ·�¸ ¯�©�¥#»$»�¤ ¹$¹�¸�·¤�« ¹ ¤·�¸�¾ ¥�¬�¤�¯3¿ ª�À�Á�¤ ¹ ¤$°�½�¤ ©$©�°�¤$° ¸ ·Â

½�¦"Ã%Ä&§©�¨�é�½ ® ¤�°x±"©F¯�«�¤�°¥�À�¤�Å"²�£�²�µ%§

¶¶Tº ¼ ¯�«�¤Æ±ÇȽ�¦µY§ ·�¸ ¢�¯ ¹�¾ ¥�¬�¤�¯3É�¤$½�¤ ©$©�°$¤ ¬ ¸ ·¨�½ ·�¸ ¥�«�«�¤5ÊY£�¯�É�É�¤£�¦�½�¤ ® ©�¤�«�¤ ¹ ¤�° ¸�·Â

¹ ¬F£#» ®"Ë ± º ½£�¬�Å�É�¤�¬"ÌY¬�½�¦�¤�°.±�©�¨�Å�Í�»RÅ�Í�»$° ¬Yµ$µY§ ·�¸5Î ½£�¬�«�¤ ¹ ¤�° ¸ ·¯�Ã�Ï�§·�¸ © ¥�«$« ¹�Ð#ÑÒ ¿�ª�© £�ª�¤ ¼ ¸ ·¯�©�±�»�°�¬�Ó ÏaÍ$Í�»�Ã�à Ð�Ñ�Ò µ

»�° ¬�Ã.Ô�Ä'§

·�¸=Ò ¤ ¼$«�¤�£'Å�©F¥�«$« ¹5Õ »�¼�«�ª�¤ ¹�¹ ¤ « º ½�¤£�¬�¤�£Ö½�¨$¤�£5×F¥�À�¤$°�©�¤ ¼�«�¤�° ¸ ··�¸ ½$¨�¤£a× ¥�À�¤�°}À�¤ ¼ £�© ¥#» ¼aØ�¤£#É$¤�¢�¤$° º ¤�£�¨�¤�° ¸�·¹�º ¯�¬�» ¼�±(»$° ¬YµÂ

»�¥ ¹ ¤�ÏÙ­|¢�£�¤�¥�¦'§

»�¥ ¹ ¤=ÄÚ­T¯�©�± ¹ ¬F£�»�À ® ± º ½�£�¬/Å"²�»�£#¤¥�¬�¤.²�µÇ�Ã�Ï%µÂ

À�¯ ¹ Ì�¤£�£±"¬F£$¯#É�Ì�»�°�¬�Å"²�»�£#¤¥�¬�¤.²�µ%§»�°�¬#Ã.Ô�Ä&§

¶¢�£�¤�¥$¦&§

»�¥ ¹ ¤�ÛÙ­T¯�©�± ¹ ¬F£�»�À ® ± º ½�£�¬/Å"²�¨�¤ ©�¤�£$£#¤�¨x²�µ�Ç�Ã�Ï%µÂ

À�¯ ¹ Ì�¤£�£±"¬F£$¯#É�Ì�»�°�¬�Å"²�¨�¤ ©�¤�£$£#¤�¨x²�µ%§»�°�¬#Ã.Ô�Ä&§

¶¢�£�¤�¥$¦&§

»�¥ ¹ ¤�ÜÝ­T¯�©�± ¹ ¬F£�»�À ® ± º ½�£�¬/Å"²�¬F£�¯�É�É$¤�£�²$µ�Ç�ÃÏYµÂ

À.¯ ¹ Ì�¤�£$£�±"¬ £�¯#É�Ì�»$° ¬�Å�²"¬ £�¯#É$É�¤�£²�µ%§»$° ¬#ÃxÔ�Ä'§

¶¢�£�¤�¥$¦&§

»�¥ ¹ ¤aÞß­ º ¼ ¯�«�¤Æ±�¯"à�¬ £�¯�É�Ì�»$° ¬Yµ¯�©�± ¹ ¬F£�»�À ® ±"¬F£$¯#É�á�¯#â$â�ã'ä�°�¥�À�¤�Å º ½£�¬Yµ�Ã�Ã�Ï%µÂ

¹ ¼�½ º Ì�¤�£$£�±�¯ Ô�Ä'ÅiÊ�å%æmç ¾�Ñ�è$è µY§»�°�¬#ÃxÔ�Ä&§

Page 178: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 172

é�ê�ë�ì�í î'ï�ðxñ�ò�óô î õ#ì�ö�÷�ë�îFõ�é�ø%ù#î õ�é�ø�ú�ì$í îFû'ü�íý�þ�ÿ�������õ�î%ó��� õ�ÿ�ý��

ì�ý ô ÿ ���Té�ê�ë ô îFõ�ì�þ�ö.ë�����õ�î�����ý�ê�î�ÿ�õ���ó�ï�ð��Yó�þ�é ô ú�ÿõ�õë"îFõ$é#ø�ú�ì�í�î�����ý�ê�î�ÿ�õ���ó��ì�í�î#ð.ñ�ò�������� ÷YöÆë#é�í ô ÿõ�î �� ö��ý�î�ÿ � �$ÿ! �ÿ î�ÿxó" �ÿ ô ÿ�í �!�

ÿ! ô ÿ�é�ê�ë�õ#ÿ�ý#��úYî�÷Yöxë"ê��xómð�ð%ò�óì�í�î#ð.ñ�ò��� õ�ÿ�ý��

ì�ý ô ÿ%$&�Té�ê�ë ô îFõ�ì�þ�ö.ë"î õ�é#ø�ù#î õ�é#ø�ú�ì$í îFû'ü�í�ý�þ�ÿ����'�$í(��ó�ð�ð��Yó�þ�é ô ú�ÿõ�õë"îFõ$é#ø�ú�ì�í�î���� � õ�é�ø�ø$ÿ�õ � ÿ*)$ÿ�é#ì,+�í � í�ø-��ó��ì�í�î#ð.ñ�ò���

ÿ! ô ÿ�é�ê�ë ô îFõ�ì�þ�öxë�����õ�î����'�$í(�$ó�ï�ð��Yó�þ�é ô ú�ÿõ�õë"îFõ$é#ø�ú�ì�í�î����.��í(�$ó��ì�í�î#ð.ñ�ò���� õ�ÿ�ý��

ì�ý ô ÿ%/&�Té�ê�ë0�,��õ�î&ï�ð��'�$ÿ�ì! ý�õ�ÿ(�21*13�,�õ�î&ï�ð�� � ÿ�øé#í(�211�,��õ�î&ï�ð4�(ÿ$í*�(�21*13����õ�î'ï�ð4�#ý�ê$î�ÿ�õ��21*1�,��õ�î&ï�ð4�#é�í ô ÿõ�î��2115����õ�î&ï�ð4�'��ÿ, �ÿ�î�ÿ(�21*1�,��õ�î&ï�ð4� � ö*��ý�î�ÿ(�$ó�ô î õ#ì�ö�÷�ë�îFõ�é�ø%ù#î õ�é�ø�ú�ì$í îFû'ü)î ý � �ÿ6�7�,��õ�îYó�����98 � ô é�îFé#��í:��ÿ ô � õ�é#ø$ø�ÿõ�õ � þ�ö ê ô þ�ÿ�õ#ÿ�í �,�îFõ$é#ø%ù�îFõ$é#ø�ú�ì�í î û&ü�ö*� ô ð�ê�î�ÿ! Yë"ê;�.ó<�îFõ$é#ø�ú�ì�í�î�=*=���

ÿ! ô ÿ�þ�é ô ú�ÿõ�õë"îFõ$é#ø�ú�ì�í�î���� � ý � ÿ! �ÿ�í$í�ý�þ�ÿ(�$ó��ì�í�î#ð.ñ�ò���� õ#ÿý*4�

�;�:� ÿ�é:>�ÿ!+* �ÿ�õ��|íé#ì!+$î ô î � í �,�ìý ô ÿ�ñ�ò?� � õ#ÿ�ý���;�:� ÿ�é:@BA*CED*��õ?F � F �!��$ÿ ê ý � $î&� é�ê�ë ô î õ#ì�þ�ö.ë0�,��õ�î�����ÿ�í�6���$ómð�ð��E1*1�ì/ï�ð�@HG�>�ó�

ô îFõ�ì�ö"÷Rë')���é ô ì!+�ÿ$í6��ø�ÿ î�úYî���#ÿ$í.ë"ê;�6�I1�ì6�I1�ì�í�îYó$ó��é�ê�ë ô î õ#ì�þ�ö.ë')���é ô ì!+�ÿ�í���� � ��ómð$ð��%ó�

ì�í�î#ð����ô î��$ö�ðYò4���

Page 179: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 173

J�KHL�M*N�OP5Q�R:S�TVU;W;X!YEX*Z,W3R,QP[T�Y!U;\ L^] X�_a`<bHc�d5ee XZ!W4_a`(f;g�h Oi X,\�jS L(]ki�l h O Q�Rnm M W L UoSX!Y*\!U L S*S L Z:R!Q\pU#S!W L Z#q(UHZ�U;W ] h O Q;R%r!UHS,W L Z9UHZ�U;W!U M \!UHS�U L�K#L Z:R!QQ�R9d L Y*\ L�K4sti!M \*\;Snm M W L U L Z lL u,v:ipK;v;L YER!QU iw] X;`*`<bHc�doee XZ!W4_a`�x<hS,Y�j#Tq L�K*K�] W K U#y#q�X*Z!W s�zk{�| c}�~;rkqp��� z�� h OKHL W v!K Z ] XZ!W�h OP Q�R K#L�MHl q�W K UHyy L�K�] h2R!Q

Das Modul ���������������4�2�� :Q�RR*R*RR*RR*R*RR*R*RR*RR*R*RR*R*RR*RR*R*RR*RR*R*RR*R*RR*RR*R*RR*R*RR*RR*R*RR*RR*R*RR*R*RR*RR*R*RR*R*RR*R,QQ�R:}*j l!v \���}*�#q | c}*} z � R,QQ�R R,QQ�RnmpU L S L d v Z N WpU#j*Z L Z J�M;v;L Z l U L }�#q | c*}} z �-f�~ K j uL*l!v!K�v Z l:l U L m M W L U�R,QQ�R l�K j*��q M \\��aS�!\ R,QQ�R R,QQ�R3� v W�j K ��} M*K X v SE�<UHZ N \ L�K b K T L UBW L�K W�� | \ M;v;l U M � L Y K Y M Y;Z R!QQ�R g������ v \!U g#�*�;� � M Z vpM*K gH��!� R!QQ�RR*R*RR*RR*R*RR*R*RR*RR*R*RR*R*RR*RR*R*RR*RR*R*RR*R*RR*RR*R*RR*R*RR*RR*R*RR*RR*R*RR*R*RR*RR*R*RR*R*RR*R,Q� U#Z*X!\ v�lL¡ 0¢VM U#Z6�0Y  Q�R£qq*qq*q*qq*q*qq*qq*q*qq*qq*q*qq*q*qq*qq*q*qq*q*qq*qq*q*qq*qq*q*qq*q*qq*qq*q*qq*q*qq*qq*q*qq*q*qq*qq*q*qq*qq*q*q¤R!QQ�R¦¥ ¢�§ q,X*j ¢*¢ UBW ] h ¥7R,QQ�R¦¥ ¥7R,QQ�R¦¥td v Z N W!UHj*Z��[b KHuL!v y!W l U L ~ K j uL*l,vpK }*�#q | c}*} z � s�l U L l U L � K UHj K U;W MHL W;S<f ¥7R,QQ�R¦¥ y L S!W L,v�L�K W L d L,v�L�K;v Zy lL�K5*L�KHu j L y L�K W L Z�� K UHy*y L�K�v Z l:l�M S ¥7R,QQ�R¦¥ r�j L S*X,Y L Z lL�K mpU i*i�L�KHL Z u W MHJ*L \*\ L Z v�L*JL�K Z�U ¢¢ W ¥©R!QQ�R¦¥ªqq*qq*q*qq*q*qq*qq*q*qq*qq*q*qq*q*qq*qq*q*qq*q*qq*qq*q*qq*q*qq*qq*q*qq*qq*q*qq*q*qq*qq*q*qq*q*qq*qq*q*qq*q*qq*q«¥7R!Q¨ j�U l3¢�§ q,X*j ¢*¢ UBW ] h¬UHZ,W3XZ!W s­ sN4s � sU OX!Y M*K5J \;j*X N,®H r;c |,° rpb {p±4sZ M²¢,L<®#{ ��}�b;r!b {p±4O

� K UHZ,W i�] �³ Z*}*��q | c}*} z � ³ Z   h OS!W K X� §6].J \;j*X N4s�  X KHL�M W L j K:K#L �!\ M X L � K j*X L*l,vpKHL3¢;§ q,Xj ¢*¢ U;W M S ³ Z   h OS!W K X M W ].J \;j*X N4s� HK j#T¤X!Y M*K�] gH-h O�³ Z   h O Q�R i*v;L�K � v � L \�f z mER,QQ�R:µ M*K U MHJ \ L Z v Z l�¶ X!Y\ L U i�L�s Sj!\ M Z*y L L UHZ L � K U#y*y L�KHJ*Ll � L�KBi*v;L \*\W·U#S!WER!QS!W K X M W ].J \;j*X N4s�  U:U#Z!W L y L�K4O�³ Z v U#Z!W L y L�K4O�³ Z l U#Z!W L y L�K4O�³ Z   h OS!W K X M W ].J \;j*X N4s� a§ q ¢(MH UHZ!W L y L�K�O0³ Z   h OS!W K X M W ].J \;j*X N4s�  U#Z �M \pU l q�W K*M Z*S9b;¹ | b*~k� z c {�O0³ Z   h OS!W K X M W ].J \;j*X N4s�  ~B��� � }#�¡b;¹ | b~�� z c { q z�{<z � ] UHZ �M \!U l q<W KM Z*S s fHº*xx*x*º<h O0³ Z   h O

Page 180: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 174

»!¼!½H¾�¿;¼�À.Á!Â;Ã*¾�Ä4Å�Æ'ÁÇ*È�ÉHÊ!Ë;Ê(Æ*Ì<ÍÏÎ�Ð Â;Ã*Ã*Ñ,Ë�Ê(ÆÌ�ÍIÐ!ÎÒ Ã�½9À'Ó;Ô�Õ�ÍIÓ;Ö�¼!½*ÉHÈ�×,¾Ê!¼�ÍIÓ*Ø*Ø-ÌÙ »,¼p½H¾Ñ�Ú�À'Ê�¿²Û,Ç6Å0¼p½ÉHÈ<Ü�Ó�Ý4ÞaÊ�¿²Û,Ç(Ì<ÍÎ;ФÉ#Ê*»Ç�½;¼;Ç*ß<à(Å�ß*Ç!Â;Ç!¼;Ç*ß<à5á�Êßná�Ñ*ß�¿;¼;Ç*ß<à.â�¿HÁÇ!ÂÂ�Ç*ÊnÂ�ÇÇ�½#Ç*Ê:Ð!λ!¼!½H¾�¿;¼�À.Á!Â;Ã*¾�Ä4Å�Æ'ßÇ!Â;Ç!¼�Ç Ò ½#Ã#Û¡É.×�Æ*Ì<Í»,¼p½H¾�¿;¼<À'Á!Â;Ã*¾�Ä4ÅaÊ�¿.Û,Ç-Ì�Í»,¼p½H¾�¿;¼<À'Á!Â;Ã*¾�Ä4Å�Æ<Í�Ë�Ê:ßÇ!Â�Ç,¼�Ç Ò ½#Ã#Û¤ß#×�Æ*Ì�Í»,¼p½H¾�¿;¼<À'Á!Â;Ã*¾�Ä4ÅaÊ�¿.Û,Ç-Ì�Í»,¼p½H¾�¿;¼<À'Á!Â;Ã*¾�Ä4Å�Æ<Í�Ë�Ê:ßÇ!Â�Ç,¼�Ç Ò ½#Ã#Ûwá�×�Æ*Ì�Í»,¼p½H¾�¿;¼<À'Á!Â;Ã*¾�Ä4ÅaÊ�¿.Û,Ç-Ì�Í»,¼p½H¾�¿;¼<À'Á!Â;Ã*¾�Ä4Å�Æ<Í�Ë�Ê^ÆÌ�Íã»!¼!½H¾�¿;¼�À.Á!Â;Ã*¾�Ä4Å�Æ�Â;Ã*ÃÑ!Ë�Ê-Æ*Ì�ÍÑ�½ÉHÊ,¼ Ò ÀÆ�ä!ÉHÇ�â�½*É#È*ÈÇ�½æå,Ç�½#ß*ÇʤÉ#Ê:ß*Ç�½ Ò Ã,Â�ÈÇ*Ê*ßÇ*Ênç�Ç�É;è�ÇÊ Ò Ã!Â�ÈÇ9¿;á�»È*Ç Ò á�Ç,èp½;¼�é�Ë�Ê-Æ*Ì<ÍÒ Ã�½9À'Ó;Ô�Õ�Í�Ó;Ö�¼p½*É#È#×�¾*Ê!¼�Í�Ó*Ø*Ø^Ì Î�Ð Ò á;Ç�½5Ó*Ç*ßÇ*Ê:ê<à.â�½ÉHÈ*ÈÇ�½5Ð!ÎÙÎ�Ð:ë;ì�éÏí;Ç!á�Çnç�Ç�É;è;Ç*Ê Ò Ã!Â;È*Ç:Á*Ç�¿#¾!è¼�Ç*Ê�é�Ð!ÎÉkÔ�Õ�ÍÄkÔ�¼p½ÉHÈVÜ�É*Ý4ÞaÑ�½ÉHÃ�Íå�è!É;Â;Ç(À�¼!½*É#È#×,¾Ê!¼�à�Ó<à;î(ïaÔ<Ä�ÌÙ ÉHØØ6ÍÄðÔ9¼!½*ÉHÈVÜ�ÉÝ�ÞaÑ�½*ÉHÃ�ÍãÑ�½*ÉHÊ,¼ Ò À*Æ'ñß6Þòâ�½ÉHÈ*ÈÇ�½4éóñ»!Ë�Ê-Æ�ÅIÓ*Ø�î4Å�¼p½ÉHÈVÜ�É*Ý4ÞaÊ�¿.Û,Ç-Ì�Í»,¼p½H¾Ñ�Ú�À'Ê�¿²Û,Ç6Å0¼p½ÉHÈ<Ü;É*Ý4ÞaÊ�¿²Û,Ç(Ì<Í»,¼p½H¾�¿;¼<À'Á!Â;Ã*¾�Ä4Å�Æ5É�éôÔ�Õ�Íóß�é©Ô�Õ�ÍÏá�é©Ô�Õ�Í0Ë�Ê^Æ*Ì�Í

Î;ФÉ#Ê*»Ç�½;¼;Ç*ß<à(Å�ß*Ç!Â;Ç!¼;Ç*ß<à5á�Êßná�Ñ*ß�¿;¼;Ç*ß<à.â�¿HÁÇ!ÂÂ�Ç*ÊnÂ�ÇÇ�½#Ç*Ê:Ð!ÎÎ�Ð »,¼p½#¾�¿;¼<À'Á!Â;Ã*¾�Ä�Å�Æ.ß*Ç,Â�Ç!¼;Ç Ò ½HÃ�Ûõɲ×�ÆÌ�Í»,¼p½H¾�¿;¼<À'Á!Â;Ã*¾�Ä4ÅaÊ�¿.Û,Ç-Ì�Í»,¼p½H¾�¿;¼<À'Á!Â;Ã*¾�Ä4Å�Æ<Í�Ë�Ê:ßÇ!Â�Ç,¼�Ç Ò ½#Ã#Û¤ß#×�Æ*Ì�Í»,¼p½H¾�¿;¼<À'Á!Â;Ã*¾�Ä4ÅaÊ�¿.Û,Ç-Ì�Í»,¼p½H¾�¿;¼<À'Á!Â;Ã*¾�Ä4Å�Æ<Í�Ë�Ê:ßÇ!Â�Ç,¼�Ç Ò ½#Ã#Ûwá�×�Æ*Ì�Í»,¼p½H¾�¿;¼<À'Á!Â;Ã*¾�Ä4ÅaÊ�¿.Û,Ç-Ì�Í»,¼p½H¾�¿;¼<À'Á!Â;Ã*¾�Ä4Å�Æ<Í�Ë�Ê^ÆÌ�Í Ð,ÎÉ Ò Àk¼p½ÉHÈ<Ü;É*Ý�ÞöÉHÊ»*Ç�½B¼�Ì Î�Ð�â�á;Ñ*Ç!Â!¿HÊ÷�¿;èÂ3ÁÇ*»,¼pÉ.ÛÛ,ÇÊ Ð,ÎÙ »,¼p½#¾�¿;¼<À'Á,Â�Ã*¾�Ä�Å�Æ.»*Ç,Â�Ç*¾,¼3¾Ã!á;Ê!¼�À.Ð(Ì5ÉHÊ,¼�Ã9É Ò ½HÃ�ÛwèpÉ;Â Ò ×Vɲ×�ÆÌ�Í»,¼p½#¾�¿;¼<À'Á,Â�Ã*¾�Ä�ÅaÊ�¿.Û�Ç(Ì�Í»,¼p½#¾�¿;¼<À'Á,Â�Ã*¾�Ä�Å�Æ<Í�Ë;Ê¡ÆÌ�ÍãÎ;ÐEâ�á�ÑÇ!Â%¿;á;»¤É²×nÊ�¿H¾,è è!É;Â Ò ×Vɲ×õÄ#Ã*Ñ�ÉHÇ�½#Ç*Ê:Ð!λ,¼p½H¾�¿;¼<À'Á!Â;Ã*¾�Ä4Å�Æ5ÉHÊ»*Ç�½;¼%ÉHÊ!¼;Ã9É.×�ÆÌ�Í»,¼p½H¾�¿;¼<À'Á!Â;Ã*¾�Ä4ÅaÊ�¿.Û,Ç-Ì�Í»,¼p½H¾�¿;¼<À'Á!Â;Ã*¾�Ä4Å�ÆkË�Ê:»*Ç,Â�Ç*¾,¼3Ð Ò ½HÃ#Ûwè!É;Â Ò ×VÉ.×�Æ*Ì<Í»,¼p½H¾�¿;¼<À'Á!Â;Ã*¾�Ä4ÅaÊ�¿.Û,Ç-Ì�Í»,¼p½H¾�¿;¼<À'Á!Â;Ã*¾�Ä4Å�Æ<Í�Ë�Ê^ÆÌ�ÍÉ Ò Àk¼p½ÉHÈ<Ü;É*Ý�ÞIß*Ç,Â�Ç!¼;Ç(Ì Î�Ð�â�á;Ñ*Ç!Â!¿HÊ÷�¿;èÂ3ÁÇ*»,¼pÉ.ÛÛ,ÇÊ Ð,Î

Page 181: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 175

ø ù,úpû#ü�ý;ú<þ'ÿ����*ü�����.ù����*ü,ú3ü��� ��!ú�þ��������,ú������pû������������ ��� !���#"ù,úpû#ü�ý;ú<þ'ÿ����*ü����$��ý��%��#"ù,úpû#ü�ý;ú<þ'ÿ����*ü�����&"('��)���#"*+ �-,� �.���%ý� ;ù/�������0 ��� ���ýHü��-�� 1�2��.����û2���� +ù,úpûHü�ý;ú<þ'ÿ����*ü%�3������ù��û;ú/���!ú����2 !���#"ù,úpûHü�ý;ú<þ'ÿ����*ü%�3�$��ý���4�#"ù,úpûHü�ý;ú<þ'ÿ����*ü%�3��0'��:ù����*ü,ú5���!û��2���������0 ��2 6���&"ù,úpûHü�ý;ú<þ'ÿ����*ü%�3�$��ý���4�#"ù,úpûHü�ý;ú<þ'ÿ����*ü%�3��&"('��7���#"�8� þkúpû���9&:���;�<= �.���ý;ú��� + �>,% �.���!ý���?�ý����3ÿ�*ù,ú���������@� +ø ù,úpû#ü�ý;ú<þ'ÿ����*ü�����.ù����*ü,ú3ü��� ��!ú�þ��������,ú��� ��pû������������ # 0 !���#"ù,úpû#ü�ý;ú<þ'ÿ����*ü����$��ý��%��#"ù,úpû#ü�ý;ú<þ'ÿ����*ü�����&"('��)���#"*+ �-,� �.���%ý� ;ù/�������0 # 0 ���ýHü��� 0 1�2��.����û2���� +ù,úpûHü�ý;ú<þ'ÿ����*ü%�3������ù��û;ú/���!ú��� !���#"ù,úpûHü�ý;ú<þ'ÿ����*ü%�3�$��ý���4�#"ù,úpûHü�ý;ú<þ'ÿ����*ü%�3��0'��:ù����*ü,ú5���!û��2���������0 # 6���&"ù,úpûHü�ý;ú<þ'ÿ����*ü%�3�$��ý���4�#"ù,úpûHü�ý;ú<þ'ÿ����*ü%�3��&"('��7���#"+ �/A�������ù!ú!ýHÿ�������������û���@� +ù,úpûHü�ý;ú<þ'ÿ����*ü%�3��������!ú�/�!û��2���������0 B�� 6���&"ù,úpûHü�ý;ú<þ'ÿ����*ü%�3�$��ý���4�#"ù,úpûHü�ý;ú<þ'ÿ����*ü%�3��&"('��������,ú���pû2�2�����8��� %�2 !���#"ù,úpûHü�ý;ú<þ'ÿ����*ü%�3�$��ý���4�#"ù,úpûHü�ý;ú<þ'ÿ����*ü%�3��&"('��������,ú���pû2�2�����8��� & !���#"ù,úpûHü�ý;ú<þ'ÿ����*ü%�3�$��ý���4�#"ù,úpûHü�ý;ú<þ'ÿ����*ü%�3��&"('��7���#"+ �DCû���?���� pû*ý8 ��!û� ����!ý����;ù-,<û��29�9��ûHÿ���%�2��9� ���9��û8�� �����úE�#ù!ú-� +ù,úpûHü�ý;ú<þ'ÿ����*ü%�3��2���/��F�G5��ûH��F�G-��û> �F�G:ú������'������#"ù,úpûHü�ý;ú<þ'ÿ����*ü%�3��.ù����*ü,ú3ü��� ��,ú�þ��������!ú��JI� ��(ý�K��pû2�2�D.�û2�!ú����������!"L'��4���&"+ � ù!úpû#ü�ýBú�þ'ÿ����*ü����0�'ù����*ü,úJ�Vý�K-þM?�ý�������û������!ú��JI� ��(ý�K��pû2�2�D.�û2�!ú����������!"='������#"$� ++ � ù,úpû#ü�ý;ú<þ'ÿ����*ü�����NI� ��Vý�K>O�I� ��Vý�K�PRQ�"='������#"N� +ù,úpûHü�ý;ú<þ'ÿ����*ü%�3��2���*ù��ûBúE�2�!ú���.�û��!ú��%�������-S�ý8�� �*ù^þ#T���#"ù,úpûHü�ý;ú<þ'ÿ����*ü%�3�$��ý���4�#"ù,úpûHü�ý;ú<þ'ÿ����*ü%�3��&T��UI� ��(ý�K�P�Q%�#"='��4���#"ù,úpûHü�ý;ú<þ'ÿ����*ü%�3�$��ý���4�#"ù,úpûHü�ý;ú<þ'ÿ����*ü%�3��&"('��7���#"ù,úpûHü�ý;ú<þ'ÿ����*ü%�3��������!ú�/�!û��2�� 0 !���&"ù,úpûHü�ý;ú<þ'ÿ����*ü%�3�$��ý���4�#"ù,úpûHü�ý;ú<þ'ÿ����*ü%�3��&"('��������!ú�/�!û������� !���&"ù,úpûHü�ý;ú<þ'ÿ����*ü%�3�$��ý���4�#"ù,úpûHü�ý;ú<þ'ÿ����*ü%�3��&"('��������!ú�/�!û����1�V !���&"ù,úpûHü�ý;ú<þ'ÿ����*ü%�3�$��ý���4�#"ù,úpûHü�ý;ú<þ'ÿ����*ü%�3��&"('��4���&"+ �/�!ý�����ù>,�û���9�9��ûHÿ��������9� ���9����Hü��ú-�û��� �����*ú-� +ù,úpûHü�ý;ú<þ'ÿ����*ü%�3��0'������ù�)���#"

Page 182: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 176

W X�Y/Z�[%\�]�Y�XX�Y�Z�^�_�_�`Ra�b%]2c�b>d#\�]�e�e�b%\2f�b�g�]�c�e�h�c�e@b�\�Z�h�b�_�_�i!jlk�m�n�_�b%]�Z�b�c�b�c�g�b@Y�X`�i�\�m�^�i#o�f�_�[�m%a3pqMb�r%]8i!s(t�c)q�u#sZ�[�\Ro�]v�w!sx]y�i�\�]2e2z%m�c�i6sx]�{�{4u`�i�\�m�^�i&oMf�_�[�m%a3pq�b�c�gR]8Z!s(t�c)q�u#s`�i�\�m�^�i#o�f�_�[�m%a3pqMb�c�g�_�[�[�|}s=t�c7q�u&sX�YR^V~1�2c�g�bD^8_�_�b���]�Z�Z�b%\2b�c���i�^�f�b�_�_�b�c�_�b�b%\2b�c�Y�XZ�[�\RoM��v�w!s���y�i�\�]2e2z%m�c�i6s���{�{4u� X�Y5�#h�m�n�n�]2b%\�c�b�h�b���b%]8n�b�c�Z�[�_�e�b�f�b%^�m�n�i�b�c�Y�X

]0v%w!sa0v%i�\�]�eB��]��3�$|%\�]�[�s� n�]�_�b�oi�\�]2e2z�m�c�i%��&�����$v&a%u� ]�{�{}s

a�vRi�\�]�eB��]����$|�\�]�[�sW`�i�\�m�^�i&oMf�_�[�m%a3pq�g�b�_�b�i�b/Z�\�[2~)]Vz!q�u&s`�i�\�m�^�i&oMf�_�[�m%a3p(i�\�]�eB��]����$c�^�~�b4u#s`�i�\�m�^�i&oMf�_�[�m%a3pq&s(t�c�g�b�_�b�i�b�Z�\2[2~�hz6q�u#s`�i�\�m�^�i&oMf�_�[�m%a3p(i�\�]�eB��]����$c�^�~�b4u#s`�i�\�m�^�i&oMf�_�[�m%a3pq&s(t�c�g�b�_�b�i�b�Z�\2[2~Dg2z6q�u#s`�i�\�m�^�i&oMf�_�[�m%a3p(i�\�]�eB��]����$c�^�~�b4u#s`�i�\�m�^�i&oMf�_�[�m%a3pq&s(t�c4q�u&s`�i�\�m�^�i&oMf�_�[�m%a3pq�g�b�_�b�i�b/Z�\�[2~Dg�]�Z�Z0z!q�u&s`�i�\�m�^�i&oMf�_�[�m%a3p(i�\�]�eB��]����$c�^�~�b4u#s`�i�\�m�^�i&oMf�_�[�m%a3pq&s(t�c4q�u&sW X�Y/Z�[%\���Y�X`�i�\�m�^�i#o�f�_�[�m%a3pqMg�b�_�b�i�b�Z�\2[2~D|%\2[�i�[%a�[�_�_!s=t�c4q�u#s`�i�\�m�^�i#o�f�_�[�m%a3pq��8�������d3�M����t�c � n�b�cR]�c��%^�_�]�g�z#i�\�^�c�`�i�n�b�c�t�c�q�u&sX�Y `�i�\�m%^8i#o�f�_�[�m%a�p0qJ�����8k�z�����d&����d����8��d�z&�#����%o&��d#\�^�c�`�]�i�]�[�c�`�i�^2f�b�_�_�b�c�`%]�c�g@e�_�b�]�m�n6p�b�`b%\8Z�[�_�e�i-b%]2c/����������%���6�u#s=t�c�q�u#sNY�X`�i�\�m�^�i#o�f�_�[�m%a3pq�\2[�_�_�f%^2m%a�s=t�c4q�u#s`�i�\�m�^�i#o�f�_�[�m%a3pq b�c�g}s(t�c)q�u#sX�Y |%\�]�c�i�Z#o�q�^�f�`�m�n�]�m�a�b�c���[�c5~�¡#m�[2~�~B]�i�t�c�q�u#sNY�X

`�b�c�g�b2z�f�_�[�m%a%o�f�_�[�m%a�u#s X�YD^2f�`�m�n�]2m%a2b�c�Y�X

W X�Y5~�¡�z�m�[2~�~B]�i&o�u Y�XX�Y¢z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�zDY�XX�Y¤£¥g%\2[�|2z�^�_�_0z�g�b�Z#o�u £¦Y�XX�Y¤£ £¦Y�XX�Y¤£¨§�h�c%a�i�]�[�c�jx��\���b�h�e�i-g%]�b���^�i�b�]>��������z��&���6��k�©��!p�g%]2bD^8_�_�b@��b%\���[�b�e�b%\8i�b�c £¦Y�XX�Y¤£ d#\�]�e�e�b%\�p � ]�b�g�b%\>_�[�b�`�m�n�i6� £¦Y�XX�Y¤£Uz�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�z�zª£¦Y�X��[�]�g�g%\2[�|2z�^�_�_0z�g�b�Z#o�u�]�c�iE]3p�}sm�n�^�\�f�b�Z�b�n�_%�2�������������8����pg%\2[�|�`B���8«���p

Page 183: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 177

¬�­�®%¯�°%±�²3³M­%´2µ�¶2·�¯�¸�¸!¹$º�»�¸#³&¼½%¾0¿�À�¬�­�¯�Á�±�Â�¼¶%´�Â�®�Á�Ã#Ä�³Å�®�Æ�Ç�È%É�·�Ê#¿�¿�Å�®4³�Ë#¼­%¯8Á�±�²%Ã�µ�¶�±�®�Ä�­�®%¯V°�±�̳(Í%Î�³�Ë&¼ Ï�¬�Æ�¯�Á�±%Â�Ð�Ñ0°EÒ�Ó�Ô�´�±%Â2Õ�±�®�µ�±�Ã�Ã�®�±�®@¬�ÏÃ�µ�´RÄ�²�Ö!¼xÂ×�Á�´�Â2Ø2·%Ó�®�Á6¼xÂ�Î�Î4Ë

Á�´�Â�ØBÙ�Â�Ú�¹(Ã�¸�¯�Ø8²%Ö6¼ Ï�¬R¯�¸�¸�±R½�¸�¯2Ø�ºR¯�Ñ�Ã�Ñ�®�Õ�±�®�Ñ�Á�Ð�Á5¬�ÏÃ�µ�´RÄ�²�Ö!¼xÂ×�Á�´�Â2Ø2·%Ó�®�Á6¼xÂ�Î�Î4ËÛÏ�¬@¶�´�µ>Ü#¯2Õ�±�¸�¸�±�±�Ý�Â�º�Á�Â�±�´�Á-®�Ñ�´H±�Â�®�Þ�Â8¸�Ã�º�Á�´�Â�Ø�Ø�±%´3ÌßÍ%±%Â�Á�±%´2±@¬�ÏÏ�¬-Ü&´�Â2Ø�Ø�±�´�¯�Ñ�Ã-­%Â2±�º�±%´JÜ#¯�Õ�±�¸�¸�±5°BÂ8Á5Õ�±�®�Ñ�Á�Ð�Á�°�¯�´�à�Â�±�´�±�®�¬�ÏÃ�µ%´RÄMá8²#Â�Î�â�¼�á�×�Á�´�Â2Ø2·%Ó�®�Á6¼ãá�Î�Î4ËÂ�Ã�ÄMº�Á�´�Ó�°�¶�Ä0Á�´�Â2Ø&Ù�Â�Ú�¹=Á�¯�Õ�¸�±�Ì(Á�´�Â�ØBÙVá%Ú3¹(Á�¯2Õ�¸�±�Ë�²�²%Ö#ËÁ�´�Â2Ø&Ùá%Ú�¹=Ã�¸�¯2Ø�Î�Î}¼Â8ÃäÄ�å�Á�´�Â�ØBÙ�Â�Ú3¹(Ã�¸�¯�Ø4ËÃ�¶%´�Â�®�Á�Ã#Ä�­%¯�Á�±%Â�Ì0³M­�´�µ�¶�Á�´�Â�Ø�Ø�±%´�æ�º2·�­�±�÷&Á�´�Â�Ø�Ø�±%´�¼=Å�®4³#Ì

Á�´�Â2Ø&Ù�Â�Ú�¹=Á�¯�Õ�¸�±4Ë#¼º�Á�´�Ó�¶ç�ÄM­%´2µ�¶�º�̳�­%´�µ�¶�Á�¯�Õ�¸�±�³�Ë#¼Ã�¶%´�Â2®�Á�Ã#ÄM­�¯�Á�±�Â�Ì0³M­%´2µ�¶�¶%´2µ�Ó�±�­�Ñ�´�±�æ�º}¼=Å�®4³#Ì(Á�´�Â2Ø&Ù�Â�Ú�¹$®�¯�°%±�Ë#¼Ã�¶%´�Â2®�Á�Ã#ÄM­�¯�Á�±�Â�Ì0³Mæ�ºRÂV·�æ�º�¼(Å�®4³#ÌN­%´�µ�¶�º}Ì=Á�´�Â�Ø&Ù�Â�Ú3¹$®%¯V°�±�Ë&¼Ã�¶%´�Â2®�Á�Ã#ÄM­�¯�Á�±�Â�Ì0³Mæ�º�Ñ0·�æ�º�¼(Å�®4³#ÌN­%´�µ�¶�º}Ì=Á�´�Â�Ø&Ù�Â�Ú3¹$®%¯V°�±�Ë&¼Ã�¶%´�Â2®�Á�Ã#ÄM­�¯�Á�±�Â�Ì0³Mæ�º�­�·�æ�º�¼(Å�®4³#ÌN­%´�µ�¶�º}Ì=Á�´�Â�Ø&Ù�Â�Ú3¹$®%¯V°�±�Ë&¼Ã�¶%´�Â2®�Á�Ã#ÄM­�¯�Á�±�Â�Ì0³Mæ�º�Ô�Â�¸�Ã0·BÂ�·%æ�º�¼(Å�®4³#Ì$­�´�µ�¶�º}Ì=Á�´�Â�Ø&Ù�Â�Ú�¹N®%¯V°�±�Ë&¼Ã�¶%´�Â2®�Á�Ã#ÄM­�¯�Á�±�Â�Ì0³Mæ�º�Ô�Â�¸�Ã0·#Ñ·%æ�º�¼(Å�®4³#Ì$­�´�µ�¶�º}Ì=Á�´�Â�Ø&Ù�Â�Ú�¹N®%¯V°�±�Ë&¼Ã�¶%´�Â2®�Á�Ã#ÄM­�¯�Á�±�Â�Ì0³Mæ�º�Ô�Â�¸�Ã0·�­2·%æ�º�¼(Å�®4³#Ì$­�´�µ�¶�º}Ì=Á�´�Â�Ø&Ù�Â�Ú�¹N®%¯V°�±�Ë&¼Ã�¶%´�Â2®�Á�Ã#ÄM­�¯�Á�±�Â�Ì0³Mæ�º�­�Â�Ã�Ã0·�æ�º�¼(Å�®�³#ÌN­%´�µ�¶�º�Ì(Á�´�Â�ØBÙ�Â�Ú3¹$®%¯V°�±4Ë#¼è

Ã�¶�´�Â2®�Á�Ã&ÄM­�¯�Á�±�Â�̳�­%´2µ�¶�¶%´�µ�Ó�±�­�Ñ�´2±5°�ç�·%Ó�µ2°�°BÂ8Á!¼(Å�®�³�Ë&¼Ã�¶�´�Â2®�Á�Ã&ÄM­�¯�Á�±�Â�̳�­%´2µ�¶�Ã�Ñ�®�Ó�Á�Â�µ�®�­�Â�Ã�Ã0·�Ó�µ�°�¶�¯�´�±�¼(Å�®4³�Ë&¼Ã�¶�´�Â2®�Á�Ã&ÄM­�¯�Á�±�Â�̳�­%´2µ�¶�Á�´�Â2Ø�Ø�±%´�­%Â8Ã�÷&Á�´�Â2Ø}¼=Å�®�³�Ë#¼Ã�¶�´�Â2®�Á�Ã&ÄM­�¯�Á�±�Â�̳�­%´2µ�¶�Á�¯�Õ�¸�±�¶%´2µ�Á�µ%à�µ�¸�¸!¼=Å�®4³�Ë#¼Ã�Ó�¸�µ�º�±�Ä�­%¯8Á�±%Â�Ë#¼è Ï�¬�­�´�µ�¶�·B¯8¸�¸·%­�±�Ã&Ä�Ë ¬�Ï

Das Modul éëê�ê3ìëêîíðï�ñ :Ï�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�ÏÏ�¬�ò�µ�­�Ñ�!óxÀ�Ç�Ç�È�Ç2Ò ¬�ÏÏ�¬ ¬�ÏÏ�¬RÀ�®�Á�Ô��±��Á5­�Â�±R½�±�Ô��±%�ôõ°�±��­�±�®�­�±�®R½�Ñ�®�à�Á�Â2µ�®�±�® ¬�ÏÏ�¬ ¬�ÏÏ�¬5Ê#Ñ�Á�µ��ó�ò%�2Ó�Ñ�º-ö&Â�®�à��±� ¬�ÏÏ�¬ â÷�¹¥ø�Ñ��Â@â2ù�ù�÷ ¬�ÏÏ�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�¬�Ïú Â2®�Ó��Ñ�­�±)³=°B�Â2®}¹=Ô#³

Ï�¬¢·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·�·D¬�ÏÏ�¬¤ûü°BÂ2º2·�±��%ÄõÜ%Ç&¾�ý�·&þ�ÿ�ò}Ì�À8Ç�Ç���È�Æ�À%Ë û¦¬�ÏÏ�¬¤û û¦¬�Ï

Page 184: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 178

���������� �������������� ������������! �����"���#$ %�& (')���*#�#��+��,��#�,*���-���"�.��������"��* �/�������� 01�+� �,�243 �/��������65�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�57�/���8 �+��"$ %�*2*5��+����9: 1����#*5���: <;=�+���>5�?���"��A@B���C�*��������! ����"����#���D�����E.1,&��2�?����+�GF*H�� �,�IJ������ D ����*#*5���K <L?���,��M���+���>5�?���"��4LN O ����� �.�9�PKQ����������+�J��E'����*#�#����MR�2TS�S�S U=R�24UV.������� WSXQAP); �����#%Y� �����#�5���: %Z[3=�,! ���;=�����>5�?���"��A@�LO ����� �.�9�PKQF��*�M )����2�2���\�*EF1]�^�_^�`�F�"����E'),����������4;�'�����#�#����E��"AP�@�LO ����� �.�9�PM_�����a���"��1�*��-Q�$ %�& (b�c1"+��� O 5%,����dJ��� �.�������43eQ�fP�@�L

���� �����4Lg ���$ A��2*5�������9�@h���

���i5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5\��������j2���*k�5������+9X'+l�mX�&5�n�`�o4;qpl�l:5�r�s�t1p+@ �u�������� �/�������� �/������������� �������������� ������������! �����"���#$ %�& (')���*#�#��+��,��#�,*���C,����1,����#��*# 8 �� �/�������� ���������+��,��& �,��2 �/��������65�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�57�/���8 �+��"J2���*k�5������+9K �����#�5���K <;v�����!5�?���"��f@��� $�+���!5�?���"��4; ����*#*5���K wLN 2*kA� ?��x9y�+���>5�?���"��A@N ?+,�2��zm:n�r�s�o�_^:51'+l�mX�{�O ����� �.�9�PKQ����������+�zS�S�S|'�����#�#����MR�2\�*2� J�� 8 ������2� 1,����"��*#TSXQ�fP�; 1����#%Y� 1����#�5���: %Z}3v�,! ��A@)LO ����� �.�9�Pya�3�~�3|a��Bk�����*#E'�H O%�X� �#�,*�����3�Q�fP�@)L���*��,��}L?+,�2��E'�s�s*5)^�s�n*�{�O ����� �.�9�PKQ����������+�zS�S�Shp��*�� � �k��+��2���#$ ��2�2$ %�& $�+����� �F1�* A���*�������P�@�LO ���*� �.�9�P*,���2�?����1����2�2���TSXQ�fP�@)L�����+,��[L?+,�2��-ns*5�t�l�s�_:'�l)mX�{� O ���*� �.)9�P:Q�F*H�� 1,�I � ����������zS�S�SqQ�fP�@�L�����+,��[L?+,�2��E'+l�mX�&5�n�s&'��*s�`�n�t��O ����� �.)9�PKQ�����������zS�S�S�F�����?������� 8 ����a�����#����& ����B'�����#�#����M��I���2� 1���+� ���*?��� �3�QAP�@)L�����+,��[L?+,�2��E'+l�mX�+t�s�_�_W�O ����� �.�9�PKQ����������+�zS�S�S|'�����#�#����MR�2D2������� ��$ ����1�&.1,�?��$#���2�?��1,&.�.���$k����*"���43�QAP�; �����#%Y� �����#�5���: %Z[3=�,! ��f@�L�����+,��[L?+,�2��zm:n�F�p&l�'{�O ����� �.�9�PKQ����������+�zS�S�S|'�����#�#����MR�2D��� ���,����� B ����1���+���zmKn*F�pl*'�SXQ�fP�; �����#%Y� �����#�5���: %Z[3=�,! ��f@�L�����+,��[L?+,�2��-t�p^1p:'�pW�O ����� �.�9�PKQ����������+�zS�S�S|'�����#�#����MR�2D��� ���,����� B ����1���+���-t1p&^1pK')pzSXQ�fP�;

Page 185: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 179

�������%���������������:�%�[�=���!���f���� ���+���[�� �����-����K�� �¡W¢£ ��������¤�¥�¦K§��¨���©�ª��+�z«�«�«| ������������M¬��D������©�����ª��B����©1���+���-�1�&�K�1 )¡z«X§��f¦�­�������%���������������:�%�[�=���!���f���� ���+���[�� �����J®�¯�°�¢£ ��������¤�¥�¦K§��¨���©�ª��+�z«�«�«| ������������M¬��D������©�����ª��B����©1�J�ª��J±�²����M®�¯³«q§��A¦)­�������%���������������:�%�[�=���!���f���� ���+���[�� �����z´:µ�¶�¡&¯� }´:µ�·{¢£ ��������¤�¥�¦K§��¨���©�ª��+�z«�«�«| ������������M¬��D������©�����ª��M¸��&¤¹�*�����+���������º4­»�����¼¦)­�������%���������������:�%�[�=���!���f���£ ��������¤�¥�¦y½+�¤�����J� � ���M��� � ©���½���¤1�*�����+��W«X§�A¦��)�� ���+���[�� �����-����K�� }´Kµ*·{¢£ ��������¤�¥�¦K§��¨���©�ª��+�z«�«�«| ������������M¬��D������©�����ª��M¸��&¤D� £ ½��&�1�*����º�­»�����x¦�­�������%���������������:�%�[�=���!���f���£ ��������¤�¥�¦y½+�¤�����J� � ���M��� � ©���½���¤1�*�����+��W«X§�A¦��)�� ���+���[�� �����-��¡¾1¡: }´Kµ*·{¢£ ��������¤�¥�¦K§��¨���©�ª��+�z«�«�«| ������������M¬��D������©�����ª��M¸��&¤$½���ª����1�*����º�­»�����x¦�­�������%���������������:�%�[�=���!���f���£ ��������¤�¥�¦y½+�¤�����J� � ���M��� � ©���½���¤1�*�����+��W«X§�A¦��)�� ���+���[�� �����E +¯�´X·&��µ�®& �¨*®���µ��K�A�³¢£ ��������¤�¥�¦K§��¨���©�ª��+�A«�«�«»��� � �������������+�G )���������+�D�*� £ ��� � ��½����-¾1�*�����J½����z¦��)�£ ��������¤�¥�¦X )�����������*�J¬���«q§��A¦)­��������%���������������:�%�[�=���!���A�)�� ���+���[�� �����E +¯�´X·&��µ�®& �¨*®���µ��K�A¨³¢£ ��������¤�¥�¦K§��¨���©�ª��+�A«�«�«»��� � �������������+�G )���������+�D�*�-¤�¿�ª�ª�¿*²��-¾1�������J½�����¦����£ ��������¤�¥�¦X )�����������*�J¬���«q§��A¦)­��������%���������������:�%�[�=���!���A�)�� ���+���[�ÀMÁ� �*²A�� � ©������ � ¿�½�� Â�Á£ ��������¤�¥�¦K§�¶��*�M�)�����������\�*�E¶1Ã�¾��¾���¶�½����E )� � ��ª�ª���4­� ������������E���½A¦����£ ��������¤�¥�¦M����¿�±���½��1�*���-§��$�%�&�(¸�Ä1½+��¿ £ �%�ª�ª�ºJ������¤���������4�e§��f¦����À Á� ��©�¿*²����+����¥�� Â�Á

Das Modul Å}Æ7Ç�È}ÉËÊÍÌÎÌ7Ç4Ï»Ð�Ñ :Á�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�ÁÁ�ÂJÒ ¿�½���ª�¢ ©���ª £ �)��¿�¿�ª������&�1��¿��4¢»���*¿������>�����4­|½��*�J±��1�J¡��������ª�ª������D½����Ó���+�ªyÔ)���J±���� 1�+�>�A�����*���&����� � ����¿����1�*���B²��+��½����Õ ª���½����BÖ���©1�&©1�©� Â�ÁÁ�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Â�Á× �*� � ª���½���¦e�%���*�4�e©�¦

Page 186: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 180

Ø�ÙCÚ�Û*Ü�Ý+Û�Þ>ß�ß<àVá1â*ã�ä�å�æ*çAâ�æ�â&äèé æ�ê&ä1â�Ü�æ4àVë1â*å�ìÜ�á�á�Ü*í�ã)î�Ø�Þ�ï�ä1â�Ü�æ)î*Ø�ä1Û�â�Ý�Ý�å�Û*ã)î�Ø é æ�ðJï�Ü�á é ß�æ�ãñ â*ã�äå�æ$ß é å�ã�ã�å�æJð�å+Û�Þ�Û&ä�â�æ�â&ä1â�Þ&á1â*ã�â�å+ÛäBí�å+Û�ð�å�æ4òð�Þ*ã�ãJã�â*åCÞ é ì�å�â*æ ñ â�ã�ä�å�æ�å�áå*ß�å�æ�äBß%â&ä�ð�å*ß�óyæ�ô1Þ&á�äõ å�æ�ð õ�ö å�â*Ý�å�æ Ù�Ø÷ Ü+â�ð-á1â*ã�ä�å�æ*ç%â*æ�â&ä�ø�ùúâ�æ�ä¹â[ûã�ä�Û é ï�äJä1Û�â*Ý�Ý�å+ÛMÙ�ä�ûã�ä�Û é ï�ä�Þ�ð�ü�á$Ù�á�ûã�ä�Û é ï�ä�Þ�ï�ä�â�Ü�æ�ãJÙ�Þ�ï�ä�ûã�ä�Û é ï�äJä1Û�â*Ý�ãJÙ�ä�â}ûã�ä�Û é ï�ä�ï�Ü�á é ß�æ�ãJÙ�ï�Ü�ûäMýCä1Û�â�Ý4û

ì�Ü+ÛCø�âKý+þ�ûqâKÿ�ä�Û�â�Ý�ç�ï�æ�ä�û»â����Aùú Ø�Ù è Ü�á�á�Ü�í�ã%î ñ â*ã�ä�å�æCâ�æ�â&ä1â�Þ&á1â*ã�â�å+Û�å�æDÙ�Øá�ý}ø>ã�ä�Û é ï�ä�Þ�ð�ü�á$ÙfùVß%Þá�á�Ü�ïføyã+â ö å�Ü�ì)øyã�ä�Û é ï�ä�Þ�ð�ü�á�ù�ù)ûä�î���ì�Ü�á�áMý\á�ûã�ä1Û*ï����4øKä+î���ìÜ�á�á�î���ä1Û�â�Ý�Ý�å�Û}ò�yå�æ�ð�ù�ûØ�Ù���ï�ä1â�Ü�æ)î ñ â�ã�ä�å�æCâ*æ�âä�â�Þá�â�ã+â�å�Û*å�æJÙ�ØÞ�ï�ä*ý}ø>ã�ä1Û é ï�ä�Þ*ï�ä1â*Ü�æ�ãDÙfù�ßAÞá�á�Ü�ïføyã+â ö å�Ü�ì�ø>ã�ä�Û é ï�ä¹Þ*ï�ä�â�Ü�æ�ãAù�ù�ûä�î��+Þ�ï�ä�â�Ü�æ�ýxÞ�ï�ä�ûã�ä1Û*ï����4øKä+î���Þ*ï�ä�â�Ü�æ%î���Ü���å+Û�Þä�â�Ü�æ4ò >å�æ�ð��ù)ûØ�Ù���Û�â�Ý�Ý�å�Û*ã)î ñ â�ã�äå�æCâ�æ+âä1â�Þá�â�ã�â*å�Û*å�æJÙ�Øä1âKý[øyã�ä1Û é ï�äJä1Û�â�Ý�ãJÙfù�ßAÞá�áÜ�ïføyã�â ö å�Ü�ì�ø>ã�ä1Û é ï�äDä�Û�â�Ý�ãAù�ù�ûä�î���ä1Û�â�Ý�Ý�å�Û�ãEýCä1â[ûã�ä1Û*ï����4øKä+î���ä�Û�â*Ý�Ý�å+Û�ã%î���æ+Þ>ß�å�ò >å�æ�ð��ù�ûØ�Ù����+Þá�äå�æ%î ñ â*ã�ä�å�æCâ�æ�â&ä1â�Þ&á1â*ã�â�å+Û�å�æDÙ�Øï�ÜEýWøyã�ä�Û é ï�ä�ï�Ü�á é ß�æ�ãJÙAùVß%Þ&á�á�Ü�ïAø>ã�â ö å�Ü�ì)øyã�ä1Û é ï�ä�ï�Ü�á é ß�æ�ãfù�ù�ûä�î���ï�Ü�á�ãEý�ï�Ü4ûã�ä1Û*ï����4øKä+î���ï�Ü�áã)î���ä1Þ���å�á�á�å4ò�yå�æ�ð�ù�ûä�����û

��

Ø�ÙCÚ�Û*Ü�Ý+Û�Þ>ß�ß<à���Û*å�ï�å�ð�å�ã*ç�á�â�ã�äåAø�ùèé æ�ê&ä1â�Ü�æ4à���â*æ�á�å�ã�å�æDð�å�Û���Û*å�ï�å�ð�å�ã ñ â�ã�äå Ù�Ø÷ Ü+â�ð���Û*å�ï�å�ð�å�ã�ç�á�â�ã�ä)øKä�Û�â�Ý�æ é ßwò�ìð4ò=ï�ò=ï�æ�ä�ùè ó ñ � Ù�ì�ð4ûâ�æ�ä ä�Û�â�Ý�æ é ß<ò Ø�ÙCÞ�ê&ä����)î���Û�â*Ý�Ý�å�ÛMÙ�ØÙ�ï4ò Ø�ÙJæ é ÛEë é ß�ß���í�å�Û&ä�Ù�ØÙ�ï�æ�ä�û Ø�Ù! é å�ï+ê�Ý�Þ���å�í�å�Û&ä$Ù�Øúï�ô�Þ�Û í�Ü�Ûä#"%$�&' �� ñ �)(+*}ûâ�æ�ä ü�ò,�Ëò ØÙ��1ï�ô�á�å�â&ì�å�æ ö Þ*å�ô�áå�ÛMÙ�Ø

��ûã�ä�Û é ï�äJä1Û�â*Ý�Ý�å+ÛMÙ�ä�û

Page 187: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 181

-+.+/)0�1'.32�4�5'6�7'6�81+9+2�/�.�/�:�;�;�<=/�>#2�?=<A@�B�C'D#E)F�EGB�HI8

-+.+/�1�J KMLON'P#/).�QR;�<+.�ST.)P=U�<�>L V)4MQRW�1MQRW�1�>'.TX�XT8Y 7�Z+P=/).\['0^]�6�<=:�>�_'0�1+9)-+.+2�_�<�>3V)P=/�?`2).+:�<=/�<�>aQb0)>�4�<�c'.�6�dfe)<+.�0+/�>g2�_'9�2�<�>�;�<�>�7 Y:)VhLON'P=/G.=@ -+.�/G6�<�>�LiN=P=/).AX)j�k�H l�m=nhX

N'P=/G.=@ -+.�/G6�<�>�LiN=P=/).AX)j)k�HporqOs�tuq�8J�o3-+.�/G6�<�>LiN=P=/).AXT8V�P#/gLvK=o#t�8wK=l+JM8wKTx�xXN'P#/).#@yKIHpog.�P'6�P�N=<=/#LiN'P#/).=@iKIH#XT8

NT9+:)6)<zL�-+.+/�1�?=JLiN=P=/G.�Q {�<�>�4�{�X�X|

Y 7\}+<�-'.�Q�P�_�<�-�4�<�>�}T/�:�;�;�<=/~?`:).\4�<�?hB�2�?'<�>!0�<�_�<#/)9�2G0�J+.\;#:�_+.\7 YJ�ogt�8V)P=/gLvK#o=t�8wK#l=.�/�:�;�S=1�>'.�8,KAx�xX

:)VhL=�y-'.�/�1�?'J�L .�/�:�;`@yKIH�dv>=2�?'<aQ�N'P#/).AX�XJ�x�xa8

:GV�L�J)o�o=tTX|

-+9�P�N�S'<#/�/#L .�/�:�;�>'0 ?�Q�}=eA���)SAB��G}T���'��B�� S`�#XT8V�<+9�6�<=/pog��8/�<+.�0�/�>a8

�<'6�-�<|K�og.�/�:�;�S'>+0�?�LiN=P=/G.TXT8Y 7��%>pKh-+.�<'9�.\>+0)>^4#:�<!B�0�?�?'<#/�4�<�-�;�<�-+0)1+9�.)<�>�}T/�:�;�;�<=/�-^7 Y6�o�L%-'.�/G0�1+.32�4�5+6\7Xf?2)6�6)P�1L�-=:�[�<�P'VTL�-+.�/G0�1+.32�4�5+6AX�XT8-+.�/�1�J KaL 6#j��+.+/�:�;�;�<#/IQf.�/�:�;A@�.�/�:�;�>'0 ?`H�dv>=2�?'<�XT86=j���>�<��'.�o�.+/�:�;`@yK�HIdiV)P+6�6�8.�/�:�;A@yK�HIdOV�P+6�6�og6u8-+.�/�1�J KaLiN=P=/).uQv;�<'. SA.�P=U�<�>L�V�4aQvW�1aQvW�1�>+.AX�XT8J\o3-+.+/)6)<�>LON'P=/G.TXA8V�P=/gLvK#o=tu8�K#l�JM8wKAx�xX

N'P=/G.=@iKIHpog.�P+6)P�N'<#/=LON'P=/G.=@yK�H=XA8:GVhLiN'P#/).#@�-+.+/)6�<�>LON'P=/G.TX)j)k�H�l^m#n\W�W�-+.�/�1�?=JLiN=P=/G.�Q {OC�{�X��+thX

N'P=/G.=@ -+.�/G6�<�>�LiN=P=/).AX)j)k�HporqOs�tuq�8�

��

Y 7g��/�P�;#/�2�?�?��f.�/�:�;�S=>+0�?�L�X�)0)>=UG.�:�P�>M���+0\4�<�?h0�<�_�<=/�;�<�_�<�>�<�>�}T/�:�;�;�<#/+j

>=2�?'<�>^4#:�<�[+0);�<+9)P�<#/�:�;�<!B�0 ?�?'<=/[+0+/)0)<�1=U�;�<�_�<�>ad

��2�/�2�?'<+.)<=/���}A/�:�;�;�<#/�>=2�?'<�7 Y

:�>'.^.+/�:�;�S'>'0 ?�LON'P#/).TX1+9+2�/~N'P#/).=@)HI8|-+.+/)0�1'.�.�/�:�;�;�<#/�7+.�8:�>'.�>'0 ?=_�<=/�81+9+2�/�.�/�:�;�;�<=/�>#2�?=<A@�B�C'D#E)F�EGB�HI8

Page 188: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 182

���g�������M�  �+��¡�¢ £M¤�����������¥=��¦#§�¨=¥M©f�=ª�«�¦=§�¨'¥¬A�¦+­�¨'®�¥=�p�g¯��°T± �)²)¥¤%¦'­ ¨=®�¥=��³=��������´'¡�¦'��µ�µ   ����¡�¨=¢¤ °=¶ �)�u©i�+��������¥=��¦=§�¨'¥¬#·v�#¯T¬¸

¦'­ ¨'®�¥=��¹�¹M�f��¹�¹M�  ����¡�¢ £a¤ ����������¥=��¦=§�¨=¥M©f�=ª «�¦=§�¨'¥�¬T�

º��¥'��­+��¦¤�¦+­�¨'®�¥#�=¬T�

º

»�¼g½ � ¶ �#��§�¨�¨�¾f¿ ¶ ²�² ¶�°   ´T²��   �T¤�¬À ­)¦=ÁG��� ¶ ¦M¾�Â���¦+²�¥   ¥�¦^Ã�¥=��¿ ¶ ²�² ¶�°   ª�²��   �\®=�  ^Ä ­ ¨3Å ¶ �)�ÇÆv¥�¦�ÃMÆ

È ��¥�ÉT��������¥=��¦#§�¨'¥�¦M©�Ã=��¥�¥=��¦���¥+²)¥   ¥�¦ ° ¥=��Ã�¥�¦M©° ¥#��Ã�¥�¦g��¦�Ã=��¥3¿ ¶ ²�² ¶�°   ª�²��   ��Ã�¥   ÉT��������¥=�  ��¥   ¡ ± ����¥�®�¥�¦ ¼'»

Ê�¶ ��Ã!¿ ¶ ²�² ¶�°   ´A²��   �T¤���������¦'­ ¨�©O¿�Ãa©v¡M©R¡�¦+�A¬À=Ë�Ì Â ¼ ¿)ÃM� »)¼ À �)²�¥�Ã�¥   Á�����¢+� ¶ � ¼+»��¦'�^�+������¦+­�¨�© »�¼ §�Á)��Í�Î`ª%ÉT��������¥=� ¼+»

¼ ¡M© »�¼ ¦'­�� È ­ ¨�¨�£ ° ¥=�G� ¼+»¼ ¡�¦+�u� »�¼!Ï ­�¥�¡#Á��=§�®�¥ ° ¥=�G� ¼'»

¸¡ ± §�� °=¶ �)�#Ð%Å�Ñ Ï É Ì Â)Ò+ÓI���¦'� ¢a©,£Ô�  �+�)­�¡'������������¥#� ¼ ���  �+�)­�¡'�3§�Ã�Õ'² ¼ ²��

»�¼ À ¶ ²�² ¶�°   ª Ì �   �)¥�¥=��¦'²�¥   ¥�¦ ¼+»  �+��¡�¢ £M¤ °'¶ �)��©R��¥+��´T� ¶ Á�¥�¦¤ ¿)ÃM©Rµ�¡M©Rµ�¡�¦'�T¬�¬T�»�¼ À §G²�²   ¥#��¦!Ö�¦g��¦ °'¶ �)�\¥�¦'� ± §G²��)¥�¦g�   �רA­  �  ¥   ° ¥��Ø· ¼'»�)¿h¤ °'¶ �G�=Ð   ���G²�¥�¦�¤ °=¶ �)�A¬)ª�Ù�Ó ³�Ú=Ûh¬

°=¶ �)�#Ð   ���)²)¥�¦¤ °'¶ �)�T¬Gª�Ù�Ó×�ÜÆiÖ�¯�Æ��¢��   ���G²�¥�¦¤ °=¶ �)�A¬T�

¿ ¶ �g¤v£=�#¯��Ý£=³�¢a�,£T¹�¹¬°=¶ �)�#Ðy£�Ó×�g� ¶ ² ¶�° ¥=�#¤ °=¶ �)�#Ðy£IÓ#¬T�

°T± �)²)¥z¤   �+��¡�¨=¢¤ °=¶ �G��© Þ�¥�¦�Ã�Þ�¬�¬¸

»)¼ É+¥   ��© ¶ ®�¥   Ã�¥�¦�ÉT��������¥=�~¨`�)�\Ã�¥�¨hÒ�§�¨'¥�¦!­�¥�®�¥#� ± §G­�¢+�\�#��®+� ¼'»¢��g¯��¿ ¶ �g¤v£#�=¯��w£#³=��������´=¡�¦'���,£A¹�¹¬

�)¿h¤=·   ����¡�¨'¢�¤ �������`Ðy£IÓ�Ív¦=§�¨'¥a© °'¶ �)�A¬�¬¢�¹�¹a�

�G¿�¤�¢)���=¯T¬¸

  ±�¶�° ´'¥#���#¤ ��������¦'­ ¨�©�É Ï Ë�ß ´AÒ�ÑGÉ À Ñ'à�Ò È ´ À ¬T�¿�¥ ± ²�¥=�p�gá����¥+��­���¦a�

º¥'²   ¥¸

²��I¤   ���G­�¡'�â§�Ã�Õ+² ¼ ¬b¨§)²�² ¶ ¡�¤   � Ä ¥ ¶ ¿T¤   ���G­�¡'�â§�Ã�Õ'²T¬�¬A�»�¼ Â)²�¥�¨'¥�¦+� ° ����à Ê�¶ ��¦�¥g§�¦�Ã=��¥ Ì �   ��¥g§�¦���¥ ± §�¥�¦��+� ¼'»  ����¡�¢ £a¤ ²#ª�«+�+��������¥#�I© °'¶ �G�T¬A�

Page 189: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 183

ã=ä�å�æ�ç�è'é�ê#é�ë�ì�íAî�é+ë�ì�í�æ+ï�ð`ñIòOó�ô'ã�ã�õé�ë�ì�íAî�é+ë�ì�í�æ+ï�ð`ñIòOó�ô'ã�ã�ê#ã�õö é�ë�÷�ø ùaúiû=ô=ë)éuüví�ç'é ýAé�ô=þ�ç�æú�ó�ÿaü���÷aü���÷�æ+é����Tõì)óhúiû'ô#ë)é#î ö é+ë)ã�ç�æúOû'ô=ëGé��)ä���ñ�� ���

û'ô=ëGé=î ö é�ëGã�ç�æ�úiû=ô=ë)é��)ä���ñpê���������õø�ê ö é+ë)ã)ç�æúOû'ô=ëGé��Aõó)ô=ëgúvù#ê��uõ,ù��+øMõ,ù������

û'ô=ëGé=îiùIñ ê#é�ô+ã)ô�û=ç=ë=úOû'ô#ë)é=îiùIñ��Aõ�

��

������ë�ô�í#ë���ð�ð �!��÷'é�ì�ô�æ�ýì�æ ö úTò�ò�ò"�# ï)æ=þGé�ì�ô�æ$�&%�ì�ç'%(�)é)ç�æ���ç�æ�ÿ�ç=ëGï�æ�í ö ô�ø�ç=ë)�)é�ì�ô�æ�ç�æMü�ÿ=ì�çgì�æ�ÿ�ç#ë+*þ)é�ì�ô�æ

ç=ì�æ�ç ö-, ë�ì�í�í�ç#ë ö ÿ+ï+ë�÷(.)í�ç+ó�ï�ç#ë�.�épû=ç=ë�ÿ�ç�æMü ö ô+ã�ã)ç�ægì�æ�ÿ=ì�ç/ ï-0�ç�ÿ�ç�ð , ë�ì�í�í�ç#ë�í�ç(.)ô�ç#ë�ç�æ�ÿ�ç21=é+ë)ï�þGé�ï�ë3��÷+é�ì�ô�æ öí�ç ö ÷4.�ë�ì�ç�5�ç�æ�û'ç=ë�ÿ�ç�æMò

����ë���ð'ç+é)ç=ë6��û'ô#ë)é7��ì ö é\ÿ=ì�ç8%(�)é�ç�æ���ç�æ�ÿ�ç=ë)ï)æ�í ö ô�ø�ç=ë��Gé�ì�ô�æMüû'ô#ë)é)9âì ö é\ÿ=ì�ç , �:5�ç+ã�ã)çMü�ì�æ�ÿ�ç#ë�ÿ=ì�ç8%uò�;�ø�ç=ë��Gé�ì�ô�æÿ+ï+ë�÷4.�í�ç'ó�ï)ç=ë�.�é×ûì�ë�ÿMò �(�

< ô#ì�ÿ���÷'é�ì�ô�æ�ý`ì�æ ö ú é�ë�ì�í�æ+ï ð�üió�ÿaüv÷aüv÷�æ'é�ü�û=ô=ëGé7�Iü û'ô=ëGé�9��#�=>7? �+ó)ÿMõ ��� # ì)ã�ç�ÿ�ç ö þ�ë�ì�ø+é)ô=ë@�(�ì�æ'é^é+ë�ì�í�æ+ï�ð�ü ������þ)é�òBA`ä , ë�ì�í�í�ç=ë@�(�

��÷Mü ����æ'ï�ë2%�ï ð�ð�ù'û'ç=ëGé-�(���÷�æ+éuõ ���8C�ï�ç�÷#þ�í��D5�ç�û'ç=ëGéE�4�

÷(.(��ë~û'ô#ë)é7�'î�ñIüû'ô#ë)é�9#î�ñ�õ

Fö é+ë)ï�÷'é'��÷+é+ì�ô�æ ö ����÷'é�õì�æ'éâì�ìIü�þ�þ�õ

���21�ø�ç#ì�÷4.�ç=ë�ø+ã7�Gé / ö ÷4.7�Gó�ó�ç�æ$�B�(���÷+é�ê�ú ö é�ë)ï)÷+é'��÷'é�ì�ô�æ ö �G�fðH�Gã�ã)ô�÷ú ö ì / ç�ô'óTú ö é�ëGï�÷+é'��÷'é�ì�ô�æ ö ���Aõ��� ? ã�ç�ð'ç�æ+épû`ì�ë�ÿ < ô=ë�æ�ç���æ�ÿ=ì�ç > ì ö é�ç�í�ç4.7��ç�æ�í'é�òB�(���÷+é#ä�å�æ�ç�è'é�ê=é+ë�ì�í`î�é+ë�ì�í�æ+ï ðñIòI��÷+é+ì�ô�æMõé+ë�ì�íAî�é+ë�ì�í�æ+ï�ð`ñIòI��÷'é�ì�ô�æ)ê���÷+éuõ���8J�æ�ÿ�ô�ø�ç=ë)�)é�ì�ô�æ!ï�æ�ÿ!é7�:5�ç+ã�ã)ç�ð`ì)é\ÿ�ç�æ2K�ç=ëGé�ç�æ^í�ç+ó�ï�ç+ã�ã�é-�(���� < ô�æ�û=ô=ë)é(�\ï)æ�ÿ�û'ô#ë)é)9âë�ç+é�ï+ë�æ��:54.7��ç�æ�í�ç�æ3�(�ìGóhúiû'ô#ë)é(�+î ö é�ë)ã)ç�æ�úiû'ô#ë)é7� �)ä���ñ"�)����

û'ô#ë)é(�+î ö é�ëGã�ç�æ�úiû'ô#ë)é(���)ä���ñ êL�M�)�N��õìGóhúiû'ô#ë)é)9=î ö é�ë)ã)ç�æ�úiû'ô#ë)é�9��)ä���ñ"�)����

û'ô#ë)é)9=î ö é�ëGã�ç�æ�úiû'ô#ë)é)9��)ä���ñ êL�M�)�N��õþ�þpê ö é�ëGã�ç�æ�úiû'ô#ë)é(���Tõó)ô=ëgú�ì�ì ê ��õ�ì�ì"�Tþ�þIõ ì�ì:�)�G�

û'ô#ë)é(�+î�ì�ì�ñ�ê=é�ô'ã�ô�û=ç=ë#úiû'ô#ë)é7�'î�ì�ì�ñ��Aõþ�þpê ö é�ëGã�ç�æ�úiû'ô#ë)é)9��Tõó)ô=ëgú�ì�ì ê ��õ�ì�ì"�Tþ�þIõ ì�ì:�)�G�

û'ô#ë)é)9=î�ì�ì�ñ�ê=é�ô'ã�ô�û=ç=ë#úiû'ô#ë)é�9#î�ì�ì�ñ��Aõö é�ë�÷�ø ùaú:��÷+é=ä å�ô�ø�ç=ë)�)é�ì�ô�æMü û'ô#ë)é7� �Tõö é�ë�÷�ø ùaú:��÷+é=ä å+é7�D5�ç'ã�ã�çaü�û'ô#ë)é)9��Tõ

Page 190: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 184

O�P�Q�RDS�T R�UWV)V XBY�S4Z"[H\D]�^�_�`a�b ]�ced7\:S)]$X&f7\Dg-h(i�UeZ�d�g)]�]�UjV4g)]@VG\�d-k b T�g(l�S�g R�\:T)gDV'm�UDn�g(Z)Z�g)]�]�UjV4g�]

o�\Dg�\:]3o�g R+pGc�d7\DS�]3o�g)^2m�R�\DT�T�g R:^3q�g RWr�g�]�o)g(dsr4g R:o�g)]r4g R:o)g�]�\:]3o�\Dg't(\:^4d�g3Y�S4Z�^3o�g�^2m�R�\:T)T�g R:^3T�g�^)Y(l(R�\:g)n�g�]vuo�g R@o�\:g)^�gEp4g)]�o�g R b ]�T�g)]3q�S�RD]�\WV)V�d

Q�U)R�UjV4g(d�g�R6X�w$X!U�ced b g(Z�Z�g'x b V)V4g�R@o)g�^2m�R�\DT�T)g�R:^r4S R�d)yNXzm�UDn�g(Z)Z�g�])]�UjV4gd�g){(d�X|h(i�UeZ�d�g)]�]�UjV4gEVH\ed-g�q�g)](d b g(Z)Z�gDV}k b ^�Ued�k P4O

q�S \:o3Y�S4Z"[H\D]�^G_Ww$u~r4S�Red�y�uMd�g){(d�`\:]4dEwv�&O�P�U)c�d b g(Z)Z�g�Rsm�R�\:T)T�g�R@P4OY(l(U�R�r4S R�d�y ����u

d�g){(d�������^(d(R b Y4d-Y�S(Z b V4])^3P�Y$�\:]4d���u�iv�\:]4d�\6u�c6�Y(l(U�R:P8d�gDV4iv�Y(l(U�R2d��W�7�(�Dm�t7�ex7�6�\:]4dE^4d�S)i$�O�P���� a U�Z�Z�Xs_�Y�S4Z b V�]��6u�Y)S(Z b V4]4yNu3���)�"`!��^)g(Z�g�Y(d��)�����BP(O

^(d�S)i-���6�d��:�(���������N�)�c��'^(d(R�Z�g�]G_d�g�{4d�`��\���_"d�g){(d �:�7������_��`�

\"���6�&d��:�(�s�������N�)�r�l7\eZ�g�_�^4d�S)iG`�

�}�����r�l(\�Z�g�_)_�_"d�g�{(d ��\)�:���L��U6���)�'d�g�{4d���\)�"���L��kv�"`����

_"d�g�{4d���\)�:�e��� p¡���)�8d�g�{4d���\)�"�)����¢v�"`����_"d�g�{4d���\)�s���������`�`+����_D\"����c�`�`

�\���_d�g�{4d���\��:�e��� p¡�B���8d�g){(d���\��"�)���£¢$�"`

d�g�{4d���\��"� d�S(Z�SDr�g�R�_d�g){(d���\���`��d��M�����d�g){(d ��\��6�¤d �¥��¦�������M�)�N�)�

\:¦)¦$�§��¦)¦$�¨

O�P2m7g)^(d�u�S)n�\:]Er4S�Red-g�q�g)](d b g(Z)ZEo)g�Rsm�UDn�g(Z)Z�g)]�]�UjV4g3]�S)Y(lsVH\edEg \:])gDV©Q b ] c�do�UDq�S�R@^4d�g(l)dNuªr4g)]�]3w�Usm�UDn�g(Z)Z�g)]�]�UjV4g�U:n)^�Y(l�]�g \:o�g)]�P4O\���_�_d�g�V4i2�'^(d7RDY(l7R _"d�u����)�"`�` «�� x�¬�t)t�`­O�P�kv�&®N�ªp�xD¯��M�p�x:¯'P4O

^(d(R:Y)i"�$_dNu�d�gDV�i�¦�� `��O�P2h7i U�Z)d�g3g�\:]4� b g�T�g)]3P(OY2�°_W^(d(R b Y4d-Y�S(Z b V4])^3PG`&VHU�Z)Z�S)YG_�^ \:k)g�S(��_�^(d(R b Y(d-Y�S(Z b V�]�^G`)`��Y�±"��]�g){(d@��d7R�\DT��"w����£Y�S4Z�^$�d7R)\:T��"w��6��Y�S4Z�^��(Y$�^(d(R:Y�i�$_WY�±j�4d7U:n)g(Z)Z�g$u~r4S�Red�y�`��^(d(R:Y�i�$_WY�±j�)^�i�UeZ�d�g$uMd�`��d��D�7�s���M�������O�P8®7\D^3k b V}] U:g�Y4l�^(d�g�]3¢�g \:Y(l�g�]8Z�g)^�g)]�P4Or�l(\�Z�g�_)_:\"��c�`+���8d�g){(d ��\���«����)u��B���8d�g){(d���\���«����`��`

\D¦�¦v�

Page 191: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 185

²�³�´"µ�¶�·(µ ¸�²)¹"º�º�»"¼�»8½�½¤²:¾eº�¿�¼À µ�Á�Â2º�ÃNĶ(Å À ¶

²e³�´"µ�¶)·(µ ¸�²�¹º�º�»)Æ�»¼²:Ç)Ç$Ä&È�É8Ê�Á�Ë�ËHÌ2Í�¶�Î�¶ Ï�Å�¶ À ¶)Ð�É4È

ÑѶ4Å À ¶

È�É8ÒNÓ!Ô)Ì�Å�Å�ÕBÖ�Á(Å)Í"Ë4Ð2º'¶�·)Â$ÆBÖ�Á4Å�Í"Ë�Ð2º�¶)·�Â$Æ3Ó)Ó�ÓBÉ(È×

²�º�Ã�ÄØ�Ù ²eÅ�¶�´ À µ�Á)Â�Ú)Ú©´D²"Û)º�¿�¼)¼×

Ü º�Ã�ÄØ�Ù ²�Å�¶�´)´�´"µ�¶�·(µ ¸�²)¹:¾�ºL»�Ì6»�Ú)Ú'µ�¶�·4µ�¸�²)¹"Û�ºL»�Ýv»"¼�½�½

´"µ�¶�·4µ�¸�²)¹:¾eº�» Þ¡»�Ú)Ú8µ�¶�·4µ�¸�²)¹"Û)º�»�ßv»"¼�½�½´"µ�¶�·4µ�¸�²)¹sº�º�»�Ó�»¼�¼+Ú�Ú�´D²"Û�º�¿�¼�¼

ײ�³�´µ�¶�·4µ�¸�²�¹:¾eº�» Þ¡»BÚ�Ú8µ�¶)·(µ�¸�²�¹"Û)º�»£ß$»"¼

µ�¶�·4µ�¸�²�¹"º µ�Á(Å�Á Ø ¶�Ï�´µ�¶)·(µ�¸�²�¹�¼�ĵ�¸ Ü ¹º�µ�¶)·(µ ¸�²�¹6Ä

²:Ç)Ç$Ä Ü Ç)Ç$ÄÑ

µ�¸ Ü ¹"ºL»Mà)ÃN»�ÄÈ�É2á7¶ À µ�Æ�Á)Î�²:Ð Ø Á�Ïeµ-¶�â�¶)Ð(µ�Í�¶(Å)ÅEã)¶�Ïsá�ÌDÎ�¶(Å)Å�¶)Ð�Ð�ÌjË4¶3Ð�Á)Ö Ù ËH²eµE¶ ²:Ð�¶�Ë©ä�Í�Ð ¿�µã�ÌDâ�Á�Ï À µ�¶ Ù µNÆ Ø ¶)Ð�Ð3å�Ìsá�ÌDÎ�¶(Å)Å�¶)Ð�Ð�ÌjË4¶�Ì:Î À Ö Ù Ð�¶ ²:ã�¶)Ð�É4Ȳ�³�´�´µ�¶�Ë4Â2º À µ7ÏDÖ Ù Ï ´"µ�Æ�»�Ó)»"¼�¼ æ�º ç�è�é)é�¼­È�É�ÝvÓ&êNÓªÞ�çDë�ÓMìÞ�ç:ë'É4È

À µ(Ï:Ö)Â Ü ´µNÆ�µ�¶DË�Â�Ç�í ¼�ÄÈ�É2î7Â�ÌeÅ�µ�¶�¶ ²:Ð(³)Í�¶)ï�¶�Ð3É4Ȳ�³�´"µ ¸ À µ7Ï�Å�¶�ÐG´µ�¼eð�í�¹Û�ñ ò�¼

µ ¸ À µ(Ï�Å�¶�ÐG´µ�¼�ð�í�¹º�»Mà)ÃN»)ÄÖ2º°´ À µ(Ï�Í�Ö4µ-Ö�Á(Å)Í"Ë4Ð À ÉG¼&ËHÌ�Å)Å�Á)ÖG´ À ²:Ý)¶�Á(³�´ À µ(Ï�Í�Ö(µ-Ö�Á(Å)Í"Ë�Ð À ¼)¼�ÄÖ�ð"¾�Ð�¶)·(µ@º�µ7Ï�²Dï�¸"å�¹�Ó£Ö�Á4Å À ĵ7Ï)²:ï�¸"å�¹6Ó�Ö�Á4Å À º(Ö$ÄÀ µ(Ï:Ö�Â Ü ´WÖ�ðj¾4µ7Ì:Î)¶(Å)Å�¶$Æ Ø Á�Ïeµ�Ò�¼�ÄÀ µ(Ï:Ö�Â Ü ´WÖ�ðj¾ À Â�ÌeÅ�µ�¶$ÆMµ�¼�ĵ�¸DÃ7¹sº�»Mà�Ã�»�ÄÈ�Éó»ôº'¶)·�Â$Æ)»&Í�¶�Î)¶�Ï�Å�¶ À ¶�Ð3É(È

Ø�Ù ²eÅ�¶�´�´"µ�¶�·(µ ¸�²)¹©æ£º�»�Æ�»¼�Ú)Ú�´:²"Û)º�¿ ¼�¼²:Ç)Ç$Ä

²�³�´"µ�¶�·4µ�¸�²)¹�º)º�»)Æ�»"¼²DÇ�Ç$ÄØ�Ù ²�Å�¶�´µ�¶�·4µ�¸�²)¹sº�º�»3»¼

²DÇ�Ç$IJ�³�´:²D¾�º�¿ ¼

À µ�Á�Âeº�Ã�ÄÑ

ÑÑ

È�É ä)Ï:Á)ï�Ï�ÌjË�Ë ÕBâ ² À ²eµÔeÍ�Ð ¿�µ7²DÁ�ÐvÕ|á�²:¶(³�¶�Ð)ã(Í7ÏDÖ Ù Å(Ì�Í)³Eã)¶�Ïsá�Ï)²:ï�ï)¶�Ï3²:Ð3ã)¶�Ð8³�Á(Å)Å�Á Ø À ðDé7² À µ�¶)Ð

õ ²:¶ À ¶�Ïsá�²:¶(³�¶�Ð�ã4Í7ÏDÖ Ù Å(Ì�Í�³ Ø ²�Ï:ã3â)ÁDË©ä�Ï:Á)ï�Ï)ÌWË�Ë À ¶�Ì�ÏDÖ Ùï)¶ À µ7Ì�Ïeµ�¶4µ�æ

ä)Ì�Ï)ÌWË4¶4µ�¶ Ï�ÕMÅDº}ç)Í"Ë)Ë4¶�Ï@ã)¶ À á�Ï�²Dï�ï)¶�Ï À É(È

Page 192: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 186

ö�÷ ø:ù3ö�øDú�ø�û�ü:ø:ý4û3þ�ÿ�ú(û������(û3û��)ø������� (û��ú(û������(û��:ù��(þ� ����ø:ý4û����û��)ø����:þ�����ú��ý��� ø:ù!��"��û���ø#�$�Dþ����&%�÷(þ)þ'�(*)(ø�þ�Gü�ú4û��#�#+-,�ü���.0/(û���ø�������1023�ý�ù42�ÿ�56��7�ÿ�

û8��û���ø��!�����û���ø#�#94ý-�0+Nü#��.0/(û��)ø������ ÿ*�ø�%�ü"û���ø����:������ú��ý���;7�ÿ< >=�ý)÷(û��ý�ø:ú(û-ý)÷��)-ý ø���))û@?��ú-�A��))û'1B��þ�ú�÷C?)ú��A�-)A)ý�5D <

ö�øDú�ø�û�üE�vÿ*��F�G�-.H/�ý�I4û'�Jû��)ø����:þ����E,;��ø:÷K��,��)ø:÷��)ø�ûL�$ !�J

< M��:÷�����H++ONBú����#��)P ��ý;Q�û7øD÷�ý!NSR�ø��%��ý)ù����#��)�þ�����%Eù���"R*�)ø������3ø:ý3ù��ý>%�÷(þ)þ�÷A(4ú$.#T7øDú(ûA)ýU ��"R�ø#�%��ý�ù-�����-)�þ����%-ú�(þA?)ú(û"(Hø��:ù3ù����#��)�M�D÷�;��3+�+8ö ø:ú ø�ûö)÷��#��ý)÷#+�+-�ýM�����3+-4ûA;��NMþ#�WV��0+�+-��@ù��úKR*��ø#�����:ú <

ö�÷ ø:ù3ú;����-)�ü�ÿ�øDý(û�Q��øDùK��7'�÷;�:ù����)ùGü)ÿ*�%�÷���ü�QX��7��YQ0Z û���ø#�#9���ý(û��YQ� � Gÿsû��)ø����AQ����ú��ýK�[7'�%�÷���ü�QX��7��YQ0Z û���ø#�#9���ý(û��YQ� � Gÿ

ø�%�ü"û���ø#�$�AQ�����ú�)ý�����7�ÿö�ø:ú ø�û�ü#Q�ÿ$�J

< [M�D÷�;��3+�+ON\%�÷4þ�þ09�÷��)ûP ��ý�Qeû7ø:÷)ý]N_^*��ú���#?3ù;�K%�÷(þ)þ�÷#(�ú$.#T7ø:ú4ûA�ý3ù���"R*�)ø������� <ö�÷ ø:ù>%�÷4þ�þ09�÷���û�ü�ÿ�ú(û����A�4û3û���ø#��;�� (û'�ø:ý4û�ø��ú(û����A�4û��:ù�4þ@ ;�����)���`(4÷;��û��#V0^-a;b�T�b�V����

û��}û���ø#�]�%�÷;�}üDø0�;7'��øXZ�û��)ø��A9-��ý4û'�Iø� �ÿ� ,��)ø:ý4û%�ü�20c�ý�R*�)ø�������Ned)úf2*1&û���ø�����ø�����ý;�3+-�ÿ*�,��)ø:ý4û%�ü�2"��ý�ù3ù�ø#>%�÷(þ)þ�÷A(4úKR*��ø#������N"2�ÿ$��"��û�.H/-%�÷4þ�þ'�ú(û�����,0�$ü&(4÷;��û'1B��.0/(û���ø������ ÿ*�(*)(ø�þ�Gü�ú4û��#�#+-,�üg(4÷;��û�102L)ý�ùf2)ÿ[5E��7�ÿ

Page 193: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 187

h i;jk�l-mn$op�qr]s"p$sut-v;j�m$w*xyXz*y�{0|l�}~�m�xr-m�j���i0�!ogt-v;j�m's�y�{0|�m�j�k����}�j;w*x�mA���]x�i;jk#l�mn$opX�Alfp�w*x�

Das Modul �����4���!����������� :�A����������������������������������������������������������������������������������������-��A�C� v������'���*��� �f�X�0  �$� �-��A� �-��A�[¡ ��l�¢�m�k�v�l]�   l;y��L�$r}C£���j¤�#l�mXt*��j�nAr�£}�k�m@v�¥C}�k�l�}C�}��}¥}�l} � }�l�} �-��A� ¦ v�lK�*jk#��};j�l>mA};j3§fk�l�k#}�j�m ����A� �-��A� �-��A� ¨ ��y�����ky"©�}-ª�j�ª�y�ª�l]s�«*y#l���y�jC¬�­­-®C�Al� ����A����������������������������������������������������������������������������������������-�¯ k#l�����A��}°p&§�yk#l]±&ª*p¦ v;k��>m�j�k����}�j3²�r}-m*o�k�sY¢;wk�l-m³k�sY¢�xhr�m�j��A�-mCm�jk#�r � ��x��z�oLr-m�j�����mCm�j�k��r � wD§fy����Av�4oLr�k#£}�v�n*o3r�m�j��A�-m¤m�jk#�rfw�w*x�A� ���A}#§�}l-mFtfkj�� ¦ v�j�l�}[y�lC��k�}>�k�r�m�}[y�l��}�ª�y#}l���m ���r�m�j���i0�]oX��{0|l�yH§-}]s&m�j�k��$µ�¢¶�±6l�yH§-}fw$x��{0|l�}~�m�z[m�j�k��$µ�k¶�±gm�j�k����}�j#r]xm�j�k���µAk¶�±gm�jk����}�j#rKzW��x��A� �vA§-i;yj�}4ow �-��A� ����A�[¡ ��l�¢�m�k�v�l]����}�r�m's_t�}��A�-ªA}�j"�$jk����};j8};k�l}�l[y�l��}�j�}�lK�*jk#���}�j ����A� y���r���v}r�}l[¢y#ll]± �-��A�C ��y�����ky"©�}-ª�j�ª�y�ª�l]s�«*y#l���y�jC¬�­­-® �-�¦ v;k��C�vA§-i�y�j�}fo�whk�l-m@v;j���}�j�µ3��� ��·� $�A ¶-µL�;� �Y·� *�A ¶�x ���C� y�m�jk�~!s\�0§W��k�}C} ¦ }l-m��}����¥}�r�m�}�ªA}�l�}�l ������¤¹ j���l��Al��}l[y��nA£-�Al�}�ª0§�}l]± �-�k�l-mº�»sYk�sY¢�x��ª�yj t-v;j�m�µ �0 -� ���� � ¶�x��ª�yjKm�j�k����}�j�l;y3§�}$µ �X -� ���� � ¶�s6vi�µ�¼�����0�$�¶�sgm�y#¥$µ �X -� ���� � ¶�xr�m�j��A�-mCm�jk#��};j � m�¬�xr�m�j��A�-m�y���m�k�vl�r � y��-m'xk�l-m¤��x�A�[¡ �A}�j�½�}�}�l��$jk#��};jCy���m�k�vl>�k�r�m�}C����j#��ªAr�}�ª�}l ���m�¬"z[m�j�k��!x

Page 194: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 188

¾A¿;À[Á�Â0Ã;Ä'Å�Â0Æ�Ç�ÀÂ�ÈAÉ-Ê�Ë�Ç'Å�Â�ÌÌ4ÍÎ Ï Ê�Ç�Ã[Ç�Ð�Ñ0Ò Ï Ê�Ç�Â#¿Ë]ÅÓ Ç�À�Ê�Ô0Õ!ÁL¿Ô!Ö Ï Ê�Ç;ÑHÒ¿�Ô×;À Ï Ç�Â�¿Ë4Í*ÅÓ Ç�À�Ê�Ô0Õ!Á0Ç Ï#Ø Ö Ï Ê-Ç�ÑHÒ-Ç Ï#Ø ×�Ù�ÙA×fÍ$ÅÚ$Û Â�Ù�×fÁ Ó Ç�À#Ê#Ü-Ô4ÁL¿�Ô]Ö0ÝXÞÄ$ÝÍ�ßß Ó Ç�À�Ê#Ü�ÔfÁL¿�Ô]ÖXÝL×Ë�àfÝ�ÍÍÎÚ*Û Â�ÙA×fÁ Ó Ç�À�Ê#Ü�ÔfÁL¿�Ô]ÖXÝL×Ë�àfÝÍ�ÍÎ ¾A¿�À;Á�áXÃ�Ä'Å�á0Æ�Ç�ÀÂ#È#É-Ê�Ë�Ç�ÅYá�Ì�ÌfÍâ�ã�ä�× Ó Ç'Öå¿ Ø[Ï�æ Ê Û à×;ÀFä Ï�Ø ×�ÙÙ�×ËË Ï Ü�× æ × Ø ×;À�×;Â�Ë Ó Ç�ÂHÜÜ*Ç�çeã-âÂ�¾*Á�è#Á Ó Ç�À�ÊAÜ-ÔfÁXÇ�À�Â�È$é�áê�çgÇ Ï#Ø ÙA×!ÖgÇ Ï�Ø Í�ÍÍâAãKä�× Ó Ç�Öe¿ Ø ×�Â�ËKä*À�Â�È�È×�À Ï�æ ¾�à�Â�× Ó × ÓWë À�×�Â#ÈË;Â Ó À�× Ï È�Â#×�À�Ç�çåã�âÂ�¾GÁ�è Ó Ç�À�Ê#Ü�ÔfÁL¿�Ô]ÖXÝ�Â�Ë Ó ×;À�Ç*Ý�ͺß�ß>Ç�ÀÂ#È$éAá�ê�ç�Â�Ë Ó ×�À�Ç@Ò>Ä*Íâ�ã�ì Ï Ü�×ËCà× Ó ä$ÀÂ�È�È×;À Ó à×�À�í�×ËÈ�×Kä*ÀÂ#ÈÈ×;À Ó Û Â#Ëî æ ¾ æ ×È×�ËCã�âÇ�À�Â�È�È×�ÀHÉ Ó ×�Ç*Á#Â�ÖYá;Í*Å×�Ù Ó ×Â�¾$Á�è Ó Ç�À#Ê#Ü-Ô4ÁL¿Ô!Ö0Ý3à×�Ù�×�ÇA×4ÝÍ�ßß>Ç�ÀÂ�È�éAáê�çEà�×�ÙA×-ÇA×CÒ>Ä*ÍÇ�ÀÂ�È�È×;À3É Ó ×�Ç*Á#Â�Ö�á�Í*Å×�Ù Ó × Â�¾$Á�è Ó Ç�À#Ê#Ü�ÔfÁL¿�Ô]Ö0Ý æ Ô�à Ï Ç�×fÝÍ�ß�ß�Ç�ÀÂ#È$éAá�ê�ç æ Ôà Ï ÇA×CÒ>Ä*ÍÇ�ÀÂ#ÈÈ×;À3É Ó ×�Ç$Á�Â�Ö�á�Í$ÅÏ Ê�Ç#Ã Ï Ê-Ç�Ñ0ÒË×�ï�Ç'ÅÓ Ç�À#ÊÔXÕ]ÁL¿�Ô]Ö Ï Ê�Ç;ÑHÒ¿�Ô×;À Ï Ç�Â�¿Ë4Í*ÅÓ Ç�À#ÊÔXÕ]Á0Ç Ï�Ø Ö Ï Ê-Ç�ÑHÒ-Ç Ï#Ø ×�Ù�ÙA×fÍ$ÅÂ�¾GÁ0Ç Ï�Ø é Ó Ç�À�ÙA×�ËfÁ0Ç Ï�Ø Í�ÑAÐ�ê0ÆCð�ñGÍÇ Ï�Ø é Ó Ç�À�ÙA×�ËfÁ0Ç Ï�Ø Í�ÑAÐ�ê"Ãóò&ÞÄ'ò�Åô ôÇ�Ð�ÌÌ!Åôô

õ ¿;Â�à>Ç�À�Â�ÈÈ�×�À Ó É-¿ æ Ç*Á�ÍÎâAã@ö æAÓ È Ï�Ø ×¤à�×�ÀKÇ�À�Â�ÈÈ�×�À Ó Ù�Â Ó Ç�×Cã�â

Â�Ë-dzÂ�ÅÓ Ç�À æ Ê-ÇCÇ�ÀÂ#È Ó ã�Ç�À�ÅÓ Ç�À æ Ê-ÇCÇ�ÀÂ#ÈÈ×;À�ã�Ç'ÅÊ Û Ï À Ú ¿;À�Ç�é#ì0ö-í ë�÷�ë ì�ê�ÅÇ�Ã[Ç�ÀÂ#È]ÅÔ�À�Â�Ë-Ǿ*Á�Ýgö æAÓ È Ï�Ø ×Cà�×�À ÷ Â Ó ÇA×!Ö Ú ×�Ù�Ê Û ×Kä*À�Â�È�È×�À Ï Ëà×;À�×Kä*À�Â�ÈÈ�×�À Ï�æ�Ó ÙA¿�× Ó ×Ë[á�¿×�ËË�×Ë]øXÝÍ*žA¿;À�Á#Â0Ã�Ä�ÅYÂXÆ�Ç�À�Â�È#É�ÊË-Ç'ÅYÂ#ÌÌfÍÎ Ç�À0Ã�Ç;ÑHÒ-Ç�ÀÂ#ÈÈ×;À Ó ÅÓ Ç�À�Ê�Ô0Õ!Á Ú ¿;À�Ç'Ö&Ç�À-ÑHÒË Ï Ü�×fÍ*ÅÔ;ÀÂ�Ë-Ǿ$ÁÝ0Þ�Ë�ùA×;À"ä*ÀÂ#ÈÈ�×�À�ú Ó á Ï ËËCà�Â#×�¾�¿�ÙAÈ�×Ë�à×ËKä$ÀÂ�È�È×�À Ï�æAÓ Ù�¿× Ó ×Ë!øFÝ$ÖgÇ;ÑHÒË Ï Ü-×4Í*ÅÚ$Û Â�Ù�×fÁ Ó Ç�À#Ê#Ü-Ô4Á Ú ¿�À�Ç�Ö0Ý3×Ëà4ÝÍÍÎ Ô�ÀÂ#Ë�Ǿ$ÁÝGòEú Ó òÖ"Ý$Ö Ú ¿;À�Ç$Í*ÅÇ�À0Ã;Ç�À�Ñ0ÒË�×ï�Ç�ÅÓ Ç�À#ÊÔ0Õ!Á Ú ¿�À�Ç�ÖgÇ�À-ÑHÒ�Ë Ï Ü�×fÍ*Å

Page 195: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 189

ûü�ýý]þûÿ������ ü������ � � $þû

��� ��� ü ������� � ����� ü�� ��� ü���� ��� ü��� �� � ��!#"�$�%�%�& �'� & �)(�������� & ��� � � & � $ &�*�& �#ÿ�� $+&,��ü.- ����� �,�� � �/!#"�$�%�%�& �'� & �)(�������� & ��� � � & ��� & � � ��� ü & � $ ��021 �,3+$��+& � -2& ��� & �4� � ��� �2�� ü � $ 0 üCü ������� � ü � þ��� ü65�þ

� � ü ������7 �98/: � &�& �+; ýý ��� þ �2�ü �<; ü �����=7 ��8/:gü ������� & ��� þ- 1,� �+&>� � ü ��0 % ÿ �0ü �2?A@�� 3B%�&C��B& ��� � �D ;�E �5 ; ü �������2� $�%��Xü �2?A@�� 3B%�&> *þ� �� � ü ��0 % ÿ �0ü ������7 5F8/: � 3B%�&C�gü ������7 �,8/: � 3B%�&> �D ;�E)G�G ü �����=7 �98F: � &�& �IHKJ�E � ü �����=7 �,8/: � &�& �I; ýý ��� þü ����� � � ����� ü���L�M5C $þû&,� � &� �� � ü ��0 % ÿ �0ü �����=7 5F8/: � 3B%2&N�gü �����=7 �,8/: � 3B%2&O ;�;�E ü & � % � � & 1 � & � ýý!þü ��; ü �2?A@�� &�P�ü�þûû

��� ��� ü & � % ��� 3�ü+&>�� ���� ü � þ��� üQ��þ� ü � $ 0 üCü ������� & � � ü'þ0,1 3 � - � � ü 7 "�R2S�T+U,T+"98�þÿ������ ü������ � ����������������������������������������������������������������������������������������������������������������� � � � *þÿ������ ü����VR � 3+�B5 � &�W2$ �X( & � % ����� & � $ ��� - ������� $ ��0,1+� &,��$ & 1,� üY:�:�:V� � � $þü & � % � � & 1 �+& �X;ZE þ0 � % ÿ 3 � &O�� $þ� � ü ������� & ����� � $ü�� *þ �,�� � � � ��;�E þ �<H ü ��������0�� ü'þ � ýý> � � � � ��� ;�E þ[� H ü ����� �20�� ü'þ\��ýýO ü ������7 ��8F: � &�& �+;�E þü ����� � � ����� ü� � � � *þü�ýý]þû� �]�Xü & � % � � & 1 � & �'@^E �

Page 196: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 190

_�`�a�b,c�de�f�g�h�i�j�h,c j2k�c)l�a�j4m�n�j�o,p9a�q,k,r�j�asc�tul�v�h�h�l�a�j'w�x h,d�x j2k9`+x+b�o,y+b�l�j�`Xz`�a�o�o�j�`'b�a�q,k�cc j�`B{=a�b�a�j�`+cL|Vy bOf�}�~c9`�a�o�o�j�`�h �2n,x�ce�}~_�`�a�b,c�de�f<y b������������������������������������������������������������������������������������������������������������������,y+b>f�}�~�j,p+h�j� _�`�a�b2c�d�e�f�y+b��,a�j�m�j�b�o�j4l�j�`Xz`�a�o�o�j�`Ic j�`B{=a�b�a�j�`+cF������y+b>f�}�~_�`�a�b2c�d�e�f�y+b������������������������������������������������������������������������������������������������������������������2y b>f�}~��

Das Modul �������C�������N������� :� ������������������������������������������������������������������������������������������������������������������������������� �� ��m�n�l,x�p��u���,�,�+���9g+�+��g � �� � � �� �K�+x+b�rsc9a�n�bC��w2b�v+p���h�j�n�i�n�n�j�a�b�j�o�j�o�j�i�j�b�j�m�j�b�o�j���n�bIz�a�o�o�j��b � �� � z�a�o�o�j��bZr�n�b2d�p�x+j�b2cQa�h,c�| � �� � � �� � �,p,v+x+l�a�vX�9j2k9sk9v+k+bCt¡ v�b,x9v��¢�£�£2¤ � �� ������������������������������������������������������������������������������������������������������������������������������� �¥ a�b�q,p�x l�j¦f§{=v�a�bC|§kf� � n��l�j��j�l>e�} � �� � � �� � �sx b�r+c9a�n�bC�¡z,j�h,cLt�2j,p+q,k jK©�v�v��j���n�bIz�a�o�o�j��b�o�j�n��l�b�j,c)h�a�b�lCtu� �� � � �

��n�a�l�n��l�j��j�l>e�}�a�b2cª��t[aFt¬«Ct\r/~q,k,v�Ic j�­,c�®���w2m�g+�,g+�9F~q,k,v�Ic9�a�o�o�j��b�vB{�j�®��<w2m�g+�9gs�9/~h,c,+x q2c�c9�a�o�o�j�'�,c�~h,c,+x q2c�v�l�«2p°��v/~� �Kv+p�p jI�9j�+c j�l�j�'m�vsc9�a�­Zvsx�d�±)h�j2c ²�j�b4� �d n�Ke�r�³�±�~\r��c,�a�o �2q�b,c�~\r�µ�µO}d n�KeB«+³�±L~¬«s�c9�a�o���q�b2c�~¬«�µ�µ>}� n��l�j�,®+r�2®A«�<³�±�~n��l�j�,®�«�2® r�<³�±�~�� �I 9j�l�j d n2p�p n 2h=¶��9a�h,c+j4l�j�Xz�a�o�o�j�'l,x,�q,k,v��i�j�asc j�bNt#x b�l�l�a�jK©��a�n��a+c9v�j,c j�bj�b2c h�_��j�q,k+j�b�l�h�j2c ²�j�bC|u� �

c'³Kc9�a�oC~

Page 197: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 191

· ¸�¹Kº�»�¼�½�¾\»�¿�À,¹�Á� Ã2Ä�Å,À�¾\»�Æ�ÆOÇÈ É ¼�À�ÊAË2· ¸,Ì�Ì�¾ÎÍ+Ï É'Ð�Ñ Á�Â2À É+Ò ·)Ó�Á ÑKÔ ¸,Ì�Ì ¸ Õ2Ö^×9Á�Ö2À Ñ Ó Ñ ÖIع�Á�Â�Â Ñ ¹�Ö�Ï,ÍÖ,À9¹�Ä�Ù<ÚCº�À Ñ�Û ÀLÜ É ÊAË2À9¹�Á�Â�Â Ñ ¹�Ç�¾ÕÝ9ÁsÌ Ñ º�Ö,À,¹�Ä�Þ�Ù>º<À Ñ�Û À�Ü<ß Ñ Å�Ó>ß�Ç�଼�½ÇÈ ÚK¼ZÀ,¹�Á�Â�Ã2Å Ò Þ�º<À Ñ�Û ÀÇ�¾ Í+Ï^á Ò Þ�Þ Ñ ¹'Ó Ñ Ö Ñ Á�Å�Â Ñ Ì Ñ Ö Ñ Å Ñ ÅIع�Á�Â�Â Ñ ¹�Ö Ñ ¹BÞ=ÁsÀ�À Ñ Ì Å�Ï,ÍÁ+·]º�ºB¸�¹�Ó Ñ ¹2â »�ã2âäÚFã�¼�¼�åÇçæ�æ6º�¸�¹�Ó Ñ ¹,âVÚ/ã,â+»�ã<¼�¼è�Ç�ÇÈ Ù�¹�Á�Å2À�·º�ß�é+Å,é ÅsêÁ�Ó Ñ ¹�Ö�Ù�¹ Ò Ä,Ý�Á�Å4Ó Ñ ¹'ë�¹�Ó�Å Ò Å�Â�Ó Ñ ¹Xع�Á�Â�Â Ñ ¹>à�à�à[é+Å>ß�Ç�¾· ¸2Ì�Ì<Ã2¸ Ò Àº�ǾìÑ Ì+Ö ÑÈ ¸�¹�Ó Ñ ¹,â »�ã,âVÚ/ã�¼�è/¾¸�¹�Ó Ñ ¹,âäÚFã,â+»�ã�¼�å�¾ì É ¼ É ÊAË�Å Ñ�Û À�¾ Í Ï É'Ð�Ñ Á�Â,À ÉsÒ ·)Ó Ñ Å�Å É�Ñ Ä2Ý Ö,À Ñ ÅKí�Á�Å,À,¹ É ÂKÁ�Å�Ó Ñ ¹I×9Á�Ö,À Ñ Ï,ÍÖ,À,¹�Ä�Ù<ÚCº<À Ñ�Û À�Ü É ÊAË2À9¹�Á�Â�Â Ñ ¹�Ç�¾ìÀ Æ�ÆN¾ìÍ Ï^î9Á Ñ ¹ Ñ Ö2À�Ì9Á�Ä,Ý Ñ ÅKí�Á�Å,À9¹ É�Ñ Â Ñ Á�Å�Ó Ñ ¹ðï É À9¹�Á Û Ö�Á�Å�Ó°Þ=Á�¹)½ Ñ Å Ð,Ò · Ò Ñ Ì�Ì Ñ Å· ¸�¹Kº�»�¼�½�¾\»�¿�À,¹�Á� Ã2Ä�Å,À�¾\»�Æ�ÆOÇ· ¸�¹KºBñ+¼�½L¾¬ñs¿�À9¹�Á�Â�Ã�Ä�Å2À�¾¬ñ�Æ�Æ>ÇÁ+·�º�à�ºB¸�¹�Ó Ñ ¹2â »�ã2âAñ�ã�¼�¼�èòæ�æó¸�¹�Ó Ñ ¹2âAñ�ã2â »�ã<¼�¼�è�Ç�ÇÈ ¸�¹�Ó Ñ ¹,â+»�ã2âAñ�ã<¼�½�¾¸�¹�Ó Ñ ¹,â�ñ�ã2â »�ã<¼�½�¾ì Ï,Í

Í Ï°ô Ò Ö� É�õ�Ñ Ó Ñ ¹'¸�¹�Ó Ñ ¹'ï É À9¹�Á ÛCö Ï,ÍÍ Ï · ¸�¹Zº�»�¼�½�¾[»<¿�À9¹�Á� Ã2Ä�Å2À�¾[»�Æ�ÆOǪÙ�¹�Á�Å,À�·�º�ß6÷�ÖçßܧÀ9¹�Á�Â�â+»�ã/øùÅ É Þ Ñ Ç�¾Ù�¹�Á�Å2À�·º�ß�é+Å>ß�Ç�¾· ¸�¹Kº�»�¼�½�¾\»�¿�À,¹�Á� Ã2Ä�Å,À�¾\»�Æ�ÆOÇÈ ·+¸�¹Kº�ñs¼�½�¾ùñ+¿�À,¹�Á�Â�Ã2Ä�Å,ÀL¾¬ñ�Æ�Æ>ÇÙ�¹�Á�Å,À�·�º�ß6÷�ÓçßÜù¸�¹�Ó Ñ ¹2â »�ã,âAñ�ã�ǾÙ�¹�Á�Å2À�·�º�ß�é+Å>ß�Ç�¾ì Ï,Íì Í Ï�¸�¹�Ó Ñ ¹ Ñ Ó>º�Ç6Ï,ÍÁ�Å2À°Ä�¸,Ì+Ö�Ã2Ä�¸�Þ2Ù É ¹ Ñ º�Á�Å,À�Ì�Ü�Á�Å2À�»�ÇÈÍ Ï Ô+Ò Å�»sÀ9Á�¸�Å ö ×9Á�Ö,À Ñ Ó Ñ ¹'ú Ñ ¹ É�Ñ Å�Ó Ñ ¹+À Ñ ÅIû9Ù É Ì�À Ñ Å�ú�¸�Å^Ì)Ó Ò ¹�Ä2Ý É ¹ õ�Ñ ÁsÀ Ñ ÅCÜuÏ,ÍÍ Ï ¸ õ Ó�Á Ñ Ö Ñ Ì õ�Ñ ÅIû9Ù É Ì�À Ñ ÅKÁBÞ�ع�Á�Â�Â Ñ ¹�»' Ñ�É�Ñ Å�Ó Ñ ¹+ÀXÕ Ñ ¹�Ó Ñ Å4Ï2ÍÍ Ï^ü Ò+Ñ Ä�»� É�õ�Ñ Õ Ñ ¹sÀ ö Ë,½ ö Ø�¹�Á�Â�Â Ñ ¹ðú Ñ ¹ É�Ñ Å�Ó Ñ ¹�Å�Ó�Á Ñ Ö Ñ Ì õ�Ñ Å)û,Ù É Ì Ñ Å�Ï,ÍÍ Ï ¼�½ ö ع�Á�Â�Â Ñ ¹'ú Ñ ¹ É�Ñ Å�Ó Ñ ¹�Å�Å�Á�Ä,Ý�À)Ó�Á Ñ Ö Ñ Ì õ�Ñ ÅIû9Ù É Ì�À Ñ Å�Ï,ÍÖ,À,¹ Ò Ä2À)Ä�¸,Ì Ò Þ2Å�Ö�Ï�Ä�¸NÜuÏ�Ä�¸2å�¾Ä,Ý É ¹IÀ Ñ�Û À�â�á�ô2ï�í+×,í+á9ãFÜ#À Ñ�Û À�å�â�á�ô�ï�í+×,í+á9ãF¾Á�Å2À Ñ ¹� Ñ�õ Å�Á�ÖC¾

Page 198: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 192

ý�þ�ÿ�ý���������� �������9þ���ÿ���������������������,þ����! #"$� ý�%��'&(����)+*���,���ý����+ý.-/�021 �3�+ý4"5���,þ���6��."!�+ý�%��'&!7Bý���897�-;:���/-<

=�>@? ����� ýA8�ý��Bþ���ÿ�ÿ�ý�þ���CD8�E,þ�� 1 ÿ�ý 1 ý�� >�=����FD���9þ���ÿ���C�����������������9þ����$ #"!�+ý�%���F'&G����F;)+*���,���ý����+ý.-/�021 �H� ýI"J���9þ���6��9"!� ý�%���F'&!7Bý���897�-;:���/-<

�3KL"J���9þ���6��9"!� ý�%�� &M� ý�%���F2-N����/- =�>AO ý�þ�ÿ��+ý���� 1 8�ý�þPB2,���ý���� ý����;,562ý�� >�=<

=�> B9ý����'&(����,3E3� 1 8���ýQ���,H��� ý����;,562ý��@E ý���ý�þ�ý;���������+6�62ý�� >�=�3KL"J���,þ���6��."5���/)!*�����,3��� ý#&G����F�)+*����;,3���+ý.-R����/-

< ý�þ�ÿ�ý���������TS����þ�������K2"�7RBþ���ÿ�ÿ�ý�þDU��@E3��8AU���,�ý���8�ý�þ��A8���ý���ý�����ý��

Q��;,3���+ý��V:�:�:XW��.7/&M�,þ���ÿ����������;,562ý�&M�,þ���ÿ���C������;,562ý9-2����,þ����! #"$� ý�%���F &!7�ý���897�-2����,þ����! #"$� ý�%��'&$7�ý���8.7�-2�

YY

����FZ�[����F�)!*���ý�%�� ����,þ����$ #"$� ý�%���F'&G����F�)+*���,���ý���� ý.-/�

Y����[���/)!*���ý�%�� ����9þ����$ #"!�+ý�%�� &����/)+*���,���ý���� ý.-/�

Yþ�ý���E,þ��."Bý�þ�ÿ�ý��������9-2�Y

\ �;��8]62ý���ÿ�ý��."������[�^&N�����[C�-<���,þ3E����A�9þ���ÿ�� >�_ S^& >�_ F'& > 1 �H��K _ S^& > 1 �3��K _ F & > 1 _ S^& > 1 _ F`����,þ3E����A�9þ���ÿ�� > � & > ��F ������]��&a6b&�c#������°ÿ�ý�,�ý���8�ý�þ3� �� 1 ,�þ�9þ���d!e�f�g ? g3d��^�=�>@h �H��8�E���ÿA8�ý�þDf�ý���ÿ�ý�� _ SiE3��8 _ Fij�E]8�ý��Bþ���ÿ�ÿ�ý�þ����E���8�C >�==�> S^�kQ�� 1 þ��3��� l _ SPm.))þ���& _ FDm.))þ�C >�=

_ SP�n"J���9þHE����A�9þ���ÿ�� > -o6�,3�������9"J�;��j�ý���K2"5���,þ3E����A�9þ���ÿ��.-�-2�_ FD�n"J���9þHE����A�9þ���ÿ�� > -o6�,3�������9"J�;��j�ý���K2"5���,þ3E����A�9þ���ÿ��.-�-2����,þ����! #" _ S�)+*��;,562ý�&M�,þ���ÿ����������;,562ý9-2����,þ����! #" _ F;)+*��;,562ý�&M�,þ���ÿ���C������;,562ý9-2���þ�������K2"�7!W3� h �H��8�E3��ÿA8�ý�þZf�ý���ÿ�ý�� _ SiE3��8 _ FAK�E+ý�þD8���ýiB�þ���ÿ�ÿ�ý�þnp�U���pqE3��8rp�U��#p�lMW��972& _ S�)

*��;,562ý�& _ F�)!*���,+62ý9-2�1 �H��K _ SP�^"5���9þHE����A�,þ���ÿ�� > -o6�,3�������."J�;��j�ý���K/"J���,þ3E3���A�9þ���ÿ��9-�-2�

Page 199: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 193

s�t�u+v�w�x�y�zD{�|�}3~���s�t��� z������!�#�$|�}H~���s�t�u+v�w��+��x#�$�Jx�w��.���2�

|�}H~���s�tP{�s�t^�

|�}H~���s��D{^� � z��H����zAz���}�� �A� �o���3~�~����.� � }���x����/� � z��3�3��zAz���}�� � ���2�s��;u+v�w�x�y�zD{�|�}3~���s�� �� z������!�#�$|�}H~���s���u+v�w��+��x#�$�Jx�w��.���2�

|�}H~���s��D{�s��'�

��x;��x�w���x;�3zD{Lt^�

� |�}3~3x.�J��x���x�w���x��3zn�G{��2��

� � �'�k����|���}3z�z �k�2��}�����x��D��x�}s�ti|�}�w���������x���x�w����;}�xA����w���}A�3� � ��x�~���x � z� x;����x�w�����x�w�w�x�w#�o��w��@����x;�Z�;}�xAx � x;}�w�x�wi�/��}�����x;�A�3� �s��P��}Hziw�}�x�����}�x���x���x;�A ���}�����}Hz���x�zi��}���z � �

��x;��x�w���x;�3zD{��'�� |�}3~3x.� � z��������9�!|�}H~���s�t�u!v�w��+��x��!�Jx�w��.�����G{��2� � � ����~���w���xAw�����|D�2��}�����x��A}�w@s�tD���;�3|���w���x�w

� }�w�� � ��

� � ����}�w�z��2���R�2��}�����x��D¡ � � }����A��x�z�������|�z�x�z'�o¢�w9�2�M|�}3~���s�t�u+v�w;�5��x.�2� � �zD{�z���}��/£�z���}���¤�w��!� �!|�}3~���s�t�u!v�w;�5��x9��¥^�¦z���}�����x�� � � � � �/��}�����x;�^�(��}�x§�����[�2��}�����x��A�3� � s�t

�H� � ��x�~3��x � z � x�����x�w�����x�w�w�x�w � �� z������!���!z����qz;u+v�w��5��x.�/� � � z���}�����x������;}�xA�����¨�/��}�����x;�§�H� � s�t

�3� � �~3��x � z � x�����x�w�����x�w�w�x�w � z�x�|�z[}�w

z�� � �� |�}3~3xI� � z��������.�$z��^�$�Jx�w��.������{;�i©�©I� � z��3~3x�w.�$z��;����{;�2��� � ��� ��~���w���xAx � w�����|D�2��}�����x��

��}���z'�(�;}�xA����wAx;}�w�x���2��}�����x;�A�3� � s�tA�H� � ��x�~3��x � z � x�����x�w

����x�w�w�x�w � ���[{�z���}���¤�w��$�'�!z����/� � ��ª �$����x;�D��x � �/��}�����x�� � ��x��

�3� � ��x�~���x � z � x;����x�w�����w�w � �� � ��x � z'�(���Ax � }�w[s��ix�}�w�x�w�2��}�����x��«��}Hz]w;}�x�����}���x;��x��A ���}��;��}3z���x�zi�;}���z � � �

� � �;��}�w�z��/���!¬�� ��­ ~3x���x�w�zi��x;�i�3��~�~�� � � u�~�} � z�x#�(¡ � ¢�w9�2�Mz����/� � �� |�}H~�x.� � z��������.�!|�}3~���s��;u+v�w;�5��x#�!�5x�w��.���;��{��i©�©4� � z��H~�x�w.�!|�}3~���s��;u+v�w;�5��x.���G{��/���

wi{�z���}���¤�w��!�'�$|�}3~���s���u+v�w��5��x.�/�� � ����}�w�z��2���!¬�}�x� ���}�����}Hz���x�zi¡���¢3w.�/��������x���£R�.¥�£+w;¥��2� � �

}3�L�J�;����x;��£X��¥�£!w�¥P{�{/t���

� � ����}�w�z��2���R�2��}�����x��D¡ � |��Hzix�}�w�x@|���x�|�x���xA®�����w��3w����3~ � ��x��P�2��}�����x��A�3� � ��x��¯�x�w���x@s��2�2�¦z����/� � �

� � �2��}�����x��«�L|��Hz]x;}�w�x[|3��x�|3x���x§®;����w���w����H~ � ��x;�P�2��}�����x;�A��w � �� �° x�������| � }����§��x��P�2��}�����x��«��w����Z�;��w�w[|�}�w�������x����3x���z � � x�w�wAx��P±�v����A} � z'�

��w�� � x�w�wAx��Dw�����|iw�}���|�z[}�wA��x;�D¯�x�w���x@s�t � z3x�|�z � �}3�L� � z��������9�!z���}���£R��¥���w;�5��x��Mz���}���£���¥���w��+��x9����{;�2�

�� � ¯�x�w���x[s�tDw�����|Z�/��}�����x;��w��+��x�wD����������| � ��|��H��x�w � �

|�s�tP{�s�t���²{��'�� |�}H~�x.� � z��������.�!|�s�t�u+v�w;�5��x��!�5x�w��9���;��{��/�

Page 200: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 194

³´3µL¶J·�¸�¹�º�»�¼9¶!½�¾�¿�À+Á�Â�Ã+»�Ä#Ŧ¸�¹�´�Æ/ÇX»�È^ÉGÂ�Ã5»�Ä.ÊNË�Ë;Ì/ÊÎÍiË[ÍAÏ�¿^н�¾�¿$Ë�½�¾�¿�À!Á�Â�Ä�Ñ�¸ Ð

Ò´HµL¶JÍË�Ë;Ì2Ê

³Ó�ÔÕ ¹�´�Æ�Æ�Ä�¹«Ö�´�¹�×A×�Ä;¹DØ�Ä�Â�Æ�Ä@¾�¿½�´�Â�Ù�Ú�Æ�Ä�µ�Ú�Ä�Æ�¸ Ô�Ó

¸�ÛDË^¶5·�¸�¹HÚ�º�¸§¸�¹�´�Æ�· Ô Êo»�ÃHÜ�Ü�Ý�º.¶J·;´�Ù�Ä�Ý�µ/¶J·�¸�¹3Ú3º�¸A¸�¹�´�Æ�·9Ê�Ê2з�¸�¹�º�¼$Þ#¶!¸�Û�À+Á�Â�Ã+»�Ä#Ŧ¸�¹;Ê2и�Û�À!Á�Â�Ä�Ñ�¸DË�½�´HÜ�µ�¾�¿�À!Á�Â�Ä�Ñ�¸'н�´3Ü�µ�¾�¿�À+Á�Â�Ä�Ñ�¸DË�¸�Û'з�¸�¹�º�¼$Þ#¶!¸�¹^Å!ß5Ä�Â�×.ß�Ê/Ð

Æ�Ä�Ã�Ä�Â�×�Ä�¹H¸�Ï�Ï�ÐÓ�Ô ¼;¹�´�Â�¸�µ/¶�ß Õ ¹�´�Æ�Æ�Ä;¹Dà�·]Ö�´�¹�×A×�Ä�¹DØ�Ä�Â�Æ�Ä[¾�¿½�´�Â�Ù�Ú3Æ�Ä�µ�Ú�Ä�Æ�¸�á3Â.ß2Ŧ¸�¹�Ê/Ð Ô�Ó

ÒÒÄ�Ü�·�ij

Ó3Ô ¼;¹�´�Â�¸�µ/¶�ß Õ ¹�´�Æ�Æ�Ä;¹�Â;Ã5»�Ä�§·;´�Â�קÆ�Ü�Ä;´�º�½ Å�×;Ã3½3Ä�¹DÂ�´�º�½�¸½�´�Â�Ù�Ú3Æ�Ä�µ�Ú�Ä�Æ�¸�á3Â.ß�Ê2Ð Ô�Ó

Ó�ÔAâ Ä�´�Æ�Ä�¹A´�ÂA×�Ä;¹DØ�Ä�Â�Æ�Ä@¾�ÛiÄ�´�Â�Ä�ÂDÖ�Ä�´H¸�Ä�¹D·�Ä�¸�Ù�Ä� Ô�ÓÒ

Ò½�´3Ü�µ�¾�ÛZË�½�´3Ü�µ�¾�Û�À+Á�Â�Ä�Ñ�¸'Ð

Ò½�´3Ü�µ�¾�ÛDË�¾�Û Ð Ó3Ô§â Ä�´�Æ�Ä�¹D×�Ä�¹DØ�Ä�Â�Æ�Ä@¾�ÛPÖ.´�Ä�×�Ä�¹AÃ3Ú�µ]×�Ä�Â]ã�Â�µ�Ã�Â�ÆA·�Ä�¸3Ù�Ä� Ô�Ó¸�Ë�¸;À+Á�Â�Ä�Ñ�¸'з�¸�¹�º�¼!Þ�¶!¸�¹^ÅM¸;À+Á�Â;Ã5»�Ä.Ê2Ð

Ò½�´3Ü�µ�¾�¿PË�½�´HÜ�µ�¾�¿�À+Á�Â�Ä�Ñ�¸'Ð

ÒÓ�Ô ¼�¹�´�Â�¸�µ2¶�ß�ä�Â�×�ÄA×�Ä;¹ZØ�Ä�Â�Æ�Ä@¾�¿3á3Â.ß�Ê2Ð Ô�Ó

½�´HÜ�µ�¾�¿PË�¾�¿^н�´HÜ�µ�¾�ÛDË�¾�Û'Ð

Ó�ÔAå Ékæ�º�½�¹�´3¸�¸ ç Õ ¹�´�Æ�Æ�Ä�¹Dè�Ä�´¾�Û§½�´�Â�Ù�Ú�µ�Ú�Ä�Æ�Ä�Â�Å�×;´�ÄAé�Ý�Â�¹�êAÃ3Ú�·�Æ�Ä�Ü�Ý�Ä�·�¸Ö�Ä;¹�×�Ä�Â�ê�Ý�Ä�Â�Â�Ä�Â#ÅoÚ�Â�×@µ�Ú�Ä;¹Z×;´�ÄAÄ�·AÄ;´�Â�Ä�Â Õ ¹�´�Æ�Æ�Ä;¹AÃ3Ú�·¾�¿«»�´H¸iÂ�´�Ä�×�¹�´�Æ�Ä;¹�Ä�¹Aë�¹�´�Ý;¹�´3¸�Ã�Ä�¸]Æ;´�è�¸'É Ô�Ó

Ö2½�´3Ü3Ä.¶J·�¸�¹�º�»�¼9¶!½�´HÜ�µ�¾�Û�À!Á�Â�Ã+»�Ä�Å!ßJÄ�Â�×.ß�Ê�ìGË�Ì2Ê Ó�Ô æ�Ý�Ü�Ã�Â�Æ�ÄAÂ�Ý�º�½ Õ ¹�´�Æ�Æ�Ä�¹A´�Â@¾�Ûié�Ý;¹3½�Ã�Â�×�Ä�·�´�Â�× Ô�Ó

³¸DË�¸�¹�´�Æ/Ç�¸�¹�´�Æ�í�Â�Ú!» ¶!½�´3Ü�µ�¾�Û�À!Á�Â;Ã5»�Ä9Ê�È^ɦ¸�¹�´�Æ�Æ�Ä�¹�·#Ð Ó�Ô3Õ ¹�´�Æ�Æ�Ä;¹^Å(×�´�ħé�Ý�» Õ ¹�´�Æ�Æ�Ä�¹AÃ3Ú3·@¾�¿

ÃHÚ�·�Æ�Ä�Ü3Ý�Ä�·�¸îÖ�Ä�¹�×�Ä�Â�ê�Ý�Ä�Â�Â�Ä� Ô�Ó·�¸�¹�º�¼!Þ�¶!¸�¹�Åq¸;À+Á�Â�Ã5»�Ä.Ê/Ð Ó�Ô ¸�¹�´�Æ�Æ�Ä�¹�Å�×;´�ÄAé�Ý�» Õ ¹�´�Æ�Æ�Ä;¹§ÃHÚ�·@¾�Û

Ã3Ú3·�ÆÜ3Ý�Ä�·�¸PÖ�Ä�¹�×�Ä�Â�ê�Ý�Ä�Â�Â�Ä�§·�¸�Ä�½�¸[´�Â

¸�¹ Ô�ÓÖ/½�´3Ü3ÄI¶J·�¸�¹�º�»�¼.¶$¸�¹^Å$ßJÄ�Â�×.ß�Ê�ì�Ë;Ìiï�ïI¶J·�¸�¹3Ü3Ä�Â.¶$¸�¹;Ê�ì�Ë;Ì2Ê�Ê Ó�Ô ·�Ý�Ü�Ã�Â�Æ�ÄAÄ�·AÂ�Ý�º�½ Õ ¹�´�Æ�Æ�Ä�¹

Æ�´�è�¸'Å(×;´�ÄAé�Ý�ÂAÄ;´�Â�Ä�»Õ ¹�´�Æ�Æ�Ä;¹AÃ3Ú�·@¾�¿AÃHÚ�·�Æ�Ä�Ü3Ý�Ä�·�¸îÖ�Ä�¹�×�Ä�Â

ê�Ý�Ä�Â�Â�Ä� Ô�Ó³»[Ë�¸�¹�´�Æ�í�Â�Ú$»'¶!¸�¹�Ê/Ð Ó3Ô�ð Ú$»�»�Ä;¹D×�Ä�· Õ ¹�´�Æ�Æ�Ä�¹�·A×�Ä�¹

Ã3Ú3·�Æ�Ä�Ü�Ý�Ä�·�¸PÖ�Ä;¹�×�Ä�Â�ê�Ã�Â� Ô�Ó

Page 201: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 195

ñ�òó�ô�õ�ö'÷(ø�ùAô�õ�ú�û[ü�ýDô�ú�û�ô�ûó2þ�ú�ÿ�ÿ�ô�þ���úHö]û;ú�ô���þ�ú�ÿ�ô;þ�ô�þ���þ�ú�ø;þ�ú3ö���ô�öiÿ;ú�ù�ö�(ò�ñ�� ú� �ô��5õ�ö�þ�������� � ú� ���ü�ý�����û�����ô#÷��5ô�û����! �"$#�%'&�&(�5õ�ö�þ� �ô�û�� � ú� ���ü�ý�����û�����ô� �")#*%+ !

,û'#�ö�þ�ú�ÿ.-�û�/��0� � ú� ���ü�ý�����û�����ô� +1

ú��2�Jø�þ���ô;þ�34��5�3+û�56#!#2ý� ,

ñ�òó2þ�ú�ÿ�ÿ�ô�þ�� � �Hö]ô;ú�û�ô � ø�ô � ô�þ�ô87;þ���û�/�û�ÿ*�� �õ���ô;þPó2þ�ú�ÿ�ÿ�ô;þAþ�ûAò�ññ�ò:9�ô���ø!� �6 ú�þ��8��ô�þPó2þ�ú�ÿ�ÿ�ô�þ���û�/�þ;����û�û � ú�û!<�/�ÿ�ô��!/3ô�ÿ�ö ÷ ô�û�ûAô�þ6=>��þ!?Aú�õ�ö'÷

/�û�� ô�û�ûAô�þDû�ø!� � û�ú�� � ö[ú�û���ô;þA@�ô�û�ÿ�ô@ü�ýDõ�ö3ô � ö]ò�ññ�ò ú��B�C�D")#�?� õ�ö�þ��.���E�!ö�þ�ú�ÿ+3F�G5H��û�����ô�÷Mö�þ�ú�ÿ+3�?!5H��û�����ô� �"$#�%� Îò�ññ�ò ,ò�ñ ñ�ò!@�ô�û�ÿ�ô@ü!Iiû���� � ó2þ�ú�ÿ�ÿ�ô�þ�û�����ô�ûJ�*��/�þ�� � õ�� � ��/�ô�û§ò�ñ

� ü!IA#�ü!I1LK:#M%01+� ú� �ô��5õ�ö�þ�������� � ü!I�����û�����ô�÷��5ô�û!�E�! �"$#�%+

,ú��2�Jõ�ö�þ��.���E� � ü�I�����û�����ô#÷¦ö�þ�ú�ÿ+3F�G5N�Gû�����ô� O#!#�%+ PK'#QK�R�ýN1� ü!I�# � ü!I�����û�ô�S�ö1

Tú��2�UK:#!#�%J&�&J�D"$#/ú�

,ñ�òó2þ�ú�ÿ�ÿ�ô�þ ú�þ�����ô;þ;@�ô�û�ÿ�ô@ü!I � ú�û!<�/3ÿ�ô���/�ô�ÿ�öiò�ñö!IA#N�5õ�ö�þ�/.��ö§ö�þ�ú�ÿ�õAò� V�G�� ! �ø����Jõ;ú�<�ô�ø��+�Jõ�ö�þ�/���öAö�þ�ú�ÿ�õE ! �1õ�ö�þ��!�XWY�!ö�I�����û�����ô#÷¦ö�þ� �1ö!I�����û�ô!S�öA# � ú� !��ü�I�����û�ô�S�ö01� ú� ���ü�I�����û�ô!S�öA#�ö�I01õ�ö�þ��!�XWY�!ö�þ^÷��5ô�û����! +1

ÿ�ô���ô�û!��ô�þHö.R!RZ1TT� ú� ���ü�ý[# � ú� !��ü�ý\����û�ô!S�ö01

T� ú� ���ü�ý6#�ü�ýH1qñ3ò�]�ô�ú�ÿ�ô;þ ú�ô!��ô�þ���/��'��ô�ûJ^�û��>��û�ÿAõ�ô�ö.<�ô�û§ò�ñö�#�ö�����û�ô!S�ö01õ�ö�þ��!��WZ�!ö�þ^÷Mö�����û�����ô� �1

T� ú� !��ü!IA# � ú� !��ü�I�����û�ô�S�ö01

Tñ�ò ��þ�ú�û�ö�������_�û���ô���ô;þ;@�ô�û�ÿ�ô@ü!I!`3û��� �1�ò�ñ

� ú� !��ü�ý6#�ü�ýN1� ú� !��ü!IA#�ü!I01

T ñ�ò:a � ú� �ô:b�� � 3ô�ú��3ôYcdb�ø� >��û�ÿ�ôAô�ö ��õ*��û8��ô�û�@�ô�û�ÿ�ô�û@ü�ý:/�û��[ü�Iiÿ�ô���ô�û!��ô�þHö /�þ���ôAò�ññ�òJ^�/3õ�ÿ���ù�ô���ô;þA@�ô�û�ÿ�ô�û[ü�ý'/3û!�@ü!Iiò�ñ

��þ�ú�û�ö!�����U@�ô�û�ÿ�ô[ü�ýNcX�! �1� ú� !��ü�ý6#�ü�ýN1 � ú� !��ü!IA#�ü!I01�� ú� 3ô��Jõ�ö�þ������E� � ú� !��ü�ý�����û�����ô�÷��Jô�û!���� �")#�%� ,

��þ�ú�û�ö����!�2e)f�õYe6�2÷ � ú� !��ü�ý�����û�����ô� +1� ú� ���ü�ý�# � ú� !��ü�ý�����û�ô!S�ö01

T��þ�ú�û�ö!������/3û!����ú�ô�@�ô�û�ÿ�ô@ü!I0cX�! �1�� ú� 3ô��Jõ�ö�þ������E� � ú� !��ü!I�����û�����ô�÷��Jô�û!���� �")#�%� ,

��þ�ú�û�ö����!�2e)f�õYe6�2÷ � ú� !��ü�I�����û�����ô� +1

Page 202: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 196

g>h�i�j!k�l�m�g�h�i!j�k!l�n�o!p�q!r�s0tuv�w h�p�s!j�x�y�z�p�y!{+t

|.}:~D�d����g w h�s!s�O���.q wA� q!��q!�M�!��� wA�!� p'� w h����!q w pM�����8��q!p��!q�p!�!q�p\k>�:�.p!�\k�l[�+�.���!q!p���h�q� w h��!��q w���� �!����s>h�q w q�p�}�|

g>h�i!j�k>�6mMk>�Ntg>h�i!j�k!lAmMk!l0t� mM�0tv�w h�p�s!j�x�y�� � �!�+�!s>��s>h � h�s���q�s���s�q!��s'��q w � w h��!��q w ���.����q!p��!q�p!�!q�pQk��:�.p!�\k�l0��z�p�y!{+t� g�h�i�q�xU��s w ��� v x�g>h�i!j�k>��n�o!p�����qZ��yUq�p!��y�{��)m���{�� g>h�i�q�x���s w ��� v x�g�h�i!j�k>��n�o!p�����qZ��y�q!p!�Ey!{��)m��+{

�� m � �M��� �!����s.q���s+x�g>h�i!j�k>��n�o!p�����qZ��g>h�i!j!k�l�n�o!p�����qE{�tg>h�i�j!k��[mMg�h�i!j�k>��n�o!p�q!r�st

ug�h�i!j�k!lAmMg>h�i!j!k�l�n�o�p!q�r�s0t

u

h�j+x � m!m��+{�

|.}:� w h��!��q w �!q w ��q!p��!q!p\k��'��p!�\k!l'��h�p!� ��� �!����s>��s>h � }�|v�w h�p�s�j�x!yF� w h��!��q w �!q w ��q!p!��q!p\k>�:��p!�\k!l'��h�p!� ��� �!����s>��s�h � ��z.pEy!{�t

uq�i��!q�

|.}:� w h��!��q w �!q w ��q!p��!q!p\k��'��p!�\k!l'��h�p!��p�h���g!s ��� �!�+�!s>��s>h � }�|v�w h�p�s�j�x!yF� w h��!��q w �!q w ��q!p!��q!p\k>�:��p!�\k!l'��h�p!��p�h���g!s ��� �!�+�!s>��s>h � ��z�p�y�� � {+t��� p�j!i��.q!p�� �!� t

u

u

h�p�s ��� ���!��s�q!��s+x�s w h��.��p�����q��N�Vs w h�����p�����q�l+{��g�� w s w h�����p�����q����.�Nt��g�� w s w h�����p�����q�l��.�Nt

|.}�n!n�n!n�n!n!n�n!n!n�n!n�n!n!n�n!n�n!n!n�n!n!n�n!n�n!n!n�n!n!n�n!n�n!n!n�n!n!n�n!n�n!n!n�n!n�n!n!n�n!n!n�n!n�n!n[}�||.}M�!� w ����q�s�q w ��� w h��!��q w �L��h�qM����j8� � �����!s���s>h � h�s>��q�s }�||.} �!q�s.q���s.q�s � q w �!q!p�� � i!i�q!pY� }�||.}M����p � s>h � pY�d�>q���s0� ��  ��h�q�� � q�h6� w h��!��q w �¡��h�qM��p���h�q*� w�� �!q!��� w }�||.} �.q   q w �!q   q!p � � w ��q!pZ� ��� �!�+�!s���s>h � ��h�p��Y� }�||.} ¢.q w �>q!��s'�!q w � � �!�+�!s>��s>h � h�s���q�s � h w �J�Gh�s�£>h�i�j.q }�||.} �!q��\¤.q����G���M���������!q w ¢�h v i � �G� w�  q�h�s'��� w ��g.�!q�j!��q�g w s.}�||.}\k!��q!� � ���   q � q w s0�dm���¥� w h����!q w ��h�p�� ��� �!�+�!s���s>h � }�||.} o���d� w h��!�!q w ��h�p���p�h���g!s ��� �!����s>��s>h � }�||.}�¦�i�������h!�6§>q�g w g>��g�pY�d¨���p��>� w ��©!©�ª }�||.}�n!n�n!n�n!n!n�n!n!n�n!n�n!n!n�n!n�n!n!n�n!n!n�n!n�n!n!n�n!n!n�n!n�n!n!n�n!n!n�n!n�n!n!n�n!n�n!n!n�n!n!n�n!n�n!n[}�|

���s w �.��s�s w h��!��}�s�hNt��s w �.��sQ����s�h � p���}�����s0t

Page 203: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 197

«�¬�­!®�¯�°�®�±�²�³�´�µ�¶�·�¶�³>¸H¹¡°!º+²�³�´�µ�¶�·�¶�³>¸H¹»±�­�¼G²�³�´�µ�¶�·>¶�³�¸N½¾�¿ ±JÀ�®�Á�À!¼ ¿�¾� ½¾�¿ ± ¾ ¹4ÃH¹�Ä0½Å.Æ ³!ÇXÈ!È�À�® ¿�É À�®6Ê�® ¾ Á!Á�À�®AÀ�®�È ¾ ±�±.À�Ä ¿ Æ�Å

Å.Æ º�® ¾�¿ ±!Ë�Ì�Í�Î.°.È!È+Ç!±>­�± ¾�Ï�¾ ±�­�À�±  ±�À  ± É À�®6Ê�® ¾ Á!Á�À�®AÐ Â Ç ¿�É Ð Â�Ñ�¿ Í�¹C±>® ¾ Á�Ò ¿ ­�È�À�ÓN¹C±>® ¾ Á�Ò ¿ ­�È�À�Ô+Õ�½ Æ�ÅÄAÖM±>® ¾ Á�Ò ¿ Ç�ÈÌ�±>® ¾ Á.Ò ¿ ­�È�À�Ó�Õ�½Ã6ÖM±>® ¾ Á�Ò ¿ Ç�ÈÌ�±>® ¾ Á.Ò ¿ ­�È�À�Ô+Õ�½

Å.Æ Ê>À  ±¹L°�¼ É À�®AÀ ¾�¿ À:Ê�® ¾ Á!Á�À�® É À ¿ ­ ¿!É À�®�À ¿ ­�Ç Â Ä.°�À  À ¿ Ã�­ ¿�¿ ¹­�Ä Â °�°!¼ É À�®AÀ ¾�¿ À:Ê�® ¾ Á!Á�À�® ¾�¿�É À�®'±�® ¾ Á!Á!À�®  · ¾� ±.À É À ­ ¿�É À�®�À ¿ Ê�® ¾ Á!Á!À�® Â� ±�À�¬�±0¹¡° É À�®:Ç�È�Á�À�Ã�À�¬>®�±0× Æ�Å

À�®�Á!À�¼ ¿�¾� Ö*ؽ± ¾ ÖM±>® ¾ ÁG²�Ä>¸H×�±>® ¾ Á�Á!À�®  ½Â ±�®�«�º�ÙYÌC¯�°�®�±0¹C± ¾�Ú�Û!¿ ­�È�ÀEÕ�½

¯�¬ ¾ Ä�À(Ì Â ±�®�«�È�º�Ì�¯�°�®�±0¹�Í�À ¿!É Í!Õ�Ü$Ö�Ø+Õ¾ ËBÌ Â ±�®�«�È�º�Ì�¯�°�®�±0¹�±�® ¾ Á+².Ã�¸N× ¿ ­�È�À�Õ!ÕÝ

Å.Æ ¯�°�®�±�Ç ¿�É ±�® ¾ ÁG².Ã�¸N× ¿ ­�È�À Â�¾�¿!É Ç ¿ Á�Ä�À ¾ «�¬ Æ�ű ¾ ÖM± ¾�Ú�Û!¿ À!Þ�±½Â ±�®�«!ºXÙYÌC¯�°�®�±0¹�± ¾�Ú�Û!¿ ­�È�À�Õ+½

ßÀ�Ä Â ÀÝ

 ±�®�«!ºXÙYÌC¯�°�®�±0¹�Í�À ¿�É Í!Õ+½º�® ¾�¿ ±�Ë�Ì�Í4Ê�® ¾ Á!Á�À�®AÐ Â Ã�­ ¿!¿�É À ¿ Ê�® ¾ Á!Á�À�®AÐ Â ­�Ç Â Ä.°�À  À ¿ ¹ É ­�¬.À�® Â�¾�¿!É�É�¾ À:Ê�® ¾ Á!Á�À�®

¿�¾ «�¬!±QÃ�°�È!È+Ç!±>­�± ¾�Ï�Ñ.¿ Í�¹C±>® ¾ Á�Ò ¿ ­�È�À�ÓN¹C±>® ¾ Á�Ò ¿ ­�È�À�Ô�Õ+½À�®�Á�À!¼ ¿�¾� Ö2ÓN½ß

¾ Ë2Ì�À�®�Á�À!¼ ¿�¾� Ö!ÖMØ+ÕÝ

± ¾ ÖM±�® ¾ ÁG².Ã�¸N×�±�® ¾ Á�Á!À�®  ½Â ±>®�«�º�ÙZÌ�¯�°�®�±0¹C± ¾�Ú�Û!¿ ­�È�À�Õ�½¯+¬ ¾ Ä�ÀàÌ Â ±�®�«�È�º�ÌC¯�°�®�±0¹XÍUÀ ¿�É Í!Õ�Ü$Ö�Ø�Õ

¾ Ë2Ì Â ±�®�«.È�º�ÌC¯�°�®�±0¹C±>® ¾ Á+²�Ä�¸N× ¿ ­�È�À�Õ�ÕÝ

Å.Æ ¯�°�®�±�Ç ¿�É ±>® ¾ Á+²�Ä�¸N× ¿ ­�È�À Â�¾�¿�É Ç ¿ Á�Ä.À ¾ «�¬ Æ�ű ¾ ÖM± ¾�Ú�Û�¿ À!Þ�±0½Â ±�®�«�º�ÙYÌC¯�°�®�±0¹C± ¾�Ú�Û!¿ ­�È�ÀEÕ�½

ßÀ�Ä Â ÀÝ

 ±>®�«!ºXÙYÌ�¯�°�®�±¹�Í�À ¿!É Í!Õ+½º�® ¾�¿ ±�Ë�Ì!ÍFÊ�® ¾ Á!Á�À�®AÐ Â Ã!­ ¿!¿�É À ¿ Ê+® ¾ Á!Á!À�®;Ð Â ­�Ç Â Ä.°�À  À ¿ ¹ É ­�¬.À�® Â�¾�¿!É�É�¾ À:Ê�® ¾ Á!Á!À�®

¿�¾ «�¬!±QÃ�°�È!È+Ç!±>­�± ¾�Ï�Ñ.¿ Í�¹C±>® ¾ Á�Ò ¿ ­�È�À�Ô0¹C±>® ¾ Á�Ò ¿ ­�È�À�Ó�Õ+½À�®�Á�À!¼ ¿�¾� Ö2ÓN½

ßß

Page 204: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 198

á.â:ã�ä�å�æ�ç!è�æ�é�ç�ê�ç�é�æ�ç!è:ë�å�é�ì!ì�ç�åAê�é�í�î!ç�ï�ð�ï'è!ñ�ò�ó'è�é�ò�ó!ï�ô!ä�ç�åAè�é�ò�ó�ïöõ�ñ�÷!÷+ä!ï�ø�ï>é�ùç�å�õ�ú�ø�ç�å�ï0û¡í!ñJüGé�å�æ�è�ä�è�ì!ç�ï�ç!í�ï�ç�ïûLñ�ê�æ!ç�åAç�é�è!ç:ë�å�é�ì!ì�ç�å�é�è�í�ç�é�è�ç�å�ýGõ�ï>é�ñ�èç�ïXüGø�íQú�ñ!ç�í!ò�ó�ï0ûþü�ñ�å!ø�ä�ô'æ!ç�å�ø�è�æ!ç�å�ç:ë�å!é�ì!ì�ç�å�÷Gé�ïJç�é�è!ç.÷ ÿUè!í�ç�å�ïJñ�æ!ç�å��� æ�ø�ï.çMå�ç�ø�ì�é�ç�å�ç�èJü�ä.ç�å�æ!çZû¡ñ!æ!ç�å:ä�÷�ì�ç�õ�ç�ó>å�ï��¡â�áé�ô���ç�å�ì�ç!ê�è�é�í����� �

ø�ò�ï��Mï>å!é�ì���ú����Fø�ò�ï�é�ñ�è��í�ï>å�ò ��� �Uñ � û4ø�ò�ï����!ñ � ç�å�ø�ï>é�ñ!è� ��í�ï>å�ò ��� ��ï>ø�êYû4ø�ò�ï�����ï�ø�ê�ç�ú!ú�ç� ��ü+ó>é�ú�ç��Uí�ï�å�ò�÷ � ��ñ � û! Uç�è!æ� " �ü�ó>é�ú.ç��Uí�ï>å�ò.÷ � ��ñ � û� Uæ�ç�ú.ç�ï.ç# %$$�í�ï�å�ò�÷ � ��ñ � û! Uç�è!æ� "

�ø�ò�ï&��ø�ò�ï����!è!ç"'�ï(�í�ï>å�ò �!� �Uñ � û4ø�ò�ï����!ñ � ç�å!ø�ï�é�ñ!è# ��

)é�ô��Uí�ï�å�ò.÷ � ��ñ � û! Uç�è!æ� "

�í�ï�å�ò ��� �Xï>ø�êYû4ø�ò�ï�����ï�ø�ê!ç�ú!ú.ç# ��ô.ñ�å*��é������Fé�+�ï�å!é�ì�,�ò�è�ï��Fé.--#

é�ô/��0.��í�ï>å�ò�÷ � ��ï�å!é�ì1�.é"����ï�ø�ê�ú�çYûCï>ø�ê# %$$���ï�å!é�ì1�.é"���4é�è!í!ç�å�ï2�3�� �44��ï�å!é�ì1�.é"����ä � æ�ø�ï.ç5�3�� %$$���é#06�+õ�

�� å!é�è�ï!ô�� 4ë+å!é�ì�ì!ç�å'ú�ñ!ç�í!ò�ó�ïJç�ï�ü�ø�íYûþü�ñ�å!ø�ä!ô'ç�é�è*ø�è!æ!ç�å�ç�å[ë+å!é�ì!ì!ç�å87.è# ��

� å!é�è�ï!ô�� C÷Gé�ï'ç�é�è!ç.÷ �8� æ�ø�ï.ç�ñ!æ�ç�åMÿUè�í!ç�å�ïQå�ç�ø�ì�é�ç�å�ï�ó>ø�ç�ï�ï.ç��97.è# ��á.â;:��Có��dë�ø�ê!ç�ú�ú.ç�í�ï�é�÷�÷�ï�ä.ç!ê�ç�å�ç�é�èZûVä.è!æ�æ!ç�å

ë�å�é�ì�ì!ç�å�å�ç�ø�ì�é�ç�å�ïQø�ä!ô'ç�é�èMé�è!í�ç�å�ïJñ�æ!ç�å:ä � æ�ø�ï.ç�â�áç�å�ì!ç�ê!è�é�í��<��

)ø�ò�ï.�+ø�ò�ï�����è!ç'�ï��í�ï�å�ò ��� ��ñ � û4ø�ò�ï�����ñ � ç�å!ø�ï>é�ñ�è� ��

))

)

á.â;:>ø�í!í�ç�ú.ê�ç8è�ñ!ò�óJç�é�è.÷Gø�úQø�ä�í�ô�ä.ç�å�ó.ç�èA÷�é�ï�ú�ä.è!æMõAì!ç�ï>ø�ä�í!ò�ó!ï�0»â�áé�ô���ç�å�ì�ç!ê�è�é�í����� �

ø�ò�ï��Mï>å!é�ì���õ���Fø�ò�ï�é�ñ�è��í�ï>å�ò ��� �Uñ � û4ø�ò�ï����!ñ � ç�å�ø�ï>é�ñ!è� ��í�ï>å�ò ��� ��ï>ø�êYû4ø�ò�ï�����ï�ø�ê�ç�ú!ú�ç� ��ü+ó>é�ú�ç��Uí�ï�å�ò�÷ � ��ñ � û! Uç�è!æ� " �ü�ó�é�ú�ç=��í�ï�å�ò�÷ � �Uñ � û! Uæ!ç�ú.ç�ï�ç� " >$"$�í�ï>å�ò�÷ � �Uñ � û� �ç!è!æ# "

�ø�ò�ï&��ø�ò�ï����!è!ç"'�ï(�í�ï>å�ò �!� �Uñ � û4ø�ò�ï����!ñ � ç�å!ø�ï�é�ñ!è# ��

)é�ô��Uí�ï�å�ò.÷ � ��ñ � û! Uç�è!æ� "

�á.â:ë>ç�í�ïûLñ�ê�ç!í�ç�é�è�ç!è:ë�å�é�ì!ì�ç�åAì�é�ê�ïûLæ�ç�åAæ�é�çAý�õ�ï�é�ñ!èMø�ú�í

? å�ç�é�ì!è�é�í\ó>ø�ï'â�á

Page 205: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 199

@3A3B.C"D�E�F!A�G&H�IJG&C3A�K�L3A3G.HMONN�M#P�QR�S B*F.T�U�V�QWT�X�A3BT.Y�ZOC"[3A�QWT.\\#PT R F�].F^@3A�B&C&_OD#F�A3BT.Y1`�T"a�bcA3G.H3N8M�I9A�G.H#PP%dd

F"F�A3BT.Y1`�T"a�bJT&[@M�B8A2L3V�P�eeF�A3BT.Y1`�T"a�bcf8Dg�GhA�M5L3V�PP%dd�F.T#]6U�i�PPj

D�BT.[OA R FkJl�BT.Y"YM�B2N S M"@C3m"AnMOA�o�G.@�Ipo S BGhf R M�T&[qG&[gM�B.M�Brl�BT&YYM�B8s�[#kP�QD�BT&[3A R Fk9_1T8A2M�T&[M�_/t8Dg�G8A�M S g"M�B*uv["@M�BhAwB.M�G&Y�T&M�B8A5m�G&M3A"A�M�b9s�[#kP�Qx�y;z b9m�b{l�G&HM3N"N�M5@3A3T^_"_�A5f�MH"M�B&M�T.[|I}f�[g5gM�Bl�B"T.Y"YM�B5B&M�G.Y�T.M�BhAwG8f R M�T.[*T.[@"M�BhA S gM�Bf8Dg�GhA�M y3x

M�B.Y"MH"[�T.@U�~�Q�G.COA.U�G.C3A�K�L"[M�OA�[email protected]"D�E�F S D|IJG.COA�K�L S D"M�BGhA�T S [�P�Q�

��

x�y l�M"@3A(I S H*T.[5gM�B���i8A�T S [5gM"@2l�BT&YYM�B.@;N2g�T.M"@MON�HM"[2�3M�BhA�M5YM�G.M["gM�BhA�oOM�B&gM[|Io1T&M*T.[5gM�B%��i8A�T S [5gM"@l�BT&YYM�B.@*i�b yOxM�B&YM"H[�T&@U�M�B.YM"H[�T.@5\5C S N8@&ZOC S _�D�GB&M�F�N(IJi�P�Qx�y T R F�]cM�B&YMH"[�T.@#PD�BT&[3A R FkWl�BT&YY"M�B��@;f�["g��"@5@�T.["g*i S _"_�fA3G8A3T.�3s8[�k�IcA�B"T.Y&Z�[�G�_OM�~�IcA�B"T.Y�ZO[�G�_OM3��P�QM3N8@M

D�BT&[3A R FkWl�BT&YYM�B��@;f�["g��"@�@�T.["g�[�T.COmAwi S _"_�f"A�G8A3T.��b9s�[#k�IcA3BT&Y&ZO[�G^_OM�~�IA�B"T.Y&Z�[�G�_OM3��P�QyOx

B.MOAf3B.[�F^M�B&YMH"[�T.@#P�Q�

x�y*� B S Y�BG^_"_���C S [ R N"f�M"[CM#FP� f8[�ihA�T S [��{��A8M3f�M�B8f8[Y5gM�B���[�G8N^E�@"M�g"M�B� S [ R N"f�M"[� y3x

� S T.g5C S [ R N"f�M["CM#FPjT.[OA�T�IJi�Q

i S [ R Nf�M"[�U*V�QT R F�A8M�B^_"Z R M3mN8M�B�L;V�Pj

D�BT.[OA R Fk z T.M5� S BG8f8@@"M3A��Of�[Y R f�M�B� S [ R Nf�M"[�*T.@OA�l3M�B�_1T.[�T.M�B8f�["Y�bcs8[�k"P�QD�BT.[OA R Fk z T.M@"M5� S B"G8f8@@MOA��3f8[Y*T.@OA2[�T.COmA2M�B R f�MONNA(bcs8[�kP�QD�BT.[OA R Fk z T.Mn�O[�G8NvE�@M5�3f3B2� S [ R Nf8M["��o�TB.g;A3B S A8�gM�_qg3f�B&C3m8YM R f�M3m3B8A(b�s8[�kP�Q�

x�y t�M"HM�B8N�M"Y3f�["Y�� � B"G.Y"M�I S H5g�T&M��"M["YM5gM�B�l�BT.Y"YM�B�M"�M[OAf8M3NN2� S B8m8M�B�[ S C3m2YM�G&M["gM�BhAoOM�B.gM"[5@ S N"N�bpoOM"[[5��G�I�i&M�T.["M;� S [ R N"f�M["�3f�M"HM�B.D�Bhf�M R f�["Y�b y3x

D�B"T.[OA R F"k�s8[ yy"yyy"yy"yyy"yyy"yy"yyy"yyy"yy"yyy"yy"yyy"yyy"yy"yyy"yyy"yy"yyy"yyy"yy"yyy"yy s�[�k"P�QD�B"T.[OA R F"k�s8[&�O[�G8NvE�@M5gM�B2� S [ R Nf8M["��o�TB.g5gOf�B.COm�Y"M R f8M3m�BhA�b"bbcs8[3s�[#kP�Qx�y5� fn�"Mg"M&_�f�[Y"M S B.g["M3A8M[5D�GG"B�� S [l�BT.Y"YM�B&[5g�T.M5�M"[Y"M[;��~f�["gw�"�

gOf�B.COm2g�T.M � B S �"Mg3f3B�_OM["YM[5H�T8N�g"M[;f�["g�g�T.M"@M;f�M"HM�B&D�B8f8M R M[ y3xR�S B�F&T�U�V(QJT!X�A�B"T.Y&Z�C[OA�QJT&\\�P

Page 206: Spezifikation und Analyse von Triggern zur ... · Zu einer spezifizierten Menge von Triggern werden, die für die Trigger relevanten Ereignisse, durch das DBMS überwacht. Für jeden

Anhang F: Der Programmcode des erweiterten TSS 200

�8�����&�� �¡�¢J�!£�¤��"¥.¦�§O¨©O¤�¢W�.ªª#«¥8���v���.¬"­��3®8¥¯3®8�¯�  �¡2°°*¥�£���«

± ­©¦"­©#�.¥�²W��«�¢³ �"¥.©O¤���"´�µ8©¶¶"¶¶¶"¶¶"¶¶¶"¶¶¶"¶¶"¶¶¶"¶¶¶"¶¶"¶¶¶"¶¶"¶¶¶"¶¶¶"¶¶"¶¶¶"¶¶¶"¶¶"¶¶¶"¶¶¶"¶¶"¶¶¶"¶¶Oµ�©�´"«�¢¥8���&�.�©O�·"¸�­©"¹�ºO¡�«³ �"¥.©O¤���"´c»�©�¼8·^½�¾­5¹O¸��¿��©O�·"¸�­©"¹;À�¼8¤2­��&¦­"Á­©|²�¬�¼.¾"¾�¬�¥.­;µ�©hÂ��"¥.¦¦"­���©�¥&¨3À¤w�.�"©3�"·¸�­"©3¤¾�¥&©¬�Ã!´«�¢

­3·8¾­³ �¥.©O¤���´c»�©�¼8·^½�¾"­�¹O¸��¿��"©3�·"¸�­"©¹;À�¼h¤n­��.¦­"Á­"©�²�¬�¼.¾"¾5¬�¥.­;µ8©8Â��"¥.¦¦"­��5�.�"©3�"·¸�­"©3¤¾�¥&©¬�Ã!´«�¢

³ �"¥.©O¤���"´�µ8©¶¶"¶¶¶"¶¶"¶¶¶"¶¶¶"¶¶"¶¶¶"¶¶¶"¶¶"¶¶¶"¶¶"¶¶¶"¶¶¶"¶¶"¶¶¶"¶¶¶"¶¶"¶¶¶"¶¶¶"¶¶"¶¶¶"¶¶Oµ�©�´"«�¢Ä Å ¶5¨"�©3�"·¸8­©¨"­�¶ Å