0% menganggap dokumen ini bermanfaat (0 suara)
670 tayangan30 halaman

2.1 Active Database and Triggerv2

Diunggah oleh

Juw 'Ndutz
Hak Cipta
© Attribution Non-Commercial (BY-NC)
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PPT, PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
670 tayangan30 halaman

2.1 Active Database and Triggerv2

Diunggah oleh

Juw 'Ndutz
Hak Cipta
© Attribution Non-Commercial (BY-NC)
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PPT, PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 30

BDL Genap 2008

Teknik Informatika - ITS

ACTIVE DATABASE AND TRIGGER


2009 Umi Laili Yuhana, S.Kom, M.Sc., Dini Adni, S.Kom, Nurul Fajrin, S.Kom, Wijayanti, S.Kom, Ridho Rahman, S.Kom

Topik Minggu Ini


Pertemuan Ke1 PENDAHULUAN Penjelasan Silabus Perkuliahan Review tentang basis data, data modelling (cdm+pdm) Trend tentang database ACTIVE DATABASE Active dan passive database concept Trigger Materi

APLIKASI ACTIVE DATABASE Integrity management Derived data maintenance Business rule Penugasan tugas analisa case study dan penerapan active database

Outline

Konsep pasive database dan active database Model umum untuk active database dan trigger Aplikasi-aplikasi untuk active database Desain dan isu implementasi untuk active database Contoh statement-level active rule dalam STARBURST, Oracle dan DB2 dan Chimera

Pasive Database

DB digunakan sebagai tempat penyimpan data (repositoris) Database tidak bisa melakukan action tertentu ketika suatu event tertentu terjadi Perintah (command) seperti query, update dan delete diekseskusi oleh database ketika direquest oleh pengguna atau program aplikasi

Active Database

DB dapat bereaksi dan memberikan respon tertentu ketika suatu kejadian terjadi Merupakan sistem database yang didukung oleh fitur automatic execution pada saat kondisi tertentu atau kejadian tertentu terjadi Menggunakan active rule (trigger) yang disebut dengan ECA rule. ECA rule terdiri dari 3 komponen utama yaitu ECA (Event, Condition, and Action)

Model Umum untuk Active DB

Event : kejadian-kejadian yang menjadi pemicu (trigger), biasanya berupa operasioperasi yang ekplisit ada dalam database atau dapat juga berupa temporal atau eksternal event Condition: menentukan apakah rule action harus dieksekusi atau tidak Action : tindakan yang dilakukan, biasanya berupa urutan statement SQL atau bisa juga berupa program eksternal yang dieksekusi secara otomatis (stored procedure)

Contoh aplikasi potensial dari active rule

Notification

Monitoring system GPA alert and course prerequisites Salary of employee cant exceed that of manager Maintain the derived attribute, TOTAL_SAL

Enforce integrity constraints

Business rule

Maintenance of derived data

Desain dan isu implementasi untuk active database

STARBURST

SYNTAX CREATE RULE <rule-name> ON <table-name> WHEN <triggering-operations> [IF <SQL-predicate>] THEN <SQL-statements> [PRECEDES <rule-names>] [FOLLOWS <rule-names>] <triggering-operations> ::= INSERTED|DELETED| UPDATED [(columnnames)]

Desain dan isu implementasi untuk active database

STARBURST
SEMANTIC

While the conflict set is not empty 1. select one rule R from the conflict set among those rules at highest priority; Rs state becomes untriggered 2. Evaluate the condition of R 3. If the condition of R is TRUE, then execute the action of R.

Contoh Active Rules Executions di Starburst


CREATE RULE SalaryControl ON Emp WHEN INSERTED, DELETED, UPDATED (Sal) IF (SELECT AVG (Sal) FROM Emp) > 100 THEN UPDATE Emp SET Sal = .9 * Sal Insert (Rick, 150) Insert (John, 120) Employee Stefano Patrick Michael Rick Sal 81 81 99 135

Database states:
Employee Stefano Patrick Michael Sal 90 90 110

John

108

Desain dan isu implementasi untuk active database

ORACLE

SYNTAX CREATE TRIGGER<trigger-name> {BEFORE|AFTER} <trigger-events> ON <tablename> [[REFERENCING <references>] FOR EACH ROW [WHEN (<condition>)]] <PL/SQL BLOCK> <trigger-events> ::= INSERT|DELETE|UPDATE [OF (column-names)] <reference> ::= OLD AS <old-value-tuple-name>| NEW AS <new-value-tuple-name>

Desain dan isu implementasi untuk active database

ORACLE

SEMANTIC 1. Execute the statement-level before triggers 2. For each row in the target table : 3. Perform statement-level referential integrity and assertion checking
a. b.

c.

Execute the row-level before-triggers Perform the modification of the row and row-level referential integrity and assertion checking Execute the row-level after-triggers

4.

Execute the statement-level after-triggers

Desain dan isu implementasi untuk active database

TIPE TRIGGER PADA ORACLE


STATEMENT
Dieksekusi

TRIGGER

hanya SATU KALI sebelum atau setelah (BEFORE/AFTER) suatu kejadian yang berupa INSERT, UPDATE dan DELETE

ROW

TRIGGER

Dieksekusi

SATU KALI untuk setiap baris (FOR EACH ROW) sebelum atau setelah (BEFORE/AFTER) suatu kejadian yang berupa INSERT, UPDATE dan DELETE

Contoh active rule execution di ORACLE (Statement TRIGGER)


CREATE TRIGGER LogUserNilai AFTER INSERT ON FRS BEGIN INSERT INTO LogNilai VALUES (user, sysdate,INSERT); END;
NRP 5102100180 NILAI A NRP 5102100180 NILAI A

INSERT INTO FRS (5102100020,B)


NM ARI TGL 3/2/09 KET UPDATE NM ARI ANI

5102100020
TGL 3/2/09 7/2/09

B
KET UPDATE INSERT

Contoh active rule execution di ORACLE (Row TRIGGER)


CREATE TRIGGER Reorder AFTER UPDATE of PartOnHand ON Inventory WHEN (:new.PartOnHand<:New.ReorderPoint) FOR EACH ROW DECLARE NUMBER X; BEGIN SELECT COUNT (*) INTO X FROM PendingOrders WHERE Part=:new.Part; IF X=0 THEN INSERT INTO PendingOrders VALUES (:new.Part,:new.OrderQuantity,SYSDATE) END IF; END;

Contoh active rule execution di ORACLE (Row TRIGGER)


TABEL INVENTORY
Part 1 2 3 PartOnHand 200 780 450 ReorderPoint 150 500 400 ReorderQuantity 100 200 120
Part

TABLE PendingOrders
OrderQuantity TGL

UPDATE

INVENTORY SET PartOnHand= PartOnHand-70 WHERE Part= TABLE PendingOrders


Part 1 OrderQuantity 100 TGL 3/2/2009

TABEL INVENTORY
Part 1 PartOnHand 130 ReorderPoint 150 ReorderQuantity 100

2
3

780
450

500
400

200
120

Contoh active rule execution di ORACLE (Row TRIGGER)


TABEL INVENTORY
Part 1 2 3 PartOnHand 200 780 450 ReorderPoint 150 500 400 ReorderQuantity 100 200 120

TABLE PendingOrders
Part OrderQuantity TGL

UPDATE

INVENTORY SET PartOnHand= PartOnHand-60 WHERE Part TABLE PendingOrders


Part 1 3 OrderQuantity 100 120 TGL 3/2/2009 3/2/2009

TABEL INVENTORY
Part 1 2 3 PartOnHand 140 720 390 ReorderPoint 150 500 400 ReorderQuantity 100 200 120

Desain dan isu implementasi untuk active database

MUTATING TABLE
tabel

yang sedang dimodifikasi menggunakan statemen UPDATE, DELETE, atau INSERT, table yang mungkin harus diupdate karena efek dari deklarasi referential integrity constraint seperti DELETE CASCADE

Contoh active rule execution di ORACLE (Mutating Table)

ORACLE MUTATING TABLE


CREATE OR REPLACE TRIGGER mhs_count AFTER DELETE ON mhs

FOR EACH ROW


DECLARE n INTEGER; BEGIN SELECT COUNT(*) INTO n FROM mhs; DBMS_OUTPUT.PUT_LINE(' Jumlah mhs = ' || n ||' orang.'); END;

Desain dan isu implementasi untuk active database

DB2

SYNTAX CREATE TRIGGER<trigger-name> {BEFORE|AFTER} <trigger-event> ON <table-name> [REFERENCING <references>] FOR EACH {ROW|STATEMENT} WHEN (<SQL-condition>) <SQL procedure-statements> <trigger-events> ::= INSERT|DELETE|UPDATE [OF (column-names)] <reference> ::= OLD AS <old-value-tuple-name>| NEW AS <new-value-tuple-name>| OLD_TABLE AS <old-value-table-name>| NEW_TABLE AS <new-value-table-name>

Desain dan isu implementasi untuk active database

DB2

SEMANTIC 1. Suspend the execution of A and save its working storage on a stack 2. Compute transition values (OLD and NEW) relative to event E 3. Consider and execute all before-triggers relative to event E, possibly changing the NEW transition values 4. Apply NEW transition value to the database, thus making the state change associated to event E effective 5. Consider and execute all after-triggers relative to event E. if any of them contains an action Ai that activates other triggers then invoke this processing procedure recursively for Ai 6. Pop from the stack the working storage for A and continue its evaluation

Desain dan isu implementasi untuk active database

DB2

SEMANTIC (revised step 4) 4. Apply NEW transition values to the database, thus making the state change associated to event E effective. For each integrity constraint IC violated by the current state, consider the action Aj that compensates the integrity constraint IC. a. Compute the transition values (OLD and NEW) relative to Aj b. Execute the before-triggers relative to Aj, possibly changing the NEW transition values c. Apply NEW transition values to the database, thus making the state change associated to Aj effective d. Push all after-triggers relative to action Aj into queue of suspended triggers

Contoh Active Rules Executions di DB2

Tabel: Part, Distributor, Audit Part, DEFAULT = HDD


FOREIGN KEY (Supplier) REFERENCES Distributor ON DELETE SET DEFAULT
PartNum 1 2 3 4 Supplier Jones Taylor HDD Jones

Part
Cost 150 500 400 800 Distributor

Distributor
City State

Jones
Taylor HDD

Palo Alto
Minneapolis Atlanta

California
Minnesota Georgia

Contoh Active Rules Executions di DB2

SUPPLIER RULE
CREATE TRIGGER OneSupplier BEFORE UPDATE OF Supplier ON Part REFERENCING NEW AS N FOR EACH ROW WHEN (N.Supplier IS NULL) SIGNAL SQLSTATE 70005 (Cannot change supplier into NULL)

*trigger di atas tidak menangani inputan data yg bernilai NULL pada Supplier

Contoh Active Rules Executions di DB2

AUDIT RULE
CREATE TRIGGER AuditSupplier AFTER UPDATE OF Supplier ON Part REFERENCING OLD_TABLE AS OT FOR EACH STATEMENT INSERT INTO Audit VALUES (USER, CURRENT_DATE, (SELECT COUNT(*) FROM OT)

user Bill melakukan transaksi pada October 10, 1996: DELETE FROM Distributor WHERE State = California Audit
User CurrentDate UpdatedTuples

Bill

1996-10-10

Desain dan isu implementasi untuk active database

CHIMERA

SYNTAX DEFINE TRIGGER<trigger-name> [FOR <class-name>] EVENTS < triggering-events> CONDITION <formula> ACTIONS <procedural-expression> [{BEFORE|AFTER} <trigger-names>] END <triggering-event> ::= CREATE|DELETE|MODIFY [<attr-name>] <option> ::= [<consumption-opt>][<execution-opt>] <consumption-opt> ::= event-consuming|event-preserving <execution-opt> ::= deferred|immediate

Desain dan isu implementasi untuk active database

CHIMERA
SEMANTIC

While the conflict set is not empty do: 1. select one trigger T from the conflict set among those rules at highest priority; Ts state becomes untriggered 2. Evaluate the condition of T 3. If the condition of T is TRUE, then execute the action of T

Contoh Active Rule Execution di CHIMERA

Initial Schema
Employee Name: string Salary: integer Mgr: Employee

SpecialEmp Name: string

Department Name: string Employees: set-of(Employee)

Class Employee:

{(o1,john,3500,o2),
(o2,tom,4500,null), (o3,bob,4300,o2)}

Class SpecialEmp: Class Department:

{} {(o4,toys,{o1,o2,o3}) }

Contoh Active Rule Execution di CHIMERA


define trigger AdjustSalary for Employee events create, modify(Salary) condition Self.Salary > Self.Mgr.Salary actions modify (Employee.Salary, Self, Self.Mgr.Salary) end;

Transaksi

begin transaction; select(X where employee(X), X.name=tom), modify(Employee.Salary,X,5000) ; select(X where employee(X),X.name=john), modify(Employee.Salary,X,5300) ; commit;

(o1,john,5000)

Contoh Soal Trigger

Ketika data dosen dihapus maka set nipwali mahasiswa menjadi null Syntax :

create trigger tr1 before delete on dosen for each row begin update mhs m set m.nipwali=null where m.nipwali= :old.nip; end;

Anda mungkin juga menyukai