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 1NÔ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 2NÔ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 3Họ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 4Họ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 5Họ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 6Họ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 7Họ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 8Họ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 9Họ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 10Họ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 11Họ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 12Họ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 13Họ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 14Họ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 15Họ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 16Họ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 17Họ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 18Họ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 19Họ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 20Họ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 21Họ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 22Họ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 23Họ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 24Họ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 25Họ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 26Họ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 27Họ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 28Họ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 29Họ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 30Họ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