Bắt tuân theo toàn vẹn ngữ nghĩa bao gồm việc loại bỏ các chƣơng trình cập nhật vi phạm một vài ràng buộc toàn vẹn. Một ràng buộc bị vi phạm khi nó trở thành sai trong trạng thái cơ sở dữ liệu mới đƣợc cập nhật sinh ra. Khó khăn chính trong việc thiết kế một hệ thống con toàn vẹn là việc tìm các thuật toán bắt tuân theo có hiệu quả. Có hai phƣơng pháp cơ bản cho phép loại bỏ các cập nhật không tƣơng thích. Phƣơng pháp thứ nhất dựa trên sự phát hiện tính không tƣơng thích. Cập nhật u đƣợc thực hiện gây ra việc thay đổi trạng thái cơ sở dữ liệu D thành Du. Bằng việc áp dụng các kiểm tra đƣợc suy diễn từ các ràng buộc này, thuật toán bắt tuân theo kiểm tra rằng tất cả các ràng buộc thích hợp là thỏa mãn trong trạng thái Du. Nếu trạng thái Du là không tƣơng thích, hệ QTCSDL có thể cố gắng hoặc là đi đến một trạng thái tƣơng thích khác D’u bằng việc sửa đổi Du với các hành động phụ thêm, hoặc là khôi phục trạng thái D bằng cách hủy bỏ u. Bởi vì các kiểm tra này đƣợc áp dụng sau khi đã thay đổi trạng thái cơ sở dữ liệu, chúng thƣờng đƣợc gọi là hậu kiểm tra (posttest). Phƣơng pháp này có thể không hiệu quả nếu một lƣợng công việc lớn (cập nhật D) phải bị hủy bỏ trong trƣờng hợp một thất bại toàn vẹn.
R5 Thêm Sửa Xoá
Dathang + - - Hoadon + + -
Phƣơng pháp thứ hai dựa trên việc ngăn ngừa sự không tƣơng thích. Một cập nhật đƣợc thực hiện chỉ khi nó làm thay đổi trạng thái cơ sở dữ liệu thành một trạng thái tƣơng thích. Các bộ chủ thể cho cập nhật hoặc là đã có sẵn một cách trực tiếp (trong trƣờng hợp chèn) hoặc phải đƣợc trích rút từ cơ sở dữ liệu (trong trƣờng hợp loại bỏ hoặc sửa đổi). Thuật toán bắt tuân theo kiểm tra rằng tất cả các ràng buộc thích hợp sẽ thỏa mãn sau khi cập nhật các bộ giá trị này. Điều này thƣờng đƣợc thực hiện bằng cách áp dụng với các bộ giá trị này các kiểm tra đƣợc suy diễn từ các ràng buộc toàn vẹn. Biết rằng các kiểm tra này đƣợc áp dụng trƣớc khi trạng thái cơ sở dữ liệu đƣợc thay đổi, chúng thƣờng đƣợc gọi là các tiền kiểm tra. Phƣơng pháp ngăn ngừa là hiệu quả hơn phƣơng pháp phát hiện bởi vì các cập nhật không bao giờ cần bị hủy bỏ do vi phạm tính toàn vẹn.
Thuật toán sửa đổi truy vấn là một ví dụ của phƣơng pháp ngăn ngừa có hiệu quả đặc biệt ở việc bắt tuân theo các ràng buộc miền. Nó thêm các điều kiện khẳng định về điều kiện truy vấn bằng phép toán AND sao cho truy vấn đƣợc sửa đổi có thể bắt tuân theo tính toàn vẹn.
Để xử lý các khẳng định tổng quát hơn, tiền kiểm tra có thể đƣợc tạo ra tại thời điểm định nghĩa khẳng định và bắt tuân theo tại thời gian chạy khi các update xảy ra. Phƣơng pháp đƣợc hạn chế đến các cập nhật chèn hoặc xóa một bộ giá trị đơn của quan hệ đơn. Thuật toán xây dựng một tiền kiểm tra tại thời điểm định nghĩa khẳng định cho mỗi khẳng định và mỗi một kiểu cập nhật (insert, delete). Các tiền kiểm tra này đƣợc bắt tuân theo tại thời gian chạy. Phƣơng pháp này chấp nhận nhiều quan hệ, các khẳng định nhiều biến, có thể với các hàm nhóm. Nguyên tắc là sự thay thế các biến bộ trong khẳng định bằng các hằng từ một bộ đƣợc cập nhật. Mặc dù sự đóng góp quan trọng của nó cho nghiên cứu, phƣơng pháp là khó sử dụng đƣợc trong môi trƣờng thực vì sự hạn chế trên các cập nhật.
Trong phần còn lại giới thiệu một phƣơng pháp tổ hợp tính tổng quát của các cập nhật đƣợc hỗ trợ với ít nhất tính tổng quát của các khẳng định mà đối với nó các tiền kiểm tra đƣợc tạo ra. Phƣơng pháp này dựa trên tích, tại thời
điểm định nghĩa khẳng định, của các khẳng định thu thập (compled assertion) đƣợc sử dụng muộn hơn để ngăn ngừa tổng quát xử lý tập hợp trọn vẹn các khẳng định đƣợc sinh ra trong phần trƣớc. Nó làm giảm đáng kể phần của cơ sở dữ liệu phải đƣợc kiểm tra khi các khẳng định bắt tuân theo trong sự có mặt của các cập nhật.
Định nghĩa của một khẳng định thu thập dựa trên khái niệm các quan hệ vi phân (differentiale relation). Giả sử u là một cập nhật của quan hệ R. R+ và R- là các quan hệ vi phân của R theo u, trong đó R+
chứa các bộ giá trị đƣơc chèn vào R bởi u và R-
chứa các bộ giá trị của R bị loại bỏ bởi u. Nếu u là một phép chèn, R- là rỗng. Nếu u là một phép xóa, R+ là rỗng. Cuối cùng, nếu u là phép sửa đổi quan hệ R sau khi sửa đổi là bằng với R+
(R – R+).
Một khẳng định thu thập là một bộ ba (R, T, C) trong đó R là quan hệ, T là một kiểu cập nhật, C là một khẳng định biến thiên trên các quan hệ vi phân bao hàm trong một cập nhật của kiểu T. Khi một ràng buộc toàn vẹn I đƣợc định nghĩa, một tập hợp các khẳng định thu thập có thể đƣợc sinh ra cho các quan hệ đƣợc sử dụng bởi I. Mỗi khi một quan hệ đƣợc bao hàm trong I đƣợc cập nhật bởi một chƣơng trình u, các khẳng định thu thập phải đƣợc kiểm tra để bắt tuân theo I chỉ là khằng định đã đƣợc định nghĩa trên I đối với kiểu cập nhật u. Ƣu điểm thao tác của phƣơng pháp này là gấp đôi. Trƣớc tiên, số các khẳng định để bắt tuân theo là đƣợc làm tối thiểu bởi vì chỉ các khẳng định thu thập của kiểu u cần đƣợc kiểm tra. Thứ hai, chi phí bắt tuân theo một khẳng định thu thập là nhỏ hơn chi phí bắt tuân theo I bởi vì nói chung, các quan hệ vi phân là nhỏ hơn nhiều so với các quan hệ cơ sở.
Các khẳng định thu thập có thể nhận đƣợc bằng cách áp dụng các quy tắc chuyển đổi thành khẳng định nguyên thủy. Các quy tắc dựa trên một phân tích cú pháp của khẳng định và số lƣợng các giao hoán. Chúng cho phép thay thế các quan hệ vi phân cho quan hệ cơ sở. Bởi vì các khẳng định thu thập là đơn giản hơn các khẳng định nguyên thủy, quá trình tạo ra chúng đƣợc gọi là đơn giản hóa.
Xét biểu thức đƣợc sửa đổi của ràng buộc khóa ngoài. Các khẳng định thu thập liên kết với ràng buộc này là:
(ASG, INSERT, C1), (PROJ, DELETE, C2) và (PROJ, MODIFY,C3) Trong đó:
C1 là
NEW ASG+, j PROJ : NEW.PNO = j.PNO C2 là
g ASG, OLD PROJ : g.PNO OLD.PNO C3 là
g ASG, OLD PROJ-, NEW PROJ- ; g.PNO OLD.PNO OR OLD.PNO = NEW.PNO
Ƣu điểm do các khẳng định thu thập nhƣ vậy cung cấp là hiển nhiên. Ví dụ, một loại bỏ trên quan hệ ASG không nằm trong kiểm tra khẳng định nào.
Bây giờ chúng ta tổng kết thuật toán bắt tuân theo. Nhớ lại rằng một chƣơng trình cập nhật cập nhật tất cả các bộ giá trị của một quan hệ R thỏa mãn một điều kiện nào đó. Thuật toán hành động trong hai bƣớc: bƣớc thứ nhất tạo ra các quan hệ vi phân R+
và R- từ R. Bƣớc thứ hai đơn giản bao gồm việc trích rút các bộ giá trị của R+
và R- không thỏa mãn các khẳng định thu thập. Nếu không có bộ giá trị nào đƣợc rút ra, khẳng định là hợp lệ.
Ví dụ 1.15
Giả sử có một phép xóa trên PROJ. Sự bắt tuân theo (PROJ, DELETE, C2) bao gồm việc tạo ra lệnh sau đây:
Kết quả trích rút tất cả các bộ giá trị của PROJ-
mà ở đó ¬ (C2) Sau đó, nếu kết quả là rỗng, khẳng định đƣợc kiểm tra bởi cập nhật.
Chƣơng II
CƠ SỞ DỮ LIỆU TÍCH CỰC