1. Trang chủ
  2. » Luận Văn - Báo Cáo

Nghiên cứu và xây dựng công cụ hỗ trợ mô hình hóa hệ thống Triggers bằng event -B

61 1,1K 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 61
Dung lượng 2,09 MB

Nội dung

Triggers được sử dụng thường xuyên và rộng rãi trong hệ thống -cơ sở dữ liệu của nhiều ứng dụng để thực hiện các thao tác tự động và đảm bảo tính ràng buộc toàn vẹn.. Điều đó có nghĩa là

Trang 1

NÔNG THỊ OANH

NGHIÊN CỨU VÀ XÂY DỰNG CÔNG CỤ

HỖ TRỢ MÔ HÌNH HÓA HỆ THỐNG TRIGGERS

BẰNG EVENT-B

LUẬN VĂN THẠC SĨ NGÀNH CÔNG NGHỆ THÔNG TIN

Hà Nội – 2013

Trang 2

NÔNG THỊ OANH

NGHIÊN CỨU VÀ XÂY DỰNG CÔNG CỤ

HỖ TRỢ MÔ HÌNH HÓA HỆ THỐNG TRIGGERS

BẰNG EVENT-B

Ngành: Công nghệ thông tin

Chuyên ngành: Hệ thống thông tin

Mã số: 60 48 05

LUẬN VĂN THẠC SĨ NGÀNH CÔNG NGHỆ THÔNG TIN

NGƯỜI HƯỚNG DẪN KHOA HỌC: PGS.TS TRƯƠNG NINH THUẬN

Hà Nội – 2013

Trang 3

Học viên: Nông Thị Oanh - K18HTTT

MỤC LỤC

Danh mục bảng biểu 3

Danh mục hình vẽ 4

Danh mục từ viết tắt 6

Mở đầu 6

Chương 1: TỔNG QUAN VỀ TRIGGER CƠ SỞ DỮ LIỆU 8

1.1 KHÁI NIỆM 8

1.2 TẠO TRIGGER 9

1.3 CÁC THÀNH PHẦN CỦA TRIGGER 11

1.3.1 Sự kiện hoặc câu lệnh trigger 11

1.3.2 Điều kiện trigger 13

1.3.3 Hành động trigger 13

1.4 PHÂN LOẠI TRIGGER 14

1.5 QUẢN LÝ TRIGGER 15

1.5.1 Phân biệt trigger cơ sở dữ liệu 16

1.5.2 Thay đổi trạng thái của trigger cơ sở dữ liệu 17

1.5.3 Hủy bỏ trigger cơ sở dữ liệu 17

1.6 KHÁC NHAU GIỮA CÁC RÀNG BUỘC VÀ TRIGGER 17

Chương 2 : NGÔN NGỮ EVENT – B 19

2.1 NGÔN NGỮ EVENT – B 19

2.1.1 Máy và Ngữ cảnh 20

2.1.1 Cấu trúc của máy 20

2.1.2 Cấu trúc của Ngữ cảnh 21

2.2 Sự kiện 22

2.3 Quá trình làm mịn 24

2.3.1 Tái sử dụng biến 25

2.3.2 Giới thiệu sự kiện mới 25

2.3.3 Witness 25

2.4 Phân rã và kết hợp 25

Trang 4

Học viên: Nông Thị Oanh - K18HTTT

Chương 3: MÔ HÌNH HÓA VÀ KIỂM CHỨNG HỆ THỐNG TRIGGER

BẰNG EVENT – B 27

3.1 MÔ HÌNH HÓA HỆ THỐNG CƠ SỞ DỮ LIỆU 27

3.2 HÌNH THỨC HÓA TRIGGER 28

3.3 KIỂM CHỨNG THUỘC TÍNH HỆ THỐNG 28

3.4 VÍ DỤ 29

3.4.1 Mô tả ví dụ 30

3.4.2 Mô hình hóa ví dụ 30

3.4.3 Kiểm tra thuộc tính 32

3.5 CÁC NGHIÊN CỨU LIÊN QUAN 32

Chương 4: XÂY DỰNG CÔNG CỤ HỖ TRỢ MÔ HÌNH HÓA TRIGGER BẰNG EVENT – B 33

4.1 PHÂN TÍCH BÀI TOÁN 33

4.2 THIẾT KẾ HỆ THỐNG 33

4.3 ĐÁNH GIÁ MỘT SỐ KẾT QUẢ ĐẠT ĐƯỢC CỦA CHƯƠNG TRÌNH 42

Kết luận 42

Tài liệu tham khảo 44

Phụ lục 45

Trang 5

Học viên: Nông Thị Oanh - K18HTTT

Bảng 3.2 Mô hình hóa một trigger bằng sự kiện Event - B 29

Bảng 3.3: Chuyển đổi các câu lệnh SQL sang sự kiện Event – B 30

Trang 6

Học viên: Nông Thị Oanh - K18HTTT

Hình 4.1: Kiến trúc của chương trình hỗ trợ mô hình hóa hệ thống

trigger

33

Hình 4.2: Sơ đồ phân cấp chức năng của hệ thống mô hình hóa trigger 34

Hình 4.4: Luồng công việc chính của chương trình 35 Hình 4.5: Giao diện chính của chương trình hỗ trợ mô hình hóa hệ thống

trigger bằng Event-B

36

Hình 4.6: Giao diện kết nối hệ thống cơ sơ dữ liệu 37

Hình 4.9: Giao diện thêm trigger vào danh sách thành công 39 Hình 4.10: Giao diện phân tích và chuyển đổi tự động 40 Hình 4.11: Giao diện chỉnh sửa mô hình Event-B 40

Trang 7

Học viên: Nông Thị Oanh - K18HTTT

DANH MỤC TỪ VIẾT TẮT

DML Data Manipulation

Language

Ngôn ngữ thao tác dữ liệu

DDL Data Definition Language Ngôn ngữ định nghĩa dữ liệu ECA Event - Condition - Action Sự kiện – Điều kiện – Hành động

Trang 8

Học viên: Nông Thị Oanh - K18HTTT

MỞ ĐẦU Triggers là các luật hoạt động trong hệ thống cơ sở dữ liệu thương mại

như Orcacle, SyBase,…được hình thành trong cấu trúc Event Condition Action (ECA) Triggers được sử dụng thường xuyên và rộng rãi trong hệ thống

-cơ sở dữ liệu của nhiều ứng dụng để thực hiện các thao tác tự động và đảm bảo tính ràng buộc toàn vẹn Trong một số cơ sở dữ liệu thương mại, triggers có hai loại: triggers DML và triggers hệ thống Triggers DML được kích hoạt khi các

sự kiện DELETING, UPDATING, INSERTING xuất hiện, còn triggers hệ thống giống như thủ tục lưu trữ có chứa các đoạn mã PL/SQL Các đoạn mã này con người có thể đọc được và không có ngữ nghĩa hình thức Vì vậy, chúng ta chỉ có thể kiểm chứng nếu trigger kết thúc hoặc xung đột với tính ràng buộc toàn vẹn sau khi thi hành nó hoặc kiểm tra từng bước một Do đó mô hình hoá triggers bằng các phương pháp hình thức là hết sức cần thiết Một số công trình đã cố gắng giải quyết vấn đề này bằng cách áp dụng các giải thuật tìm kiếm tính dừng hoặc kiểm chứng mô hình [4], [5] Tuy nhiên, hầu hết các kết quả đều tập trung vào tính chất dừng, trong khi một số ít giải quyết cả hai tính dừng và ràng buộc toàn vẹn của hệ thống cơ sở dữ liệu Hơn nữa, các phương pháp tiếp cận dường như rất phức tạp mà chúng ta không thể áp dụng vào trong phát triển cơ sở dữ liệu

Phương pháp B [6] là phương pháp phát triển phần mềm hình thức, ban đầu được J.-R Abrial viết Ký hiệu của phương pháp B dựa trên lý thuyết tập hợp, phép thay thế tổng quát và logic bậc nhất Event – B [7] được kế thừa từ phương pháp B, phù hợp hơn cho phát triển hệ thống phân tán và phản hồi lớn Phát triển phần mềm trong Event – B bắt đầu bằng mô tả các yêu cầu của hệ thống ở mức trừu tượng và sau đó làm mịn chúng qua các bước để đạt được sự mô tả hệ thống chi tiết của hệ thống để có thể chuyển đổi sang mã nguồn Tính nhất quán của mỗi mô hình và mối quan hệ giữa mô hình trừu tượng và mô hình làm mịn thu được bằng chứng minh hình thức Các công cụ hỗ trợ được cung cấp cho đặc tả Event – B và chứng minh trong nền tảng Rodin

Từ yêu cầu kiểm chứng các triggers và ưu điểm của Event-B, việc phát triển các công cụ phần mềm hỗ trợ quá trình mô hình hoá bằng Event-B có ý nghĩa thực tiễn quan trọng trong qui trình phát triển các ứng dụng cơ sở dữ liệu

Trang 9

Học viên: Nông Thị Oanh - K18HTTT

Trên cơ sở những phân tích trên, được sự định hướng và chỉ bảo của PGS.TS

Trương Ninh Thuận, tôi đã lựa chọn đề tài: “Nghiên cứu và xây dựng công cụ

hỗ trợ mô hình hóa hệ thống triggers bằng Event-B” làm luận văn tốt nghiệp

của mình

Trong luận văn này, chúng tôi dựa vào một cách tiếp cận hình thức hóa hệ thống trigger cơ sở dữ liệu bằng phương pháp chứng minh Event – B [5] Ý tưởng tiếp cận này được xuất phát từ sự tương quan giữa cấu trúc của sự kiện Event – B và ECA Đầu tiên, chúng tôi chuyển đổi hệ thống cơ sở dữ liệu sang

mô hình Event – B Bước tiếp theo chúng tôi đưa mô hình tiếp cận thực tế bằng cách sử dụng nền tảng Rodin để kiểm chứng thuộc tính là tính dừng và các ràng buộc khác dựa trên công cụ chứng minh tự động Ưu điểm của cách tiếp cận này

là hệ thống cơ sở dữ liệu thực bao gồm các trigger và các ràng buộc được mô hình hóa dễ dàng bằng cụm từ diễn tả logic trong Event – B như INVARIANTS

và EVENTS Do đó, tính đúng đắn của hệ thống có thể được chứng minh bằng phương pháp hình thức Điều đó đặc biệt quan trọng cho các nhà phát triển cơ sở

dữ liệu khi mà biết chắc chắn hệ thống trigger tránh được các vấn đề nghiêm trọng ở thời gian thiết kế Hơn nữa, cách tiếp cận gần với thực tế mà chúng tôi

có thể triển khai một công cụ theo ý tưởng chính để chuyển đổi mô hình cơ sở

dữ liệu từ Event – B sang nền tảng Rodin tự động (hoặc tự động một phần) Luận văn gồm một số nội dung chính như sau:

Chương 1: Tổng quan về Trigger trong cơ sở dữ liệu - nội dung được

trình bày trong chương bao gồm: khái niệm, cách tạo trigger, các thành phần của

trigger, phân loại trigger

Chương 2: Ngôn ngữ B - trình bày về cấu trúc của mô hình

Event-B gồm Máy, Ngữ cảnh, sự kiện của Event-Event-B

Chương 3: Mô hình hóa và kiểm chứng hệ thống trigger bằng Event-B – trình bày về các định nghĩa được ánh xạ sang các khái niệm của Event-B, các

luật chuyển đổi giữa hệ thống trigger sang mô hình Event-B; đưa ra cách tiếp cận chi tiết, mô hình hóa hệ thống trigger cụ thể trong ví dụ 3.4 và giới thiệu những thông tin và các nghiên cứu liên quan đến công việc cho đến nay

Chương 4: Xây dựng công cụ hỗ trợ mô hình hóa hệ thống trigger bằng Event-B – trình bày về chức năng, giao diện và hướng dẫn sử dụng

chương trình

Trang 10

Học viên: Nông Thị Oanh - K18HTTT

CHƯƠNG 1: TỔNG QUAN VỀ TRIGGER TRONG CƠ SỞ DỮ LIỆU

Cấu trúc của trigger giống như cấu trúc của ECA, vì thế nó có mẫu sau:

rule name:: Event(e) IF condition DO action

Điều đó có nghĩa là khi có sự kiện xảy ra và thỏa mãn điều kiện cho trước thì hệ thống cơ sở dữ liệu thực hiện hành động Người sử dụng hệ thống cơ sở

dữ liệu quan hệ như Oracle, MySQL, SyBase quen với triggers biểu diễn dưới dạng SQL:1999 (dạng chuẩn trước là SQL-3) Trigger cơ sở dữ liệu được phân thành hai loại chính: trigger DML và trigger DDL Trigger DML được thi hành khi dữ liệu được thao tác, còn trigger DDL được kích hoạt trong sự kiện DDL như tạo bảng hoặc các sự kiện như đăng nhập, xác nhận, hủy…

Một trigger thường được tạo trên một bảng nào đó nhưng nó cũng có thể truy cập vào dữ liệu của bảng khác Triggers được sử dụng thường xuyên và rộng rãi trong hệ thống cơ sở dữ liệu của nhiều ứng dụng để thực hiện các thao tác tự động và đảm bảo tính ràng buộc toàn vẹn

Trigger được lưu trữ trong cơ sở dữ liệu gồm các khối câu lệnh SQL và

PL hoặc câu lệnh Java để chạy và có thể gọi thủ tục lưu trữ Tuy nhiên, thủ tục

và trigger có cách gọi khác nhau Trong khi thủ tục được thi hành trực tiếp bởi người dùng, ứng dụng thì một hay nhiều trigger được kích hoạt ngầm bởi Oracle khi có câu lệnh trigger INSERT, DELETE hoặc UPDATE được thực hiện mà không gây ra vấn đề cho người dùng đang kết nối hoặc ứng dụng đang chạy

Hình 1.1 minh họa một ứng dụng cơ sở dữ liệu với một số câu lệnh SQL kích hoạt các trigger lưu trữ trong cơ sở dữ liệu [8]

Trang 11

Học viên: Nông Thị Oanh - K18HTTT

Hình 1.1: Ứng dụng cơ sở dữ liệu có sử dụng các trigger

Các sự kiện kích hoạt trigger bao gồm:

 Các câu lệnh DML thay đổi dữ liệu trong bảng (insert, delete hoặc update)

 Các câu lệnh DDL

 Các sự kiện hệ thống như bắt đầu, kết thúc hoặc thông báo lỗi

 Các sự kiện người dùng như logon, logoff

1.2 Tạo trigger

Ta có thể tạo trigger thông qua lệnh script

 Cú pháp lệnh tạo trigger mức câu lệnh:

CREATE [OR REPLACE] TRIGGER trigger_name

timing event1 [OR event2 OR event3]

ON table_name BEGIN

Trang 12

Học viên: Nông Thị Oanh - K18HTTT

CREATE [OR REPLACE] TRIGGER trigger_name

timing event1 [OR event2 OR event3]

ON table_name

[REFERENCING OLD AS old | NEW AS new]

FOR EACH ROW

[WHEN condition]

BEGIN PL/SQL Block;

END;

Với:

Ví dụ:

CREATE OR REPLACE TRIGER secure_emp

BEFORE INSERT ON emp

CREATE OR REPLACE TRIGER audit_emp_values

AFTER DELETE OR INSERT OR DELETE ON emp FOR

EACH ROW

BEGIN

Trigger_name Tên trigger

timing Thời gian kích hoạt trigger

event Loại câu lệnh kích hoạt trigger

referencing Tên biến thay thế cho giá trị trước và sau

thay đổi của dòng dữ liệu đang xử lý FOR EACH ROW Trigger thuộc loại tác động trên dòng dữ

liệu WHEN Chỉ ra một số điều kiện ràng buộc thực hiện

trigger Table_name Tên bảng dữ liệu có gắn trigger trên đó PL/SQL Block Nội dung khối lệnh SQL và PL/SQL trong

trigger

Trang 13

Học viên: Nông Thị Oanh - K18HTTT

INSERT INTO audit_emp_values (user_name, timestamp,

id, old_last_name, new_last_name, old_title, new_tile, old_salary, new_salary)

VALUES (USER, SYSDATE, :old.empno, :old.ename,

:new.ename, :old.job, :new.job, :old.sal, :new.sal);

END; [8]

1.3 Các thành phần của trigger

Một trigger có ba thành phần chính:

 Sự kiện hoặc câu lệnh trigger

 Điều kiện trigger

 Hành động trigger [8]

AFTER UPDATE OF past_on_hand ON inventory

WHEN (new past_on_hand<new.record_point)

FOR EACH NOW

DECLARE /*a dumy variable for counting*/

VALUE (new1past_no, new,reorder_quantity, sysdate)

END IF /*past has already been reodered*/

END.

Hình 1.2: Các thành phần của trigger

1.3.1 Sự kiện hoặc câu lệnh trigger

Sự kiện hoặc câu lệnh trigger là câu lệnh SQL, sự kiện cơ sở dữ liệu hoặc

sự kiện người dùng kích hoạt trigger Sự kiện trigger có thể là câu lệnh insert,

Câu lệnh trigger Điều kiện trigger

Hành động trigger

Trang 14

Học viên: Nông Thị Oanh - K18HTTT

delete hoặc update trong bảng Một sự kiện trigger có thể có một hoặc nhiều sự kiện sau:

 Câu lệnh insert, delete hoặc update trên một bảng cụ thể (trong một số trường hợp là view)

 Câu lệnh create, alter hoặc drop trên đối tượng lược đồ bất kì

 Một thông báo lỗi cụ thể hoặc một thông báo lỗi bất kì

 Logon hoặc logoff của người dùng

Ví dụ, ở hình 1.2 câu lệnh trigger là:

.INSERT OR UPDATE OR DELETE OF inventory

Câu lệnh này có nghĩa là khi cột PARTS_ON_HAND của hàng trong bảng INVENTORY là update thì sẽ kích hoạt trigger Khi sự kiện trigger là câu lệnh update, ta có thể cài đặt sẵn một danh sách cột để xác định những cột nào phải cập nhật để kích hoạt trigger Ta không thể định rõ được danh sách cột các câu lệnh insert hoặc delete, bởi vì nó có thể ảnh hưởng đến toàn bộ thông tin của các hàng

Một sự kiện trigger có thể có nhiều câu lệnh SQL:

INSERT OR UPDATE OR DELETE OF inventory

Câu lệnh này có nghĩa là khi câu lệnh insert, delete hoặc update được thực hiện trong bảng thì trigger được kích hoạt Khi có nhiều loại câu lệnh SQL có thể kích hoạt trigger, ta cần phải sử dụng vị từ điều kiện để phát hiện ra loại câu lệnh trigger Theo cách này, ta tạo ra một trigger đơn chạy mã khác nhau dựa trên loại câu lệnh kích hoạt trigger [8]

1.3.2 Điều kiện trigger

Một điều kiện của một trigger có thể trả về giá trị True/False (ví dụ, tất cả các nhân viên có lương ít hơn $100,000) hoặc một truy vấn Một truy vấn hiểu là true nếu tập kết quả không rỗng, và false nếu truy vấn không có kết quả trả về Nếu phần điều kiện có giá trị true, những hành động của trigger được thực hiện

1.3.3 Hành động trigger

Hành động trigger là thủ tục (đoạn PL/SQL, chương trình Java, hàm C) chứa các mã và câu lệnh SQL để chạy khi các sự kiện sau xuất hiện:

Trang 15

Học viên: Nông Thị Oanh - K18HTTT

 Câu lệnh trigger được sử dụng

 Giá trị điều kiện trigger là True

Giống như thủ tục lưu trữ, hành động trigger gồm:

 Chứa các câu lệnh SQL, PL/SQL hoặc Java

 Định nghĩa các cấu trúc ngôn ngữ PL/SQL như các biến, các hằng, con trỏ, các trường hợp ngoại lệ khác

 Định nghĩa cấu trúc ngôn ngữ Java

Một ví dụ chỉ ra trong hình 1.3, cú pháp viết trên Oracle 7 để định nghĩa các triggers, (Cú pháp của SQL:1999 cho những trigger này tương tự như trong Oracle; chúng ta sẽ xem một ví dụ sử dụng cú pháp ngắn gọn của SQL:1999)

Một trigger sử dụng init_count để khởi động một biến đếm trước khi thực hiện

câu lệnh INSERT để thêm một bộ giá trị vào quan hệ Students Trigger dùng

biến tự động tăng incr_count để đếm khi có một bộ giá trị được thêm vào thỏa mãn điều kiện age <18

CREATE TRIGGER init_count BEFORE INSERT ON Students /* Sự kiện */ DECLARE

Trang 16

Học viên: Nông Thị Oanh - K18HTTT

FOR EACH ROW

BEGIN /* Hành động; một thủ tục nào đó trong Oracle's PL/SQL syntax */ count := count + 1;

END

Hình 1.3: Ví dụ minh hoạ Trigger

Một trigger có thể cũng được lập lịch thực hiện thay thế cho một câu lệnh, hoặc trong cơ chế hoãn, ở cuối giao dịch ngăn lại một câu lệnh, hoặc trong cơ chế không đồng bộ, nó thực hiện như một phần của một giao dịch riêng biệt

Trong hình 1.3 minh hoạ một điểm khác về thực thi trigger: Người dùng phải xác định một trigger được thực hiện một lần mỗi khi sửa bản ghi hoặc một

lần mỗi khi câu lệnh thực thi Nếu một hành động phụ thuộc vào sự thay đổi của các bản ghi riêng lẻ, ví dụ, chúng ta phải kiểm tra trường age khi có một bản ghi Students được thêm vào để quyết định tăng biến đếm, sự kiện của trigger nên

được định nghĩa xảy ra mỗi khi bản ghi được sửa; mệnh đề FOR EACH ROW

được sử dụng để làm điều này Kiểu trigger này được gọi là row-level trigger Mặt khác, trigger init_count được thực hiện một lần với mỗi câu lệnh INSERT,

không quan tâm đến số lượng các bản ghi được thêm vào, bởi vì chúng không có

mệnh đề FOR EACH ROW Trigger như thế này được gọi là statement-level trigger

Trong hình 1.3, từ khoá new tham chiếu tới một bộ giá trị mới được thêm vào Nếu bộ giá trị đang tồn tại được sửa, từ khoá old và new có thể được sử

dụng để tham chiếu tới các giá trị trước và sau khi có sự thay đổi Bản

SQL:1999 phác thảo cũng cho phép hành động của trigger tham chiếu đến một

tập các bản ghi đã thay đổi, không chỉ là thay đổi của một bản ghi Ví dụ, thật hữu ích nếu có thể tham chiếu tới một tập các bản ghi mới thêm vào quan hệ Students, những bản ghi được thêm chỉ bằng một câu lệnh INSERT; chúng ta có

thể đếm được số bản ghi mới có age<18 thông qua việc sử dụng truy vấn trên

tập này

Định nghĩa trong hình 1.3 sử dụng cú pháp của SQL:1999, để minh hoạ

sự tương đồng và sự khác nhau về cú pháp được sử dụng trong DBMS Từ khoá NEW TABLE có thể được chúng ta sử dụng để cung cấp một tên mới cho tập

Trang 17

Học viên: Nông Thị Oanh - K18HTTT

các bộ giá trị mới được thêm Mệnh đề FOR EACH STATEMENT chỉ ra trigger này là statement-level trigger và có thể bỏ qua vì nó là mệnh đề mặc định Định nghĩa này không có mệnh đề WHEN; nếu có mệnh đề này, nó sẽ có mệnh đề

FOR EACH STATEMENT theo sau-mệnh đề viết trước khi xác định các hành động

Mỗi trigger được thực hiện một lần với mỗi câu lệnh SQL thêm các bộ giá trị vào bảng Students, và việc thêm từng bộ giá trị duy nhất vào bảng được thống kê lại Hai trường đầu tiên của bộ giá trị chứa các hằng số (chỉ ra bảng được thay đổi là Students và loại thay đổi là Insert), và trường thứ ba là số lượng

các bộ giá trị được thêm vào có age<18 [8].

1.4 Phân loại trigger

Ta có thể phân loại trigger theo thời gian thực hiện như: BEFORE và AFTER

 BEFORE trigger: Trigger được kích hoạt trước khi thực hiện câu lệnh Việc này có thể cho phép ta loại bớt các phép xử lý không cần thiết, thậm chí có thể rollback dữ liệu trong trường hợp có thể gây ra các ngoại lệ (exception) Trigger thuộc loại này thường được sử dụng đối với các thao tác INSERT hoặc UPDATE

 AFTER trigger: Câu lệnh được thực hiện xong thì trigger mới được kích hoạt Thực hiện các công việc thường phải làm sau khi đã thực hiện câu lệnh

 INSTEAD OF trigger: Loại trigger này cho phép người sử dụng có thể thay đổi một cách trong suốt dữ liệu của một số view mà không thể thực hiện thay đổi trực tiếp được Với INSTEAD OF trigger, ta có thể thực hiện với cả ba thao tác: insert, update, delete

Ta cũng có thể phân loại trigger theo loại câu lệnh kích hoạt như: INSERT, UPDATE, DELETE Trong các trigger thuộc một trong ba loại lệnh: INSERT, UPDATE, DELETE Trigger UPDATE cần phải chỉ rõ thêm tên cột

dữ liệu kích hoạt trigger mỗi khi giá trị dữ liệu trong đó bị thay đổi Bên trong trigger có thể có chứa các lệnh thao tác dữ liệu Do đó, cần phải tránh trường hợp lặp lại theo kiểu đệ quy

Trang 18

Học viên: Nông Thị Oanh - K18HTTT

Một cách khác ta cũng có thể phân loại trigger theo số lần kích hoạt theo

đó sẽ có 02 loại trigger:

 Trigger mức lệnh: Trigger được kích hoạt mỗi khi thực hiện câu lệnh

 Trigger mức dòng lệnh: Trigger được kích nhiều lần ứng với mỗi dòng

dữ liệu chịu ảnh hưởng bởi thao tác thực hiện lệnh

1.5 Quản lý trigger

1.5.1 Phân biệt trigger cơ sở dữ liệu

 Trigger và thủ tục:

Lệnh tạo: CREATE TRIGGER Lệnh tạo: CREATE PROCEDURE

Lưu giữ trong Từ điển dữ liệu dưới

dạng mã nguồn và dạng p-code

Lưu giữ trong Từ điển dữ liệu dưới

dạng mã nguồn và dạng p-code

Được gọi ngầm định Thực hiện theo lời gọi tường minh

Không cho phép dùng: COMMIT,

ROLLBACK, SAVEPOINT

Cho phép dùng: COMMIT, ROLLBACK, SAVEPOINT

 Trigger cơ sở dữ liệu và trigger giao diện:

Trigger cơ sở dữ liệu Trigger giao diện

Được thực hiện khi có tác động lên

database do ứng dụng hoặc do chính

các công cụ của Oracle

Được thực hiện chỉ bởi các tác động ngay trên ứng dụng

Được kích hoạt bởi các lệnh SQL Được kích bởi các sự kiện trên ứng

dụng Phân biệt hai loại trigger trên câu lệnh

và trên dòng dữ liệu

Không phân biệt

Trang 19

Học viên: Nông Thị Oanh - K18HTTT

Tuỳ theo lỗi xảy ra, trigger có thể gây

ra rollback câu lệnh

Tuỳ theo lỗi xảy ra, có thể rollback toàn bộ giao dịch

Trigger cơ sở dữ liệu đƣợc kích hoạt độc lập với các Trigger giao diện

1.5.2 Thay đổi trạng thái của trigger cơ sở dữ liệu

Cho phép/ không cho phép kích hoạt một trigger cơ sở dữ liệu Cú pháp:

ALTER TRIGGER trigger_name DISABLE | ENABLE;

Với: Trigger_name Tên trigger;

Ví dụ:

Cho phép trigger được hoạt động

Cho phép/ không cho phép kích hoạt tất cả các trigger cơ sở dữ liệu của một bảng Cú pháp:

ALTER TABLE table_name DISABLE | ENABLE ALL TRIGGERS;

Với: Table_name Tên bảng;

Ví dụ:

Không cho phép các trigger ứng với bảng emp được hoạt động

ALTER TABLE emp DISABLE ALL TRIGGERS;

Biên dịch lại database trigger Cú pháp:

ALTER TRIGGER trigger_name COMPILE;

Trang 20

Học viên: Nông Thị Oanh - K18HTTT

Ví dụ: DROP TRIGGER check_sal;

1.6 Khác nhau giữa các ràng buộc và triggers

Mục đích của trigger là đảm bảo sự nhất quán của cơ sở dữ liệu, và với mục đích này, chúng ta nên xem xét đến việc sử dụng các ràng buộc tham chiếu (ví dụ, ràng buộc khoá ngoại) Ràng buộc không tự động kích hoạt như trigger nên các ràng buộc dễ để hiểu và cũng cung cấp cho hệ quản trị cơ sở dữ liệu nhiều cơ hội để tối ưu hoá việc thực hiện Ràng buộc cũng tránh cho dữ liệu trở nên thiếu nhất quán với bất kỳ loại câu lệnh nào, ngược lại trigger chỉ kích hoạt ứng với một loại câu lệnh xác định (ví dụ, câu lệnh Insert hoặc Delete) Một lần nữa, ta thấy giới hạn này làm cho ràng buộc dễ hiểu hơn

Mặt khác, trigger cho phép chúng ta thực hiện các ràng buộc cơ sở dữ liệu bằng nhiều cách phức tạp, như những ví dụ minh sau đây:

Giả sử rằng chúng ta có một bảng Orders có các trường itemid, quantity, customerid, và unitprice Khi một khách hàng đặt một hoá đơn, giá trị ba

trường đầu tiên được điền vào bằng người dùng (ví dụ là người bán hàng) Giá trị trường thứ tư có thể được lấy từ một bảng có tên là Items, nhưng

nó cần thiết phải có mặt trong bảng Orders để có được một bản ghi hoàn thiện về sự kiện đặt hàng Trong trường hợp giá của một Item sau đó thay đổi, chúng ta có thể định nghĩa một trigger để tìm giá trị này và đưa nó vào trường thứ tư khi có một bản ghi mới được thêm Thêm nữa, việc giảm số lượng các trường mà người bán hàng phải nhập vào sẽ làm giảm nguy cơ dẫn đến không nhất quán dữ liệu, vì người bán hàng có thể nhập sai giá làm cho nó khác với giá lưu trong cơ sở dữ liệu

Tiếp tục với ví dụ trên, chúng ta có lẽ muốn thực hiện một số hoạt động

khác khi một hoá đơn được nhận Ví dụ, nếu chúng ta thanh toán qua tài khoản thì chúng ta muốn kiểm tra xem tổng số tiền cần phải trả có nhỏ hơn giới hạn thanh toán của thẻ không Chúng ta có thể sử dụng trigger để kiểm tra; thực tế, chúng ta thậm chí có thể sử dụng ràng buộc CHECK Tuy nhiên, sử dụng trigger cho phép chúng ta thực hiện nhiều ràng buộc phức tạp hơn Trong trường hợp này, chúng ta có thể cho phép thanh toán

số tiền vượt quá 10% khả năng của thẻ nếu khách hàng có quan hệ với

Trang 21

Học viên: Nông Thị Oanh - K18HTTT

công ty ít nhất một năm, và thêm khách hàng vào một bảng của các ứng

cử viên cần đƣợc tăng thêm giới hạn thẻ

Trang 22

Học viên: Nông Thị Oanh - K18HTTT

CHƯƠNG 2: NGÔN NGỮ EVENT – B

Event-B không phải là ngôn ngữ lập trình Event-B là một phương pháp hình thức để mô hình hoá và phân tích ở mức hệ thống Nó được sử dụng như là một ký hiệu và phương pháp phát triển hình thức của hệ thống rời rạc Event - B được coi là sự kế thừa của ký hiệu phương pháp hình thức như là phương pháp

B (được biết đến như là B cổ điển), Z và Action Systems, bởi vì nó đơn giản hóa ký hiệu máy B, dễ dàng để học và phù hợp hơn cho sự phát triển hệ thống phân tán phản ứng và song song Điểm chủ chốt của Event-B là sử dụng lý thuyết về tập hợp như là các ký hiệu mô hình hoá, sử dụng cơ chế làm mịn để biểu diễn hệ thống ở các mức trừu tượng khác nhau và sử dụng các chứng minh toán học để kiểm chứng hệ thống Một ưu điểm khác của Event-B là hỗ trợ công

cụ cho mô hình hóa hệ thống Event -B được sử dụng cùng với nền tảng Rodin

Máy và Ngữ cảnh có mối quan hệ khác nhau: Máy có thể được “làm mịn” bởi máy khác và Ngữ cảnh được “mở rộng” bởi ngữ cảnh khác (không có chu trình nào được phép trong cả hai quan hệ này) Hơn nữa, một Máy có thể “tham chiếu” đến một hoặc nhiều Ngữ cảnh Máy có thể “tham chiếu” ngầm định đến tất cả các Ngữ cảnh mở rộng bởi Ngữ cảnh đã được “tham chiếu” Một máy chỉ

có thể “tham chiếu ” đến Ngữ cảnh tường minh hoặc ngầm định Ví dụ về quan

Trang 23

Học viên: Nông Thị Oanh - K18HTTT

hệ giữa Máy và Ngữ cảnh:

Hình 2.1: Mối quan hệ giữa Máy và Ngữ cảnh

Một mô hình có thể chỉ gồm Máy hoặc Ngữ cảnh hoặc kết hợp giữa Máy

và Ngữ cảnh Các Máy và Ngữ cảnh của mô hình được làm mịn bằng cách bổ sung các hằng, biến, bất biến, định lý, sự kiện

2.1.1 Cấu trúc của Ngữ cảnh

Một Ngữ cảnh có các thành phần sau:

 Sets: là kiểu do người dùng định nghĩa có thể khai báo ở phần SETS, mô

tả một tập của các loại trừu tượng hoặc liệt kê

 Hằng: biểu diễn các hằng được sử dụng trong mô hình

 Tiên đề: mô tả biểu thức vị từ bậc nhất, tính chất của thuộc tính được định nghĩa trong mệnh đề CONSTANT, kiểu và ràng buộc được mô tả trong mệnh đề này

 Định lý: biểu thị các tính chất đã được chứng minh từ các tiên đề

Trang 24

Học viên: Nông Thị Oanh - K18HTTT

Hình 2.2 Ví dụ một cấu trúc của Ngữ cảnh

2.1.2 Cấu trúc của Máy

Các thành phần của máy bao gồm:

- Làm mịn: Tùy chọn của máy có thể làm mịn máy khác

- Tham chiếu: ta có thể sử dụng các tập, các hằng, các tiên đề của Ngữ cảnh bằng cách khai báo trong phần Sees Các tiên đề có thể được sử dụng để chứng minh trong máy như là giả thuyết

- Biến: các giá trị của biến có thể được xác định khi khởi tạo và thay đổi khi có sự kiện Chúng có thể cùng tạo thành trạng thái của máy Mỗi một biến phải đưa ra một kiểu bởi bất biến

- Bất biến: biểu diễn thuộc tính của biến Bất biến được định nghĩa trong điều kiện của tập và hằng

- Sự kiện: Một sự kiện có thể gán giá trị mới cho biến Bảo vệ sự kiện cụ thể dưới điều kiện có thể xảy ra Khi khởi tạo máy là trường hợp đặc biệt của sự kiện

Trang 25

Học viên: Nông Thị Oanh - K18HTTT

Hình 2.3 Ví dụ một cấu trúc của máy

2.2 Sự kiện

Mô hình hệ thống với Event-B đƣợc bắt đầu từ các sự kiện trừu tƣợng quan sát đƣợc có thể xảy ra trong hệ thống, từ đó đặc tả các trạng thái và hành vi của hệ thống ở mức trừu tƣợng cao hơn Một sự kiện e tác động lên (một danh

sách) biến trạng thái v, với điều kiện G(v) và hành động A(v), sẽ đƣợc mô tả nhƣ

sau :

Vì thế¸ khi trạng thái v thỏa mãn điều kiện G(v) = true, hành động A(v) sẽ

đƣợc thực hiện Hình 2.3 biểu diễn cấu trúc tổng quát của một sự kiện Trong đó:

1 Mệnh đề status có thể là ordinary, convergent (sự kiện phải làm tăng

giá trị các biến của nó ), anticipated (sự kiện không đƣợc làm tăng giá trị các biến của nó )

Trang 26

Học viên: Nông Thị Oanh - K18HTTT

2 Mệnh đề refine hiển thị danh sách các sự kiện trừu tượng được làm

mịn

3 Mệnh đề any hiển thị các tham số nếu có

4 Mệnh đề where chứa các điều kiện để sự kiện được kích hoạt

5 Mệnh đề with chứa các tham số phải nhận giá trà về của sự kiện trừu

tượng tương ứng

6 Mệnh đề then chứa các hành động của sự kiện Các hành động này sẽ

được thực thi khi các điều kiện của sự kiện được thỏa mãn

Một hành động có thể là đơn định (deterministic) hoặc không đơn định (nondeterministic), các hành động được thực hiện tuần tự Dạng thông thường của hành động đơn định được biểu diễn là:

<variable identifier >:=< expression>, ví dụ act1 : x := x+y

Các hành động không đơn định có dạng :

< variable identifier list >:|< before after predicate > hoặc

< variable identifier >:2< set expression >, ví dụ act : x :2 A[{y} Biến x trong hành động act trở thành thành viên của tập A U{y}, các biến A và y không

thay đổi

Trang 27

Học viên: Nông Thị Oanh - K18HTTT

Hình 2.4: Cấu trúc tổng quát của sự kiện

Sau khi có mô hình hóa hệ thống bằng Event-B, chúng ta cần có lý do về

mô hình hóa để hiểu nó Lập luận về một mô hình, chúng tôi sử dụng bộ chứng minh chỉ ra tính đúng đắn của nó hoặc kiểm chứng một số thuộc tính Như chúng tôi đề cập đến ở phần trên, hành vi của hệ thống được biểu diễn bằng máy Biến

v của một máy xác định trạng thái của máy mà bị hạn chế bởi bất biến I(v) Sự kiện E m mô tả những thay đổi có thể có của trạng thái bao gồm điều kiện G m (v)

và hành động S m (v, v ’ ) Và chúng được biểu thị bằng:

When Gm(v) then v :| Sm(v, v_) end

Thuộc tính của một mô hình Event-B được chứng minh bằng cách sử dụng

bộ chứng minh (PO) được tạo ra tự động bằng bộ sinh chứng minh của nền tảng Rodin Đầu ra của các bộ sinh chứng minh được truyền tới bộ thử của công cụ Rodin thực hiện tự động hoặc chứng minh tương tác

2.3 Quá trình làm mịn

Quá trình làm mịn là khái niệm trọng tâm trong Event-B Quá trình làm mịn được sử dụng để đưa vào từng bước các chi tiết và độ phức tạp vào một mô hình Nếu máy B làm mịn máy A, thì máy B chỉ được phép hành động tương ứng với hành động của máy A Bây giờ ta có cái nhìn chính xác hơn nghĩa của

từ “tương ứng” ở đây Trong bối cảnh như vậy, ta gọi máy A là máy trừu tượng còn máy B là máy cụ thể

Máy cụ thể có tập biến của riêng nó Bất biến của nó có thể tham chiếu đến các biến của máy trừu tượng và máy cụ thể Nếu một bất biến tham chiếu đến cả hai, ta gọi là “bất biến liên kết” Bất biến liên kết được sử dụng để liên hệ trạng thái giữa máy trừu tượng và máy cụ thể

Một sự kiện của máy trừu tượng có thể được làm mịn bởi một hoặc nhiều máy cụ thể Để đảm bảo rằng một máy cụ thể không chỉ cho phép một máy trừu tượng, ta cần phải chỉ ra hai điều:

 Các sự kiện cụ thể chỉ có thể xảy ra khi các sự kiện trừu tượng xảy ra

 Nếu một sự kiện cụ thể xuất hiện thì sự kiện trừu tượng xảy ra theo cách mà dẫn đến trạng tương ứng một lần nữa, tức là bất biến liên kết vẫn còn đúng

Trang 28

Học viên: Nông Thị Oanh - K18HTTT

Điều kiện đầu tiên được gọi là "tăng cường điều kiện" Kết quả là bộ chứng minh có nhãn concrete_event/abstract_guard/GRD Chúng tôi phải chứng minh rằng theo giả định rằng các sự kiện cụ thể được kích hoạt (tức là điều kiện của nó là đúng ) và bất biến (cả trừu tượng và cụ thể) cố định, điều kiện trừu tượng cố định là tốt Vì vậy, mục tiêu là để chứng minh rằng điều kiện trừu tượng, bất biến và điều kiện cụ thể có thể được sử dụng như là giả thuyết trong các chứng minh

Điều kiện thứ hai đó là bất biến liên kết vẫn còn đúng, nó chỉ là một trường hợp tổng quát hơn của bộ chứng minh mà đảm bảo các sự kiện không vi phạm bất biến Vì vậy, nhãn của bộ chứng minh lại một lần nữa là concrete_event/ abstract_guard / INV Mục đích để chứng minh bất biến của máy cụ thể có giá trị đúng mỗi khi xuất hiện sự thay đổi biến được thay thế giá trị mới Các giả thuyết chúng tôi sử dụng là:

 Chúng tôi giả định rằng các bất biến của cả hai máy cụ thể và trừu tượng là đúng trước khi sự kiện xảy ra

 Các bất biến trừu tượng mà các biến thay đổi được thay thế bằng các giá trị mới của nó có giá trị đúng bởi vì chúng ta biết rằng sự

kiện trừu tượng không vi phạm bất biến

Sự kiện này chỉ xảy ra khi điều kiện của cả hai máy cụ thể và trừu

tượng là đúng Hai điều kiện này là những vấn đề trọng tâm mà chúng ta cần để giải quyết để chứng minh sự đúng đắn của quá trình làm mịn [7]

2.3.2 Giới thiệu sự kiện mới

Một sự kiện trong máy cụ thể có thể không làm mịn bất kỳ sự kiện trong

Trang 29

Học viên: Nông Thị Oanh - K18HTTT

các máy trừu tượng Trong trường hợp đó nó được giả định bỏ qua làm mịn đó

là sự kiện mà không làm gì và có thể xảy ra bất cứ lúc nào Tăng cường điều kiện sau đó đúng và không cần phải được chứng minh Chúng ta vẫn phải chứng minh rằng bất biến liên kết cố định nhưng thời gian này theo giả định rằng biến của các máy trừu tượng không thay đổi Vì vậy trạng thái mới của sự kiện vừa được giới thiệu của chúng tôi tương ứng với tình trạng tương tự của máy trừu tượng của chúng tôi từ trước khi sự kiện xảy ra [7]

2.3.3 Witness

Chúng ta hãy xem xét một tình huống mà chúng ta có một sự kiện trừu

tượng với một tham số p và chúng tôi đang giải quyết với một sự kiện làm mịn

mà không cần đến tham số Chúng ta đã thấy ở trên là chúng ta phải chứng minh rằng đối với mỗi sự kiện cụ thể các sự kiện trừu tượng có thể hành động phù hợp Tuy nhiên với tham số, chúng ta có các tình huống mà chúng ta phải chứng

minh sự tồn tại của một giá trị p như vậy mà một sự kiện trừu tượng tồn tại

Chứng minh với lượng tồn tại thường khó làm, do đó Event-B sử dụng một cấu trúc witness Witness chỉ là một vị từ của các tham số trừu tượng với tên của các

biến như gán nhãn Thường là một witness có chỉ là mẫu đơn giản p =…, where… biểu diễn cho một biểu thức ánh xạ đến p [7]

2.4 Phân rã và kết hợp

Một trong những đặc trưng quan trọng của Event-B đó là khả năng bổ sung các sự kiện mới trong quá trình làm mịn, tuy nhiên khi bổ sung các sự kiện mới sẽ làm tăng độ phức tạp của tiến trình làm mịn do phải xử lý nhiều sự kiện

và nhiều biến trạng thái Ý tưởng chính của sự phân rã là phân chia mô hình M thành các mô hình con M1,… , Mn, các mô hình con này dễ dàng làm mịn hơn so với mô hình ban đầu Sự phân rã của mô hình M ban đầu được định nghĩa như sau (hình 2.4):

Hình 2.5 Sự phân rã và kết hợp

1 M phân rã thành các mô hình con M1,… , Mn

Trang 30

Học viên: Nông Thị Oanh - K18HTTT

2 Các sự kiện của M đƣợc phân rã thành các mô hình con

3 Các mô hình con đƣợc độc lập làm mịn một số lần RM1, …, RMn

4 Các mô hình làm mịn đƣợc kết hợp thành mô hình MR

Mô hình kết hợp phải đƣợc đảm bảo là đƣợc làm mịn từ M

Ngày đăng: 25/03/2015, 10:00

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
1. Choi, E.-H., Tsuchiya, T., Kikuno, T., “Model checking active database rules”. Technical report, AIST CVS, Osaka University, Japan (2006) Sách, tạp chí
Tiêu đề: Model checking active database rules
2. Ghazi, T., Huth, M., “An Abstraction-Based Analysis of Rule Systems for Active Database Management Systems”. Technical report, Kansas State University, Technical Report KSU-CIS-98-6, p.15 (April 1998) Sách, tạp chí
Tiêu đề: An Abstraction-Based Analysis of Rule Systems for Active Database Management Systems
3. Hong Anh Le and Ninh Thuan Truong, “Modeling and Verifying DML Triggers Using Event-B”, 5 th ACCIDS, 2013 Sách, tạp chí
Tiêu đề: Modeling and Verifying DML Triggers Using Event-B
4. Lee, S.-Y., Ling, T.-W., “Are your trigger rules correct?” In: Proceedings of the 9 th International Workshop on Database and Expert Systems Applications, DEXA 1998, p. 837. IEEE Computer Society, Washington, DC (1998) Sách, tạp chí
Tiêu đề: Are your trigger rules correct
5. Lee, S.-Y., Ling, T.-W., “Verify Updating Trigger Correctness”. In: Bench- Capon, T.J.M., Soda, G., Tjoa, A.M. (1999) Sách, tạp chí
Tiêu đề: Verify Updating Trigger Correctness
7. Event-b and the rodin platform (2012), http://www.event-b.org 8. Oracle7 Server Concepts Manual (2012), http://docs.oracle.com/ Link

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w