Tài liệu Luận văn Nghiên cứu, xây dựng cơ sở dữ liệu tích cực: ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
NGÔ THỊ THANH HOÀ
NGHIÊN CỨU, XÂY DỰNG
CƠ SỞ DỮ LIỆU TÍCH CỰC
LUẬN VĂN THẠC SĨ
Hà Nội,
LỜI CAM ĐOAN
Tôi xin cam đoan: Luận văn “Nghiên cứu, xây dựng Cơ sở dữ liệu tích cực” là
công trình nghiên cứu của riêng tôi.
Các tài liệu, kết quả nêu trong luận văn là hoàn toàn trung thực, được trích dẫn
và phát triển từ các tài liệu, tạp chí, website….
Ngô Thị Thanh Hoà
1
LỜI CẢM ƠN
ời đầu tiên em xin chân thành cảm ơn thầy giáo TS.Nguyễn Tuệ đã cho
em nhiều ý kiến đóng góp quý báu, tận tình hướng dẫn và giúp đỡ em về
mặt kiến thức cũng như tài liệu để em có thể hoàn thành luận văn này.
Em xin gửi lời cảm ơn đến Ban Giám hiệu, các phòng ban, Khoa sau Đại học
Trường Đại học Công nghệ đã tạo điều kiện cho em trong suốt khoá học.
Em cũng xin bày tỏ lòng biết ơn sâu sắc đến các thầy giáo, cô giáo
Trường Đại học Công nghệ – Đại học Quốc Gia Hà Nội , các thầy, cô giáo đã
tham gia giảng dạy, hướng dẫn, chỉ bảo ...
79 trang |
Chia sẻ: haohao | Lượt xem: 1364 | Lượt tải: 0
Bạn đang xem trước 20 trang mẫu tài liệu Luận văn Nghiên cứu, xây dựng cơ sở dữ liệu tích cực, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
NGÔ THỊ THANH HOÀ
NGHIÊN CỨU, XÂY DỰNG
CƠ SỞ DỮ LIỆU TÍCH CỰC
LUẬN VĂN THẠC SĨ
Hà Nội,
LỜI CAM ĐOAN
Tôi xin cam đoan: Luận văn “Nghiên cứu, xây dựng Cơ sở dữ liệu tích cực” là
công trình nghiên cứu của riêng tôi.
Các tài liệu, kết quả nêu trong luận văn là hoàn toàn trung thực, được trích dẫn
và phát triển từ các tài liệu, tạp chí, website….
Ngô Thị Thanh Hoà
1
LỜI CẢM ƠN
ời đầu tiên em xin chân thành cảm ơn thầy giáo TS.Nguyễn Tuệ đã cho
em nhiều ý kiến đóng góp quý báu, tận tình hướng dẫn và giúp đỡ em về
mặt kiến thức cũng như tài liệu để em có thể hoàn thành luận văn này.
Em xin gửi lời cảm ơn đến Ban Giám hiệu, các phòng ban, Khoa sau Đại học
Trường Đại học Công nghệ đã tạo điều kiện cho em trong suốt khoá học.
Em cũng xin bày tỏ lòng biết ơn sâu sắc đến các thầy giáo, cô giáo
Trường Đại học Công nghệ – Đại học Quốc Gia Hà Nội , các thầy, cô giáo đã
tham gia giảng dạy, hướng dẫn, chỉ bảo cho em trong suốt hai năm học qua.
Và em xin gửi lời cảm ơn đến bạn bè, gia đình và các đồng nghiệp đã có
những động viên, khuyến khích và hỗ trợ cần thiết để em hoàn thành luận văn
này.
Hà nội, ngày 10 tháng 5 năm 2011
Ngô Thị Thanh Hoà
L
2
MỤC LỤC
LỜI CẢM ƠN......................................................................................................... ..1
MỤC LỤC ............................................................................................................... ..2
BẢNG KÝ HIỆU CÁC CHỮ VIẾT TẮT ............................................................... ..5
MỞ ĐẦU ................................................................................................................. ..6
Chương I ................................................................................................................. ..8
TỔNG QUAN VỀ CSDL QUAN HỆ VÀ CÁC RÀNG BUỘC TOÀN VẸN ..... 8
1.1. TỔNG QUAN VỀ CSDL QUAN HỆ .............................................................. 8
1.1.1. Các khái niệm CSDL quan hệ .................................................................. 8
1.1.2. Chuẩn hóa .............................................................................................. 11
1.1.2.1. Các cấu trúc phụ thuộc ..................................................................... 12
1.1.2.2. Các dạng chuẩn. ............................................................................... 15
1.1.3. Các quy tắc toàn vẹn............................................................................... 18
1.1.4. Các ngôn ngữ quan hệ dữ liệu ............................................................... 19
1.1.4.1. Đại số quan hệ .................................................................................. 20
1.1.4.2. Các tính toán quan hệ ....................................................................... 23
1.1.4.3. Tương tác với các ngôn ngữ lập trình ............................................... 26
1.1.5. Hệ Quản trị CSDL quan hệ .................................................................... 26
1.2. CÁC RÀNG BUỘC TOÀN VẸN TRÊN CSDL QUAN HỆ .......................... 29
1.2.1. Kiểm soát toàn vẹn ngữ nghĩa tập trung ................................................ 31
1.2.1.1. Khái niệm ràng buộc toàn vẹn .......................................................... 31
1.2.1.2. Các yếu tố của ràng buộc toàn vẹn..................................................... 32
1.2.1.3. Phân loại ràng buộc toàn vẹn ............................................................ 35
1.2.2. Bắt tuân theo ràng buộc toàn vẹn .......................................................... 39
Chương II ................................................................................................................. 43
CƠ SỞ DỮ LIỆU TÍCH CỰC ............................................................................... 43
3
2.1. CƠ SỞ DỮ LIỆU TÍCH CỰC ....................................................................... 43
2.1.1. Khái niệm cơ sở dữ liệu tích cực ............................................................ 43
2.1.2. Quy tắc ECA ........................................................................................... 43
2.1.2.1. Sự kiện (Event).................................................................................. 43
2.1.2.2. Điều kiện (Condition) ....................................................................... 47
2.1.2.3. Hành động (Active) ........................................................................... 48
2.2. MÔ HÌNH TỔNG QUÁT VÀ CÁC TRIGGER TRONG ORACLE ....... 49
2.2.1. Mô hình tổng quát của CSDL tích cực: ................................................ 49
2.2.2. Vấn đề thiết kế và cài đặt cho các cơ sở dữ liệu tích cực ...................... 55
2.2.3. Các ứng dụng tiềm năng đối với các cơ sở dữ liệu tích cực .................. 57
Chương III ............................................................................................................... 59
CÀI ĐẶT CÁC QUY TẮC ECA BẰNG NGÔN NGỮ SQL ................................ 59
3.1. GIỚI THIỆU TRIGGER TRONG SQL-SERVER........................................ 59
3.2. CSDL TRONG QUẢN LÝ BÁN HÀNG........................................................ 59
3.2.1. Danh mục Cart: ...................................................................................... 60
2.2.2. Danh mục CartStatus: ............................................................................ 60
2.2.3. Danh mục News: .................................................................................... 60
2.2.4. Danh mục Parent Product:..................................................................... 61
2.2.5. Danh mục Product: ................................................................................ 61
2.2.6. Danh mục ProductCart: ......................................................................... 61
2.2.7. Danh mục Role:...................................................................................... 62
2.2.8. Danh mục user: ...................................................................................... 62
3.3. QUY TẮC TẠO TRIGGER ........................................................................... 62
3.4. CÁC TRIGGER TRONG CSDL.................................................................... 63
3.4.1. Trigger ngăn chặn việc xóa database trên Server. ................................. 63
4
3.4.2. Trigger ngăn chặn insert vào bảng Product........................................... 64
3.4.3. Trigger ngăn chặn update (cập nhật) bảng Product. ............................. 66
3.4.4. Trigger ngăn chặn xóa dữ liệu trong bảng ............................................ 67
3.4.5. Trigger ngăn chặn tạo mới record trong bảng. ...................................... 68
3.4.6. Tạo mới trong bảng ( không vi phạm trigger của trigger 05)................. 69
3.4.7. Trigger ngăn chặn xóa bảng trong database.......................................... 71
3.4.8. Ngăn chặn xóa trigger trong CSDL ....................................................... 71
3.4.9. Không cho phép tạo mới bảng trong CSDL. .......................................... 72
3.4.10. Không cho phép tạo mới trigger trong CSDL. ................................. 73
KẾT LUẬN............................................................................................................. 75
TÀI LIỆU THAM KHẢO ........................................................................................ 76
5
BẢNG KÝ HIỆU CÁC CHỮ VIẾT TẮT
Stt Từ viết tắt Tiếng Anh Tiếng Việt
1 ABDS Active Database System Hệ thống cơ sở dữ liệu tích cực
2 CSDL Cơ sở dữ liệu
3 DBMS Database Management System Hệ quản trị cơ sở dữ liệu
4 ECA Event-Condition-Active Sự kiện-Điều kiện-Hành động
5 HQTCSDL Hệ quản trị cơ sở dữ liệu
6 WFF Well-formal formular Một công thức xây dựng tốt
6
MỞ ĐẦU
Theo truyền thống, các hệ thống cơ sở dữ liệu được xem như là các kho để
lưu trữ thông tin cần thiết của một ứng dụng và chúng được truy cập hoặc bởi
những người sử dụng chương trình hoặc các giao diện tương tác. Tuy nhiên, các
hệ thống cơ sở dữ liệu đang được sử dụng cho một phạm vi các lĩnh vực liên
quan đến việc xử lý các thông tin phức tạp, thậm chí số lượng lớn dữ liệu, hoặc
đòi hòi sự thực hiện chính xác cao, trong đó môi trường nhiều thành phần theo
quy ước chứng tỏ không được thỏa mãn. Điều này dẫn đến xu hướng chung
trong việc nghiên cứu cơ sở dữ liệu hướng chức năng được yêu cầu bởi một ứng
dụng được hỗ trợ trong cơ sở dữ liệu, sinh ra các hệ thống cơ sở dữ liệu với
nhiều khả năng tinh xảo để mô phỏng cả khía cạnh cấu trúc và hoạt động của
một ứng dụng. Trong số những lĩnh vực nhận được sự chú ý trong những năm
gần đây với cái nhìn làm nổi bật sự hoạt động dễ dàng là lập trình cơ sở dữ liệu,
các cơ sở dữ liệu tạm thời, các cơ sở dữ liệu không gian, các cơ sở dữ liệu đa
phương tiện (truyền thông), các cơ sở dữ liệu suy diễn và các cơ sở dữ liệu tích
cực. Trong luận văn này, tôi tập trung vào vấn đề cơ sở dữ liệu tích cực.
Hệ thống cơ sở dữ liệu tích cực (ADBS) hỗ trợ các cơ chế cho phép chúng
tự động phản ứng tới các sự kiện đang diễn ra bên trong hoặc bên ngoài chính hệ
thống cơ sở dữ liệu đó. Trong những năm gần đây, nỗ lực đáng kể được hướng
tới việc nâng cao hiểu biết các hệ thống đó, và có nhiều ứng dụng được đề xuất.
Sự tích cực ở mức độ cao này không mang lại sự phù hợp với phương pháp tiếp
cận để tích hợp các chức năng của hoạt động với các hệ thống cơ sở dữ liệu quy
ước, nhưng nó mang tới việc cải thiện tầm hiểu biết ngôn ngữ miêu tả cách thức
hành động tích cực, các mô hình thực hiện và các kiến trúc. Trong luận văn này
trình bày các tính chất cơ bản của hệ cơ sở dữ liệu tích cực, mô tả tập hợp các hệ
thống tiêu biểu trong một framework phổ biến, nghiên cứu tầm quan trọng của
việc thiết kế các công cụ để phát triển các ứng dụng tích cực.
Cơ sở dữ liệu tích cực hỗ trợ ứng dụng trên bằng cách di chuyển hành động
phản ứng lại từ ứng dụng tới hệ quản trị cơ sở dữ liệu (DBMS). Các cơ sở dữ
liệu tích cực theo cách đó có đủ khả năng giám sát và phản ứng lại những tình
7
huống riêng biệt có liên quan đến ứng dụng. Bản chất phản ứng lại là tập trung
và xử lý đúng cách đúng lúc.
Mục đích của luận văn:
- Tìm hiểu và xây dựng CSDL tích cực: cơ sở dữ liệu mà trong đó việc đảm
bảo các ràng buộc toàn vẹn được thực hiện một cách tự động thông qua
các quy tắc ECA.
- Cơ sở dữ liệu tích cực có ứng dụng tốt trong việc mở rộng các hệ thống cơ
sở dữ liệu, làm dễ dàng cho người sử dụng khai thác cơ sở dữ liệu.
Nội dung của luận văn được trình bày trong 3 chương:
Chương 1: Tổng quan về cơ sở dữ liệu quan hệ và các loại ràng buộc trên
CSDL quan hệ
Chương 2: Cơ sở lý thuyết của cơ sở dữ liệu tích cực, cụ thể là cấu trúc và việc
xây dựng các quy tắc ECA.
Chương 3: Cài đặt các quy tắc ECA bằng SQL.
8
Chương I
TỔNG QUAN VỀ CSDL QUAN HỆ VÀ CÁC RÀNG BUỘC TOÀN VẸN
1.1. TỔNG QUAN VỀ CSDL QUAN HỆ
Có nhiều lý do để chọn mô hình dữ liệu quan hệ như: Cơ sở toán học của
mô hình quan hệ là một ứng viên tốt cho xử lý lý thuyết.
Mô hình quan hệ có thể được đặc trưng bởi ít nhất 3 tính chất mạnh mẽ:
a. Cấu trúc dữ liệu của nó là đơn giản. Chúng là các quan hệ, các bảng hai
chiều mà các phần tử của chúng là các mục dữ liệu. Điều này cho phép
một mức độ độc lập cao đối với biểu diễn dữ liệu vật lý (tức là các tệp và
các chỉ mục)
b. Mô hình quan hệ cung cấp một cơ sở chắc chắn cho việc tương thích dữ
liệu. Việc thiết kế CSDL được giúp đỡ bằng quá trình chuẩn hóa loại bỏ
các bất thường của dữ liệu. Các trạng thái tương thích của CSDL cũng có
thể được định nghĩa một cách đồng nhất và được duy trì thông qua các
quy tắc toàn vẹn.
c. Mô hình CSDL cho phép thao tác quan hệ hướng tập hợp. Tính chất này
đã dẫn đến sự phát triển mạnh mẽ của các ngôn ngữ phi thủ tục hoặc dựa
trên lý thuyết tập hợp (đại số quan hệ) hoặc dựa trên logic (tính toán quan
hệ).
1.1.1. Các khái niệm CSDL quan hệ
Một CSDL là một tập hợp dữ liệu có cấu trúc liên quan đến một vài hiện
tượng của cuộc sống thực mà ta muốn mô hình hóa. Một CSDL quan hệ là
CSDL mà ở đó cấu trúc dữ liệu ở dạng bảng. Một cách hình thức, một quan hệ
được định nghĩa trên n tập hợp D1, D2, … , Dn (không nhất thiết phân biệt) là
một tập hợp các n-bộ sao cho d1 D1, d2 D2, …., dn Dn
Ví dụ 1.1
Xét CSDL mô hình hóa công ty cơ khí. Các thực thể được mô hình hóa là
nhân viên (EMP) và dự án (PROJ). Với mỗi nhân viên chúng ta lưu trữ mã số
nhân viên (ENO), tên (ENAME), danh hiệu trong công ty (TITLE), lương
(SAL), mã số dự án mà nhân viên đang làm việc (PNO), trách nhiệm trong dự
9
án (RESP) và khoảng thời gian làm việc (DUR). Một cách tương tự, với mỗi dự
án chúng ta lưu trữ mã số dự án (PNO), tên dự án (PNAME) và ngân sách của
dự án (BUDGET).
Các lược đồ quan hệ cho cơ sở dữ liệu này có thể được định nghĩa như sau:
EMP(ENO, ENAME, TITLE, SAL, PNO, DUR)
PROJ(PNO, PNAME, BUGGET)
Trong lược đồ quan hệ EMP có bảy thuộc tính ENO, ENAME, TITLE,
SAL, PNO, DUR. Các giá trị của ENO lấy từ miền của tất cả các mã số nhân
viên hợp lệ, gọi là D1. Các giá trị ENAME lấy từ miền giá tất cả các tên hợp lệ
D2, … Để ý rằng thuộc tính của mỗi quan hệ không được lấy giá trị từ miền
khác. Các thuộc tính khác nhau trong cùng một quan hệ trong một số quan hệ có
thể được định nghĩa trên cùng một miền.
Khóa (key) của một quan hệ là một tập con không rỗng bé nhất của các
thuộc tính của nó sao cho giá trị tạo nên khóa xác định một cách duy nhất mỗi
bộ của một quan hệ. Các thuộc tính tạo nên khóa được gọi là các thuộc tính chủ
yếu. Các tập hợp lớn hơn của một khóa thường được gọi là siêu khóa. Như vậy,
trong ví dụ trên, khóa của PROJ là PNO, khóa của EMP là (ENO, PNO). Mỗi
quan hệ có ít nhất là một khóa. Đôi khi một quan hệ có nhiều khả năng cho
khóa. Trong trường hợp như vậy, mỗi khả năng được xem là một khóa dự tuyển
và một trong các khóa dự tuyển được lựa chọn làm khóa chính. Số các thuộc
tính của quan hệ xác định cấp của nó, số các bộ giá trị của quan hệ xác định lực
lượng của nó.
Trong dạng bảng, CSDL ví dụ bao gồm hai bảng như được chỉ ra ở trong
hình 1.1. Các cột của bảng tương ứng với các thuộc tính của quan hệ. Nếu có
các thông tin được nhập vào các bảng thì chúng tương ứng với các bộ giá trị.
Bảng rỗng chỉ cấu trúc bảng, bởi vì thông tin bên trong một bảng biến đổi theo
thời gian, nhiều ví dụ có thể được tạo là từ một quan hệ. Từ nay trở đi, thuật ngữ
quan hệ dùng để chỉ một ví dụ của quan hệ. Trong hình 1.2 là các ví dụ của quan
hệ được định nghĩa ở hình 1.1.
10
ENO ENAME TITLE SAL PNO RESP DUR
PNO PNAME BUDGET
EMP
PROJ
Hình 1.1 Lược đồ CSDL
PROJ
EMP
Hình 1.2 Ví dụ về cơ sở dữ liệu
Một giá trị của thuộc tính có thể không được xác định. Việc thiếu tính xác
định có thể có các giải thích khác nhau, hay dùng nhất là không biết hoặc không
áp dụng được. Giá trị này thường được gọi là giá trị null. Cần phân biệt giá trị
null với giá trị 0 (zero). Giá trị 0 là giá trị được biết, giá trị null là giá trị không
PNO PNAME BUDGET
P1 Instrucmentation 150000
P2 Database Develop 135000
P3 CAD/CAM 250000
P4 maintenance 310000
ENO ENAME TITLE SAL PNO RESP DUR
E1 j.joe Elect.Eng 40000 P1 Manager 12
E2 M.Smith Analyst 34000 P1 Analyst 24
E2 M.Smith Analyst 34000 P2 Analyst 6
E3 A.Lee Mech.Eng. 27000 P3 Consultal 10
E3 A.Lee Mech.Eng 27000 P4 Engineer 48
E4 J.Miller Programmer 24000 P2 Programmer Null
E5 B.Casey Syst. Anal. 34000 P2 Manager 24
E6 L.Chu Elect.Eng. 40000 P4 Manager 48
E7 R.Davis Mech.Eng. 27000 P3 Engineer 36
E8 J.Jone Syst.Anal. 34000 P3 Manager 40
11
được biết. Việc hỗ trợ giá trị null là một tính chất quan trọng cần thiết để làm
việc với các truy vấn có thể.
1.1.2. Chuẩn hóa
“Chuẩn hóa là một quá trình thuận nghịch từng bước thay thế một tập hợp quan
hệ bằng các tập hợp tiếp theo, trong đó mỗi quan hệ có cấu trúc đơn giản hơn và
chính quy hơn”. Mục đích của chuẩn hóa là loại bỏ nhiều bất thường của một
quan hệ để nhận được quan hệ “tốt hơn”. Bốn vấn đề sau có thể tồn tại trong một
lược đồ quan hệ:
a. Bất thường lặp (repetition anormaly)
Một số thông tin có thể được lặp lại một cách không cần thiết. Ví dụ, xét
quan hệ EMP ở hình 2.2. ENAME, TITLE, SAL của một nhân viên được lặp với
mỗi dự án mà nhân viên này phục vụ trên đó. Điều này dẫn đến một sự lãng phí
bộ nhớ và trái với tinh thần của CSDL.
b. Bất thường cập nhật (update anormaly)
Như là hệ quả của việc lặp dữ liệu, việc thực hiện cập nhật có thể gây rắc rối
phiền hà. Ví dụ, lương của một nhân viên thay đổi, nhiều bộ giá trị phải được
cập nhật để phản ánh sự thay đổi này.
c. Bất thường chèn (Insertion anormaly)
Có thể không có khả năng thêm mới vào cơ sở dữ liệu. Ví dụ, khi một nhân
viên mới vào công ty chúng ta không thể thêm thông tin cá nhân (ENAME,
TITLE, SAL) vào quan hệ EMP nếu nhân viên đó chưa làm cho dự án nào. Đó
là vì khóa của EMP bao hàm thuộc tính PNO và giá trị null không phải là thành
phần của một khóa.
d. Bất thường loại bỏ (Deletion anormaly)
Đó là sự trái ngược của bất thường chèn. Nếu một nhân viên chỉ làm việc
trên một dự án và dự án đó đã kết thúc thì không thể loại bỏ thông tin dự án ra
khỏi EMP. Làm như vậy dẫn đến việc loại bỏ bộ giá trị duy nhất về nhân viên,
dẫn đến việc mất thông tin cá nhân mà chúng ta muốn lưu giữ.
Sự chuẩn hóa chuyển đổi các lược đồ quan hệ thành các lược đồ không có
những vấn đề này. Phương pháp phổ biến nhất để chuẩn hóa một lược đồ quan
12
hệ là phương pháp tách (decomposition), trong đó chúng ta bắt đầu với một quan
hệ đơn, gọi là quan hệ phổ quát (universal relation), quan hệ này chứa tất cả các
thuộc tính (và có thể bất thường) và làm giảm nó liên tiếp. Tại mỗi lần lặp, một
quan hệ được chia thành hai hoặc nhiều quan hệ ở dạng chuẩn cao hơn. Một
quan hệ được gọi là ở một dạng chuẩn nếu nó thỏa mãn các điều kiện liên kết
với dạng chuẩn đó. Đầu tiên Codd đã định nghĩa các dạng chuẩn thứ nhất (1NF),
thứ hai (2NF) và thứ ba (3NF). Boyce và Codd sau đó định nghĩa một phiên bản
sửa đổi của dạng chuẩn 3, phiên bản này thường được gọi là dạng chuẩn Boyce-
Codd (BCNF). Điều đó được tiếp tục bằng định nghĩa các dạng chuẩn thứ tư
(4NF, Fagin, 1977) và dạng chuẩn thứ năm (5NF, Fagin, 1979).
Có một mối liên hệ phân cấp giữa các dạng chuẩn này. Một quan hệ được
chuẩn hóa là ở 1NF. Một số quan hệ ở 1NF cũng ở 2NF, một số trong các quan
hệ đó là ở 3NF, … Các dạng chuẩn cao hơn có tính chất tốt hơn các dạng khác
về bốn bất thường được nêu ở trên.
Một trong các yêu cầu của quá trình chuẩn hóa là sự phân tách không mất
mát. Điều đó có nghĩa là sự thay thế một quan hệ bằng nhiều quan hệ khác sẽ
không dẫn đến việc mất thông tin. Nếu có thể nối các quan hệ được phân tách để
nhận lại được quan hệ ban đầu thì quá trình đó gọi là tách không mất mát.
Một cách trực quan, phép toán nối là phép toán lấy hai quan hệ và nối mỗi bộ
của quan hệ thứ hai vào những bộ nào của quan hệ thứ nhất thỏa mãn một điều
kiện được chỉ rõ. Ví dụ, điều kiện có thể là giá trị của một thuộc tính của quan
hệ thứ nhất phải bằng giá trị của một thuộc tính của quan hệ thứ hai.
Một đòi hỏi khác của quá trình chuẩn hóa là bảo toàn phụ thuộc. Một phép
tách được gọi là bảo toàn phụ thuộc nếu bao đóng của hợp của phụ thuộc trong
các quan hệ được tách là tương đương với bao đóng của quan hệ nguyên thủy
(theo một tập các quy tắc suy diễn).
1.1.2.1. Các cấu trúc phụ thuộc
Các dạng chuẩn dựa trên một số các cấu trúc phụ thuộc. BCNF và các dạng
chuẩn thấp hơn dựa trên phụ thuộc hàm. 4NF dựa trên phụ thuộc đa trị và 5NF
dựa trên phụ thuộc nối-chiếu.
13
Chúng ta sẽ định nghĩa phụ thuộc gồm:
a. Phụ thuộc hàm
Giả sử R là một quan hệ xác định trên tập thuộc tính A={A1, A2, …, An} và
giả sử X A và Y A. Nếu với mỗi giá trị của X trong R chỉ kết hợp được với
một giá trị duy nhất của Y thì ta nói rằng “X xác định hàm Y” hoặc “Y phụ
thuộc hàm vào X”. Ký hiệu là X→Y. Khóa của một quan hệ xác định hàm các
thuộc tính không khóa của cùng quan hệ.
Ví dụ 1.2
Trong quan hệ PROJ ở hình 1.2 phụ thuộc hàm có hiệu lực là
PNO → (PNAME, BUDGET) (1)
Trong quan hệ EMP chúng ta có:
(ENO, PNO) → (ENAME, TITLE, SAL, RES, DUR) (2)
Phụ thuộc hàm này không phải là phụ thuộc hàm duy nhất trong EMP. Nếu
mỗi nhân viên được cấp một mã số nhân viên duy nhất, chúng ta có thể viết
ENO → (ENAME, TITLE, SAL)
(ENO, PNO) → (RESP, DUR)
Cũng hợp lý khi nói rằng lương của một chức danh cho trước là cố định.
Điều đó cho sinh ra phụ thuộc hàm
TITLE → SAL
Để ý rằng một số các thuộc tính trên vế phải của phụ thuộc hàm thứ hai (2) là
phụ thuộc hàm vào một tập con của tập các thuộc tính ở vế phải của cùng phụ
thuộc hàm đó. Các thuộc tính như (ENAME, TITLE, SAL) được gọi là phụ
thuộc hàm bộ phận vào (ENO, PNO), các thuộc tính (RESP, DUR) được nói là
phụ thuộc hàm đầy đủ vào (ENO, PNO).
b. Phụ thuộc giá trị
Giả sử R là một quan hệ được định nghĩa trên tập các thuộc tính A={A1, A2,
…, An} và giả sử X → A, Y → A, Z → A. Nếu mỗi giá trị Z trong R chỉ có một
cặp giá trị (X, Y) và giá trị của Z chỉ phụ thuộc vào giá trị của X thì ta nói rằng
“X xác định đa trị Z” hoặc Z đa phụ thuộc vào X”. Kiểu phụ thuộc này gọi là
phụ thuộc đa trị (MVD) và được ký hiệu X →→Z
14
Một cách trực quan, một phụ thuộc hàm đa trị diễn đạt một tình huống trong
đó giá trị của một thuộc tính (hoặc một tập thuộc tính) xác định một tập hợp giá
trị của một thuộc tính (hoặc một tập thuộc tính) khác. Chú ý rằng mỗi phụ thuộc
hàm cũng là một phụ thuộc đa trị nhưng điều ngược lại là không đúng.
Ví dụ 1.3
Trở lại ví dụ. Giả sử rằng chúng ta muốn lưu trữ thông tin về một tập hợp các
nhân viên mà một tập hợp các dự án mà công ty thực hiện cũng như các văn
phòng nhánh mà ở đó các dự án này có thể được thực hiện. Điều đó có thể làm
bằng việc định nghĩa quan hệ
SKILL (ENO, PNO, PLACE)
Giả sử rằng mỗi nhân viên có thể làm việc trên mọi dự án, mỗi nhân viên sẵn
lòng làm việc tại bất kỳ văn phòng nhánh nào và mỗi dự án có thể được thực
hiện tại bất kỳ văn phòng nhánh nào. Một ví dụ quan hệ thỏa mãn các điều kiện
này được minh họa ở hình 2.3
SKILL
về MVDhinh
Hình 1.3 Ví dụ về MVD
ENO PNO PLACE
E1 P1 Toronto
E1 P1 New York
E1 P1 London
E1 P2 Toronto
E1 P2 New York
E1 P2 London
E2 P1 Toronto
E2 P1 New York
E2 P1 London
E2 P2 Toronto
E2 P2 New York
E2 P2 London
15
Để ý rằng không có phụ thuộc hàm nào trong quan hệ SKILL: quan hệ chỉ
bao gồm các thuộc tính khóa. Có hai phụ thuộc đa trị:
ENO →→ PNO và ENO →→ PLACE
c. Phụ thuộc nối-chiếu
Giả sử R là một quan hệ được định nghĩa trên tập hợp các thuộc tính A={A1,
A2, …, An} và X A, Y A, Z A. Khi đó nếu R là bằng nửa nối của X, Y,
Z thì (X, Y, Z) tạo nên một phụ thuộc nối-chiếu
Có một tập hợp các quy tắc suy diễn dựa trên một tập hợp các tiên đề - gọi là
các tiên đề Amstrong (1974) cho phép các thao tác đại số của các phụ thuộc
hàm. Chúng cho khả năng phát hiện phủ tối thiểu của tập phụ thuộc hàm là một
tập hợp phụ thuộc hàm tối thiểu mà từ đó có thể tạo ra tất cả các phụ thuộc hàm
khác. Cho trước một phủ tối thiểu các phụ thuộc hàm và một tập hợp các thuộc
tính, một thuật toán có thể được phát triển để tạo ra một lược đồ quan hệ ở các
dạng chuẩn cao hơn.
1.1.2.2. Các dạng chuẩn.
Dạng chuẩn thứ nhất (1NF) tuyên bố một cách đơn giản rằng các thuộc tính
của một quan hệ chỉ chứa các giá trị nguyên tử. Nói cách khác, các quan hệ phải
phẳng, không có các nhóm lặp. Các quan hệ EMP và PROJ trong hình 1.2 thỏa
mãn điều kiện này vì vậy cả hai là ở 1NF.
Các quan hệ ở 1NF vẫn còn cho phép các bất thường được đưa ra ở trên. Để
loại bỏ một số các bất thường này chúng ta phải được tách thành các quan hệ ở
các dạng chuẩn cao hơn. Chúng ta không quan tâm đặc biệt đến dạng chuẩn thứ
hai vì nó chỉ còn có tầm quan trọng lịch sử do có các thuật toán chuẩn hóa trực
tiếp một quan hệ 1NF thành dạng chuẩn thứ ba (3NF) hoặc cao hơn.
Một quan hệ là ở 3NF nếu với mỗi phụ thuộc hàm X → Y, trong đó Y là
không ở trong X, hoặc X là một siêu khóa của R, hoặc Y là một thuộc tính cơ
bản. Có các thuộc tính cung cấp một phân tách bảo toàn phụ thuộc và không mất
mát của một quan hệ 1NF thành quan hệ 3NF.
Ví dụ 1.4
16
Quan hệ PROJ trong ví dụ đang xét là ở 3NF nhưng quan hệ EMP thì không,
do phụ thuộc hàm TITLE → SAL. Phụ thuộc hàm này vi phạm 3NF vì TITLE
không phải là siêu khóa và SAL không phải là thuộc tính cơ bản.
Vấn đề với EMP là như sau: Nếu chúng ta muốn chèn vào một sự kiện rằng
một chức danh cho trước nhận một lương cụ thể thì không làm được trừ phi có ít
nhất là một nhân viên có chức danh ấy (các tranh luận tương tự có thể làm cho
các bất thường cập nhật và xóa). Vì vậy chúng ta phải tách EMP thành hai quan
hệ:
EMP (ENO, ENAME, TITLE, PNO, RESP, DUR)
PAY (TITLE, SAL)
Ta có thể thấy rằng PAY là ở 3NF nhưng EMP thì không bởi vì phụ thuộc
hàm ENO → (ENAME, TITLE), ENO không phải là siêu khóa và TITLE,
ENAME không phải là các thuộc tính cơ bản. Vì vậy, EMP cần được phân tích
tiếp thành
EMP (ENO, ENAME, TITLE)
ASG (ENO, PNO, RESP, DUR)
Cả hai ở 3NF.
Dạng chuẩn Boyce-Codd là một dạng mạnh hơn của 3NF. Các định nghĩa là
như nhau trừ phần cuối cùng. Để một quan hệ là BCNF, với mỗi phụ thuộc hàm
X → Y, X là một siêu khóa. Để ý rằng mệnh đề “hoặc Y là một thuộc tính cơ
sở” được loại bỏ khỏi định nghĩa. Dạng cuối cùng của EMP cũng như các quan
hệ PAY, PROJ, ASG là ở BCNF.
Có khả năng phân tách một quan hệ 1NF một cách trực tiếp thành một tập
hợp quan hệ ở BCNF. Các thuật toán này được đảm bảo sinh ra phép tách không
mất mát nhưng chúng không đảm bảo bảo toàn phụ thuộc.
Một quan hệ R là ở dạng chuẩn thứ tư (4NF) nếu với mỗi phụ thuộc đa trị
kiểu X →→ Y trong R, X cũng xác định hàm tất cả các thuộc tính của R. Như
vậy nếu một quan hệ là ở BCNF và mọi phụ thuộc đa trị cũng là phụ thuộc hàm
thì quan hệ là ở 4NF. Điều quan trọng là ở chỗ một quan hệ 4NF hoặc là không
chứa một phụ thuộc đa trị thực thụ (tức là mỗi phụ thuộc đa trị cũng là phụ thuộc
17
hàm) hoặc có đúng một phụ thuộc đa trị được trình bày trong các thuộc tính và
không có phụ thuộc nào khác.
Ví dụ 1.5
Để ý rằng các quan hệ EMP, PAY, PROJ, ASG là ở 4NF bởi vì không có phụ
thuộc đa trị nào định nghĩa trên chúng. Tuy nhiên quan hệ SKILL là không ở
4NF. Để thỏa mãn các đòi hỏi nó cần được phân tách thành hai quan hệ:
EP (ENO, PNO)
EL (ENO, PLACE)
Ta có thể để ý rằng trong tất cả các dạng chuẩn ở trên, sự phân tách là thành
hai quan hệ. Dạng chuẩn thứ năm (5NF) xử lý các tình huống mà ở đó các phân
tách n-đường (n>2) có thể cần thiết.
Một quan hệ là ở 5NF (còn được gọi là dạng chuẩn nối-chiếu PJNF) nếu mỗi
phụ thuộc nối được định nghĩa cho quan hệ là được bao hàm bởi các khóa dự
tuyển của R. Với mỗi phụ thuộc hàm nối được bao hàm bởi một khóa dự tuyển
của quan hệ, tập con (hoặc các phép chiếu) X, Y, Z phải được làm phù hợp với
khóa dự tuyển.
Ví dụ 1.6
Với quan hệ EMP chúng ta có thể định nghĩa phụ thuộc nối
*( (ENO, ENAME), (ENO, TITLE) )
Nó được bao hàm bởi khoá dự tuyển ENO (nó cũng đã trở thành khóa chính).
Dễ dàng kiểm tra rằng các quan hệ EMP, PAY, PROJ, ASG là ở 5NF. Như vậy,
các lược đồ mà chúng ta kết thúc sau phân tích là như sau:
EMP (ENO, ENAME, TITLE)
PAY (TITLE, SAL)
PROJ (PNO, PNAME, BUDGET)
ASG (ENO, PNO, RESP, DUR)
Tất cả các dạng chuẩn trình bày ở trên là không mất mát. Một kết quả quan
trọng là một quan hệ 5NF không thể tách thêm mà không bị mất thông tin
(Fagin, 1977). Chúng ta có CSDL:
18
EMP ASG
ENO ENAME TITLE
E1 J.Joe Elect.Eng.
E2 M.Smith Syst.Anal
E3 A.Lee Mech.Eng
E4 J.Miller Programmer
E5 B.Casey Syst.Anal
E6 L.Chu Elect.Eng.
E7 R.Davis Mech.Eng
E8 J.Jones Syst.Anal
Hình 1.4 Các quan hệ đã được chuẩn hóa
1.1.3. Các quy tắc toàn vẹn
Các quy tắc toàn vẹn là các ràng buộc xác định các trạng thái tương thích của
cơ sở dữ liệu. Các ràng buộc toàn vẹn có thể là cấu trúc hay hành vi. Các ràng
buộc cấu trúc là vốn có đối với mô hình dữ liệu theo nghĩa là chúng bắt giữ
thông tin trên các liên kết dữ liệu không thể được mô hình hóa một cách trực
tiếp. Các ràng buộc hành vi cho phép sự bắt giữ ngữ nghĩa của các ứng dụng.
Các sự phụ thuộc được định nghĩa trong phần trước là các ràng buộc hành vi.
Việc duy trì các ràng buộc toàn vẹn nói chung là đắt trong phạm vi tài nguyên
hệ thống. Một cách lý tưởng, chúng phải được kiểm soát tại mỗi cập nhật CSDL
bởi vì các cập nhật có thể dẫn đến các trạng thái CSDL không tương thích.
ENO PNO RESP DUR
E1 P1 Manager 12
E2 P1 Analyst 24
E2 P2 Analyst 6
E3 P3 Concultant 10
E3 P4 Engineer 48
E4 P2 Programmer 18
E5 P2 Manager 24
E6 P4 Manager 48
E7 P3 Engineer 36
E8 P3 Manager 40
PNO PNAME BUDGET
P1 Instrucmentation 150000
P2 Database Develop 135000
P3 CAD/CAM 250000
P4 maintemance 310000
TITLE SAL
Elect.Eng. 40000
Syst.Anal 34000
Mech.Eng 27000
Programmer 24000
PAY PROJ
19
Theo Codd (Codd, 1982), hai ràng buộc cấu trúc tối thiểu của mô hình quan
hệ là ràng buộc toàn vẹn thực thể và quy tắc toàn vẹn tham chiếu. Theo định
nghĩa, mỗi quan hệ có một khóa chính. Ràng buộc thực thể tuyên bố rằng mỗi
thuộc tính của khóa là xác định (non null). Trong ví dụ 1, thuộc tính PNO của
quan hệ PROJ và các thuộc tính (ENO, PNO) của quan hệ EMP không thể có
các giá trị không xác định. Ràng buộc này là cần thiết để áp buộc sự kiện các
khóa là duy nhất.
Ràng buộc tham chiếu (Date, 1983) là có lợi cho việc giữ các liên kết giữa
các đối tượng mà mô hình quan hệ không thể biểu diễn. Chúng ta sẽ sử dụng
toàn vẹn tham chiếu khi thảo luận về thiết kế cơ sở dữ liệu phân tán.
Ràng buộc toàn vẹn bao gồm hai quan hệ và áp buộc ràng buộc là một nhóm
thuộc tính trong một quan hệ là khóa của quan hệ kia. Trong ví dụ 1 có thể có
một ràng buộc tham chiếu giữa các quan hệ PROJ và EMP trên thuôc tính PNO.
Quy tắc này quy định rằng mỗi nhân viên thuộc về ít nhất là một dự án đang có.
Nói cách khác, tập hợp các giá trị của PNO trong quan hệ EMP là được bao hàm
trong quan hệ PROJ. Như vậy sẽ không có các nhân viên thuộc về các dự án
không có trong quan hệ PROJ.
1.1.4. Các ngôn ngữ quan hệ dữ liệu
Các ngôn ngữ thao tác dữ liệu được phát triển cho mô hình quan hệ (thường
được gọi là ngôn ngữ truy vấn) rơi vào hai nhóm cơ bản: ngôn ngữ quan hệ dựa
trên đại số và ngôn ngữ quan hệ dựa trên tính toán. Sự khác nhau giữa chúng là
dựa trên việc truy vấn của user được diễn đạt như thế nào.
Đại số quan hệ là ngôn ngữ thủ tục. Bằng cách sử dụng các phép toán bậc
cao, trong truy vấn người sử dụng phải chỉ rõ kết quả sẽ nhận được như thế nào.
Các tính toán quan hệ là phi thủ tục, trong truy vấn người sử dụng chỉ rõ các
quan hệ sẽ nhận được trong kết quả. Cả hai ngôn ngữ này đều được Codd (Codd,
1970) đề nghị, ông ta cũng chứng minh rằng chúng là tương đương theo nghĩa
sức mạnh diễn đạt (Codd, 1972).
Đại số quan hệ được sử dụng nhiều hơn các tính toán quan hệ trong nghiên
cứu của các vấn đề CSDL phân tán bởi vì nó ở mức thấp hơn và tương ứng trực
20
tiếp hơn với các chương trình được trao đổi trên một mạng. Điều này chủ yếu là
tính toán quan hệ có thể được chuyển đổi thành đại số quan hệ. Để cho đầy đủ,
ta trình bày cả hai.
1.1.4.1. Đại số quan hệ
Đại số quan hệ bao gồm một tập hợp các phép toán thao tác trên các quan hệ.
Nó có nguồn gốc từ lý thuyết tập hợp (các quan hệ tương ứng với các tập hợp).
Mỗi phép toán lấy một hoặc hai quan hệ làm toán hạng và tạo ra một quan hệ kết
quả. Kết quả đó có thể lại là toán hạng của phép toán khác. Các phép toán này
cho phép truy vấn và cập nhật cơ sở dữ liệu.
Các phép toán đại số
Có 5 phép toán đại số quan hệ và 5 phép toán khác có thể được định nghĩa
theo các phép toán này. Các phép toán cơ bản là phép chọn, phép chiếu, phép
hợp, phép trừ quan hệ và tích Đecac. Hai phép toán đầu là hai phép toán một
ngôi và ba phép toán sau là các phép toán hai ngôi. Các phép toán thêm vào có
thể được định nghĩa theo các phép toán cơ bản này là phép giao, nối θ, nối tự
nhiên, nửa nối và phép chia. Trên thực tế, đại số quan hệ được mở rộng với các
phép toán để nhóm hoặc sắp xếp các quan hệ và để thực hiện các hàm số học
hoặc hàm nhóm.
Các toán hạng của một số các phép toán hai ngôi phải tương thích hợp. Hai
quan hệ R và S là tương thích hợp khi và chỉ khi chúng cùng cấp và thuộc tính
thứ i của mỗi quan hệ là được định nghĩa trên cùng một miền. Dĩ nhiên, phần
thứ hai của định nghĩa là đúng khi và chỉ khi các thuộc tính của quan hệ được
xác định bằng các vị trí tương quan của chúng ở bên trong quan hệ chứ không
phải bằng tên của chúng. Nếu thứ tự tương quan của các thuộc tính là không
quan trọng thì cần phải thay phần thứ hai của định nghĩa bằng câu: các thuộc
tính tương ứng của hai quan hệ phải được định nghĩa trên cùng một miền.
Phép chọn
Phép chọn tạo ra một tập con ngang của một quan hệ cho trước. Tập hợp con
bao gồm tất cả các bộ thỏa mãn một công thức (điều kiện). Phép chọn từ một
quan hệ R được ký hiệu là:
21
σ F (R)
Phép chiếu
Phép chiếu tạo ra một tập hợp con dọc của một quan hệ. Quan hệ kết quả chỉ
chứa các thuộc tính của quan hệ nguyên thủy nào mà trên đó phép chiếu được
thực hiện. Như vậy, cấp của một quan hệ kết quả là nhỏ hơn hoặc bằng cấp của
quan hệ nguyên thủy.
Phép tính của quan hệ R trên các thuộc tính A, B được ký hiệu là:
A,B (R)
Để ý rằng kết quả của một phép chiếu có thể chứa các bộ giống nhau. Trong
trường hợp này, các bộ lặp lại có thể bị xóa khỏi quan hệ kết quả. Có thể chỉ rõ
phép chiếu có hoặc không có loại bỏ lặp
Phép hợp
Hợp của hai quan hệ R và S, ký hiệu R S, là tập hợp của tất cả các bộ trong
R, hoặc trong S, hoặc trong cả hai. Điều kiện là R và S phải tương thích hợp.
Cũng như trong trường hợp của phép chiếu, các bộ lặp cũng thường được loại
bỏ. Phép hợp có thể được sử dụng để chèn các bộ mới vào một quan hệ đang tồn
tại, trong đó các bộ mới này tạo nên một trong các quan hệ toán hạng.
Phép hiệu tập hợp
Hiệu tập hợp của hai quan hệ R và S, ký hiệu là R – S, là một tập hợp tất cả
các bộ ở trong R nhưng không ở trong S. Trong trường hợp này R và S cũng
phải tương thích hợp. Phép toán này không đối xứng, nghĩa là R – S S – R.
Phép toán này cho phép loại bỏ các bộ ra khỏi một quan hệ. Cùng với phép hợp
chúng ta có thể thực hiện các thay đổi các bộ bằng cách loại bỏ sau đó bằng các
phép chèn.
Tích Đề-các
Tích Đề-các của hai quan hệ R cấp k1 và S cấp k2 là một tập hợp của các
(k1+k2)-bộ, trong đó mỗi bộ kết quả là một kết nối của một bộ của R với mỗi bộ
của S, với tất cả các bộ của R và S.
Tích Đề-các của R và S được ký hiệu là R x S.
22
Có khả năng là hai quan hệ có thể có các thuộc tính trùng tên. Trong trường
hợp này các tên thuộc tính được bắt đầu bằng tên của quan hệ để duy trì tính duy
nhất của các tên thuộc tính bên trong một quan hệ.
Phép giao
Phép giao của hai quan hệ R và S, ký hiệu R S, bao gồm tập hợp tất cả các
bộ vừa ở trong R vừa ở trong S. Theo các phép toán cơ bản, nó có thể được biểu
diễn là
R S = R – (R – S).
Nối θ
Phép nối là một suy diễn của tích Đecac. Có nhiều dạng nối, tổng quát nhất là
nối θ, thường được gọi là nối. Phép nối θ của hai quan hệ R và S được ký hiệu là
R F S
Trong đó F là một công thức chỉ vị từ nối. Vị từ nối được chỉ ra tương ứng
như một vị từ chọn nhưng các số hạng có dạng R.A θ S.B, trong đó A và B là
các thuộc tính của R và S tương ứng.
Phép nối của hai quan hệ tương đương với việc thực hiện một phép chọn, sử
dụng vị từ nối như là công thức chọn trên tích Đecac của hai quan hệ toán hạng.
Như vậy
R F S = σ F(R x S)
Trong sự tương đương ở trên chúng ta cần chú ý rằng nếu F bao hàm cả hai
thuộc tính của quan hệ mà chúng là chung cho cả hai thì một phép chiếu là cần
thiết để đảm
Nối tự nhiên
Một nối tự nhiên là một nối bằng của hai quan hệ trên một thuộc tính được
chỉ ra, cụ thể hơn trên các thuộc tính có miền xác định như nhau. Có một sự
khác nhau là thông thường các thuộc tính mà trên nó phép nối tự nhiên được
thực hiện chỉ xuất hiện một làn trong kết quả. Một nối tự nhiên được thể hiện
như một phép nối không có công thức:
R A S
23
Trong đó A là thuộc tính chung của R và S. Chú ý rằng các thuộc tính nối
tự nhiên có thể có các tên khác nhau trong hai quan hệ. Trong trường hợp đó, cái
cần đòi hỏi là chúng có chung một miền giá trị. Trong trường hợp này phép nối
được ký hiệu là R A B S, trong đó A là thuộc tính nối của R, B là của S.
Phép nửa nối
Phép nửa nối của quan hệ R được xác định trên tập thuộc tính A và quan hệ
S được xác định trên tập thuộc tính B là tập con của các thuộc tính của R tham
gia vào phép nối của R và S. Nó được ký hiệu là:
R F S = A(R F S)
Ưu điểm của phép nửa nối là nó giảm số các bộ cần phải thực hiện để tạo
thành phép nối. Trong các hệ CSDL tập trung, điều đó là quan trọng bởi vì nó
thường dẫn đến việc sử dụng bộ nhớ tốt hơn, làm giảm các truy cập bộ nhớ phụ.
Điều đó còn quan trọng hơn trong CSDL phân tán vì nó thường làm giảm số dữ
liệu cần truyền giữa các trạm để thực hiện một truy vấn. Chú ý rằng phép nửa
nối là không đối xứng, nghĩa là R F S S F R
Phép chia
Phép chia của quan hệ R cấp r với quan hệ S cấp s (r > s và s 0) là một tập
các (r-s)-bộ t sao cho với mọi bộ u trong S, bộ tu trong R. Phép chia được ký
hiệu là R S và được biểu diễn qua các phép toán cơ bản như sau:
R S = A(R) – A(( A(R x S) – R)
Trong đó A là tập các thuộc tính của R không có trong S.
Các chương trình đại số quan hệ
Vì tất cả các phép toán lấy các quan hệ là dữ liệu vào (input) và tạo ra các
quan hệ như là dữ liệu ra (output), chúng ta có thể lồng các phép toán quan hệ
bằng cách sử dụng dấu ngoặc và biểu diễn các chương trình đại số quan hệ. Các
dấu ngoặc chỉ thứ tự của việc thực hiện.
1.1.4.2. Các tính toán quan hệ
Trong các quan hệ dựa trên tính toán quan hệ, thay vì chỉ rõ làm thế nào để
nhận được kết quả, người ta chỉ ra kết quả là gì bằng cách biểu diễn mối liên kết
24
được đề nghị để đảm nhận kết quả. Các ngôn ngữ tính toán quan hệ rơi vào hai
nhóm: tính toán quan hệ bộ và tính toán quan hệ miền. Sự khác nhau của hai
nhóm là theo thuật ngữ của biến nguyên thủy được sử dụng trong việc diễn đạt
truy vấn.
Các ngôn ngữ tính toán quan hệ có một cơ sở lý thuyết vững chắc bởi vì
chúng dựa trên logic vị từ bậc nhất. Ngữ nghĩa được cho trước đối với các công
thức bằng cách thể hiện chúng như là các khẳng định trên CSDL. Một CSDL
quan hệ có thể được xem như một tập hợp các bộ hoặc một tập hợp các miền.
Tính toán quan hệ bộ thể hiện một biến trong một công thức như là một bộ của
quan hệ trong khi đó tính toán quan hệ miền thể hiện một biến như giá trị của
một miền.
Các tính toán quan hệ bộ (tuple relational calculus)
Biến nguyên thủy được sử dụng trong các tính toán quan hệ là một biến bộ,
nó chỉ rõ một bộ của quan hệ. Nói cách khác, nó biến thiên trên các bộ của quan
hệ. Các tính toán bộ là các tính toán quan hệ ban đầu được Codd phát triển
(Codd-1970)
Trong tính toán quan hệ bộ, các truy vấn được chỉ ra dưới dạng:
{ t | F(t) }
Trong đó: t là một biến bộ, F là một công thức xây dựng tốt (wff). Các công
thức nguyên tử thuộc hai dạng:
a. Biểu thức thành viên của bộ: nếu t là một biến bộ biến thiên trên các bộ
của quan hệ R thì biểu thức “bộ t thuộc quan hệ R” là một công thức
nguyên tử và được diễn đạt là R.t hoặc R(t)
b. Điều kiện. Các điều kiện được định nghĩa như sau:
(a). s[A] θ t[B], trong đó s và t là các biến bộ, A và B là các thành phần
của s và t tương ứng, θ là một trong các so sánh số học , =, , .
Điều kiện này chỉ rõ rằng thành phần A của s đứng trong quan hệ θ đối
với thành phần B của t. Ví dụ, s[SAL] > t[SAL]
(b). s[A] θ c, trong đó s, A và θ được định nghĩa như trên và c là một
hằng. Ví dụ, s[NAME] = “Smith”
25
Để ý rằng A được định nghĩa như một thành phần của biến bộ s. Bởi vì biến
thiên của s là một quan hệ cụ thể, chẳng hạn S nó bị bắt buộc là thành phần A
của s tương ứng với thuộc tính A của s
Có nhiều ngôn ngữ dựa trên tính toán bộ, ngôn ngữ phổ biến nhất là SQL.
SQL bây giờ là một chuẩn quốc tế với các phiên bản công bố vào năm 1986
(SQL 1), 1989 (sửa đổi SQL 1) và 1992 (SQL 2). Một phiên bản mới bao gồm
các mở rộng ngôn ngữ hướng đối tượng đang được công bố từng phần từ 1998.
SQL cung cấp một cách tiếp cận không đổi đến thao tác dữ liệu (trích rút, cập
nhật), định nghĩa dữ liệu (thao tác lược đồ) và kiểm soát (quyền, tính toàn vẹn,
…)
Các truy vấn trong SQL có dạng:
Ví dụ 1.7: Truy vấn trích rút
SELECT EMP, ENAME
FROM EMP, ASG, PROJ
WHERE EMP.ENO = ASG.ENO
AND ASG.PNO = PROJ.PNO
AND PROJ.PNAME = “CAD/CAM”
Ví dụ 1.8: Truy vấn cập nhật
UPDATE PAY
SET SAL = 25000
WHERE P.TITLE = “Programmer”;
Các tính toán quan hệ trên miền
Sự khác nhau cơ bản giữa ngôn ngữ quan hệ bộ và ngôn ngữ quan hệ miền là
việc sử dụng biến miền trong ngôn ngữ quan hệ miền. Một biến miền biến thiên
trên các giá trị trong một miền và chỉ rõ một thành phần của một bộ. Nói cách
khác, miền biến thiên của một biến miền bao gồm các miền mà trên đó quan hệ
được định nghĩa. Các wff được thể hiện theo hoàn cảnh đó. Các truy vấn được
chỉ ra dưới dạng sau đây:
x1, x2, …, xn | F(x1, x2,…, xn)
Trong đó: F là một wff và x1, x2, …, xn là các biến tự do
26
Thành công của ngôn ngữ tính toán quan hệ miền chủ yếu là ngôn ngữ QBE
(Zloof 1977), đó là một ứng dụng hiển thị của tính toán miền. Các truy vấn trích
rút và cập nhật tương ứng với các truy vấn SQL ở trên được viết trong QBE như
sau:
EMP ENO ENAME TITLE
E2 P.
ASG ENO PNO RESP DUR
E2 P3
PROJ PNO PNAME BUDGET
P3 CAD/CAM
Trong đó P. có nghĩa là Print
Hình 1.5 Truy vấn trích rút trong QBE
Trong đó U. có nghĩa là Update
Hình 1.6 Truy vấn cập nhật trong QBE
1.1.4.3. Tương tác với các ngôn ngữ lập trình
Các ngôn ngữ dữ liệu quan hệ là không đủ để viết các chương trình ứng
dụng phức tạp. Vì vậy việc tương tác một ngôn ngữ dữ liệu quan hệ với một
ngôn ngữ lập trình mà trong đó ứng dụng được viết là điều cần thiết. Có hai cách
tiếp cận chính trong việc cung cấp dịch vụ này: buộc chặt (tighly coupled) và
buộc lỏng (loosely couple). Phương pháp tighly couple bao gồm việc mở rộng
ngôn ngữ lập trình nào đấy với các lệnh thao tác dữ liệu. Ví dụ ngôn ngữ thế hệ
4 (4GL-Martin 1985). Phương pháp loosly couple bao gồm việc tích hợp ngôn
ngữ dữ liệu với một ngôn ngữ lập trình bằng cách sử dụng các lời gọi CSDL, ví
dụ embedded SQL.
1.1.5. Hệ Quản trị CSDL quan hệ
PAY TITLE SAL
Programmer U.250000
27
Hệ QTCSDL là một thành phần phần mềm hỗ trợ mô hình quan hệ và ngôn
ngữ quan hệ. Một hệ QTCSDL là một chương trình reentrant được phân chia bởi
nhiều thực thể hoạt động được gọi là các giao tác (transaction), chạy các chương
trình CSDL. Khi chạy trên một máy tính vạn năng, hệ QTCSDL được tương tác
với hai thành phần khác: hệ thống con truyền thông và hệ điều hành.
Kiến trúc chung của một hệ QTCSDL (tập trung) được mô tả như ở hình 1.7
Hình 1.7 Kiến trúc chung của HQTCSDL tập trung
Hệ thống con truyền thông cho phép tương tác HQTCSDL với các hệ thống
con khác để truyền thông tin với các ứng dụng. Ví dụ, monitor đầu cuối cần
truyền thông với HQTCSDL để chạy các giao tác tương tác. Hệ điều hành cung
cấp sự tương tác giữa HQTCSDL với các tài nguyên của máy tính (bộ xử lý, bộ
nhớ, chương trình điều khiển đĩa,…)
Các chức năng của một HQTCSDL thực hiện có thể được xếp tầng như hình
1.8, trong đó các mũi tên chỉ hướng của CSDL và luồng kiểm soát. Lấy cách
tiếp cận trên xuống, các tầng là giao diện, kiểm tra, dịch, thực hiện, truy cập dữ
liệu và quản trị tương thích.
Hệ thống con truyền thông
Hệ QTCSDL
Hệ điều hành
Chương trình 1 Chương trình n
CSDL
28
Tầng giao diện quản trị giao diện đối với các ứng dụng. Có thể có nhiều giao
diện như là SQL nhúng trong C hay QBE. Các chương trình ứng dụng CSDL
được thực hiện trên các khung nhìn ngoài của CSDL. Với một ứng dụng, một
khung nhìn là có lợi, biểu diễn sự cảm nhận cụ thể của nó với CSDL (được
nhiều ứng dụng chia sẻ).
Một khung nhìn quan hệ là một quan hệ ảo suy từ các quan hệ cơ sở bằng
việc áp dụng các phép toán đại số quan hệ. Quản trị khung nhìn bao gồm việc
dịch các truy vấn của user từ dữ liệu bên ngoài thành dữ liệu quan niệm (các
quan hệ cơ sở). Nếu truy vấn của user được diễn đạt trong tính toán quan hệ,
truy vẫn áp dụng cho dữ liệu vẫn còn cùng một dạng.
Tầng kiểm tra (control layer) kiểm tra truy vấn bằng cách thêm vào các vị từ
toàn vẹn ngữ nghĩa và vị từ quyền. Các ràng buộc toàn vẹn ngữ nghĩa và các
quyền được chỉ rõ trong tính toán quan hệ. Dữ liệu ra của tầng này là một truy
vấn được làm giàu trong tính toán quan hệ.
Tầng xử lý truy vấn (query processing layer) ánh xạ truy vấn thành một dãy
tối ưu mức thấp hơn. Tầng này liên quan với thao tác. Nó phân tích truy vấn
thành một cây phép toán quan hệ và cố gắng tìm thứ tự “tối ưu” của các phép
toán. Kết quả được lưu trữ trong phương án thực hiện. Dữ liệu ra của tầng này là
một truy vấn được diễn đạt trong đại số quan hệ (hoặc trong mã mức thấp hơn).
Tầng thực hiện (execution layer) điều khiền việc thực hiện phương án truy
cập, bao gồm cả quản lý giao tác (commit, restart) làm đồng bộ hóa các phép
toán quan hệ. Nó thông dịch các phép toán quan hệ bằng cách gọi tầng truy cập
dữ liệu thông qua các truy vấn trích rút và cập nhật.
Tầng truy cập dữ liệu (data access layer) quản trị các cấu trúc dữ liệu thể
hiện các quan hệ (files, indices). Nó cũng quản lý các buffer bằng việc lưu trữ
các dữ liệu được truy cập đến các đĩa để nhận hoặc ghi dữ liệu.
Cuối cùng, tầng tương thích (consistency layer) quản lý các kiểm soát đồng
thời và ghi nhật ký đối với các truy vấn cập nhật. Tầng này cho phép các giao
tác, hệ thống, và các phương tiện khôi phục sau hư hỏng.
29
Relational calculus
Relational calculus
Relational algebra
Retrieval/update
Retrieval/update
Relational calculus
Interface
Control
Compilation
Execution
Data access
Consistency
Hình 1.8 Các tầng của HQTCSDL quan hệ
1.2. CÁC RÀNG BUỘC TOÀN VẸN TRÊN CSDL QUAN HỆ
Một vấn đề quan trọng và khó khăn khác đối với hệ CSDL là làm thế nào
để đảm bảo tính tương thích cơ sở dữ liệu. Một trạng thái cơ sở dữ liệu được nói
là tương thích nếu cơ sở dữ liệu thỏa mãn một tập hợp các ràng buộc gọi là các
ràng buộc toàn vẹn ngữ nghĩa. Việc duy trì một cơ sở dữ liệu tương thích đòi hỏi
User interface
View manegerment
Semantic Intergrity Control
Authorization Checking
Query Decomposition and Optimisation
Access Plan Management
Access Plan Execution Control
Algebra Operation Execution
Buffer management
Access method
Concurrency Control
Logging
DATABASE
result
30
nhiều cơ cấu như là kiểm soát đồng thời, tính tin cậy, sự bảo vệ, kiểm soát toàn
vẹn ngữ nghĩa. Kiểm soát toàn vẹn ngữ nghĩa đảm bảo tính tương thích của cơ
sở dữ liệu bằng cách chối bỏ các chương trình cập nhật dẫn đến trạng thái cơ sở
dữ liệu không tương thích hoặc là bằng cách kích hoạt các hành động cụ thể trên
trạng thái CSDL, chúng đền bù đối với ảnh hưởng của các chương trình cập
nhật. Nghĩa là cơ sở dữ liệu được cập nhật phải thỏa mãn một tập hợp các ràng
buộc toàn vẹn.
Nói chung, các ràng buộc toàn vẹn ngữ nghĩa là các quy tắc diễn đạt các
hiểu biết về các tính chất của ứng dụng. Chúng định nghĩa các tính chất ứng
dụng tĩnh hoặc động mà các đối tượng hoặc các khái niệm thao tác của một mô
hình dữ liệu không thể bắt được một cách trực tiếp. Khái niệm của một quy tắc
toàn vẹn như vậy được liên kết mạnh mẽ với quy tắc của mô hình dữ liệu theo
nghĩa là các quy tắc này có thể bắt giữ được thông tin ngữ nghĩa về ứng dụng
nhiều hơn.
Có hai kiểu ràng buộc toàn vẹn có thể được phân biệt: các ràng buộc cấu
trúc và các ràng buộc ứng xử. Các ràng buộc cấu trúc diễn đạt các tính chất ngữ
nghĩa có sẵn đối với mô hình. Ví dụ về các ràng buộc như vậy là ràng buộc khóa
duy nhất trong mô hình mạng. Về phía khác, các ràng buộc ứng xử điều chỉnh
các ứng xử của ứng dụng. Như vậy nó là chủ yếu trong quá trình thiết kế cơ sở
dữ liệu. Chúng có thể biểu thị các liên kết giữa các đối tượng như là đưa vào sự
phụ thuộc trong mô hình quan hệ hoặc mô tả các cấu trúc và tính chất của đối
tượng. Việc tăng sự đa dạng của các ứng dụng cơ sở dữ liệu và sự phát triển mới
đây của các công cụ giúp đỡ thiết kế cơ sở dữ liệu kêu gọi đối với các ràng buộc
toàn vẹn mạnh mẽ có thể làm giàu mô hình dữ liệu.
Kiểm soát toàn vẹn đã xuất hiện với xử lý dữ liệu và đã tiến hóa từ các
phương pháp thủ tục (trong đó các kiểm soát được nhúng vào trong các chương
trình ứng dụng) đến các phương pháp mô tả. Các phương pháp mô tả đã nổi lên
với mô hình quan hệ để làm giảm nhẹ vấn đề độc lập dữ liệu/chương trình, dư
thừa mã và sự thực hiện nghèo nàn của các phương pháp thủ tục. Tư tưởng là
diễn đạt các ràng buộc toàn vẹn bằng cách sử dụng các khẳng định của tính toán
31
vị từ. Một tập hợp các khẳng định toàn vẹn ngữ nghĩa như vậy định nghĩa sự
tương thích cơ sở dữ liệu. Phương pháp này cho phép người ta mô tả và sửa đổi
các khẳng định toàn vẹn phức tạp một cách dễ dàng.
Vấn đề chính trong việc hỗ trợ việc kiểm soát toàn vẹn ngữ nghĩa tự động
là chi phí của việc kiểm tra các khẳng định có thể quá cao. Việc áp đặt các
khẳng định toàn vẹn là tốn kém nói chung nó đòi hỏi truy cập đến một lượng dữ
liệu lớn không bao hàm trong các cập nhật cơ sở dữ liệu. Vấn đề sẽ khó khăn
hơn khi các khẳng định được định nghĩa trên một cơ sở dữ liệu phân tán.
Có nhiều cách giải quyết đã được nghiên cứu để thiết kế một hệ thống toàn
vẹn con bằng cách tổ hợp các chiến lược tối ưu. Mục đích của chúng là (1) hạn
chế số các khẳng định cần được áp buộc, (2) làm giảm số các truy cập dữ liệu để
áp buộc một khẳng định cho trước trong sự có mặt của một chương trình cập
nhật, (3) định nghĩa một chiến lược ngăn ngừa phát hiện các không tương thích
theo cách tránh các cập nhật không thực hiện, (4) thực hiện càng nhiều càng tốt
các kiểm soát toàn vẹn tại thời điểm dịch. Một số ít các cách giải quyết này đã
được cài đặt nhưng chúng chịu một sự mất tổng quát. Hoặc là chúng được hạn
chế đến một tập hợp nhỏ các khẳng định (các ràng buộc tổng quát hơn sẽ có một
chi phí kiểm tra quá cao).
Trong phần này trình bày các giải pháp kiểm tra toàn vẹn ngữ nghĩa trong
các hệ thống tập trung. Bởi vì ngữ cảnh của chúng ta mô hình quan hệ, chúng ta
chỉ xem xét các phương pháp mô tả. Nội dung của phần này phần lớn dựa trên
công trình kiểm soát toàn vẹn ngữ nghĩa đối với các hệ thống tập trung và đối
với các hệ thống phân tán (của các tác giả Simon và Valduriez)
1.2.1. Kiểm soát toàn vẹn ngữ nghĩa tập trung
Một hệ thống con toàn vẹn ngữ nghĩa có hai thành phần chính: một ngôn
ngữ để diễn đạt và thao tác các khẳng định và một cơ cấu tăng cường thực hiện
các hành động cụ thể để bắt tuân theo toàn vẹn cơ sở dữ liệu tại các update.
1.2.1.1. Khái niệm ràng buộc toàn vẹn
Trong mỗi CSDL luôn tồn tại nhiều mối liên hệ giữa các thuộc tính, giữa các
bộ; sự liên hệ này có thể xảy ra trong cùng một quan hệ hoặc trong các quan hệ
32
của một lược đồ CSDL. Các mối liên hệ này là những điều kiện bất biến mà tất
cả các bộ của những quan hệ có liên quan trong CSDL đều phải thoả mãn ở mọi
thời điểm. Những điều kiện bất biến đó được gọi là ràng buộc toàn vẹn ... Trong
thực tế ràng buộc toàn vẹn là các quy tắc quản lý được áp đặt trên các đối tượng
của thế giới thực. Chẳng hạn mỗi sinh viên phải có một mã sinh viên duy nhất,
hai thí sinh dự thi vào một trường phải có số báo danh khác nhau, một sinh viên
dự thi một môn học không quá 3 lần,…
Nhiệm vụ của người phân tích thiết kế là phải phát hiện càng đầy đủ các ràng
buộc toàn vẹn càng tốt và mô tả chúng một cách chính xác trong hồ sơ phân tích
thiết kế - đó là một việc làm rất quan trọng. Ràng buộc toàn vẹn được xem như
là một công cụ để diễn đạt ngữ nghĩa của CSDL. Một CSDL được thiết kế cồng
kềnh nhưng nó thể hiện được đầy đủ ngữ nghĩa của thực tế vẫn có giá trị cao
hơn rất nhiều so với một cách thiết kế gọn nhẹ nhưng nghèo nàn về ngữ nghĩa vì
thiếu các ràng buộc toàn vẹn của CSDL.
Công việc kiểm tra ràng buộc toàn vẹn thường được tiến hành vào thời điểm
cập nhật dữ liệu (thêm, sửa, xoá). Những ràng buộc toàn vẹn phát sinh phải cần
được ghi nhận và xử lý một cách tường minh (thường là bởi một hàm chuẩn
hoặc một đoạn chương trình).
Ràng buộc toàn vẹn và kiểm tra sự vi phạm ràng buộc toàn vẹn là hai trong
số những vấn đề quan trọng trong quá trình phân tích thiết kế cơ sở dữ liệu, nếu
không quan tâm đúng mức đến những vấn đề trên, thì có thể dẫn đến những hậu
quả nghiêm trọng về tính an toàn và toàn vẹn dữ liệu, đặc biệt là đối với những
cơ sở dữ liệu lớn.
1.2.1.2. Các yếu tố của ràng buộc toàn vẹn
Mỗi ràng buộc toàn vẹn có bốn yếu tố: điều kiện, bối cảnh, bảng tầm ảnh hưởng
và hành động phải cần thực hiện khi phát hiện có ràng buộc toàn vẹn bị vi phạm:
- Điều kiện:
Điều kiện của ràng buộc toàn vẹn là sự mô tả, và biểu diễn hình thức nội
dung của nó. Điều kiện của một ràng buộc toàn vẹn R có thể được biểu diễn
bằng ngôn ngữ tự nhiên, ngôn ngữ đại số quan hệ, ngôn ngữ mã giả, ngôn ngữ
33
truy vấn SQL,… ngoài ra điều kiện của ràng buộc toàn vẹn cũng có thể được
biểu diễn bằng phụ thuộc hàm.
Ví dụ: Sau đây là một số ràng buộc toàn vẹn trên lược đồ CSDL quản lý sinh
viên.
Mỗi lớp học phải có một mã số duy nhất để phân biệt với các lớp học khác trong
trường.
Mỗi lớp học phải thuộc về một khoa của trường.
Mỗi sinh viên có một mã số sinh viên duy nhất, không trùng với bất cứ sinh viên
nào trong trường.
Mỗi học viên phải đăng ký vào một lớp học trong trường. Mỗi học viên chỉ được
thi tối đa 3 lần cho mỗi môn học.
Tổng số học viên của một lớp phải lớn hơn hoặc bằng số lượng đếm được của
một lớp tại một thời điểm nào đó.
- Bối cảnh:
Bối cảnh của ràng buộc toàn vẹn là những quan hệ mà ràng buộc đó có hiệu
lực hay nói một cách khác, đó là những quan hệ cần phải được kiểm tra khi tiến
hành cập nhật dữ liệu. Bối cảnh của một ràng buộc toàn vẹn có thể là một hoặc
nhiều quan hệ.
Chẳng hạn với ràng buộc toàn vẹn R trên thì bối cảnh của nó là quan hệ
Sinhvien.
- Bảng tầm ảnh hưởng:
Trong quá trình phân tích thiết kế một CSDL, người phân tích cần lập bảng
tầm ảnh hưởng cho một ràng buộc toàn vẹn nhằm xác định thời điểm cần phải
tiến hành kiểm tra khi tiến hành cập nhật dữ liệu.
Thời điểm cần phải kiểm tra ràng buộc toàn vẹn chính là thời điểm cập nhật dữ
liệu.
Một bảng tầm ảnh hưởng của một ràng buộc toàn vẹn có dạng sau:
Tên quan hệ Thêm (T) Sửa (S) Xoá (X)
r1 +
34
r2 -
r3 -(*)
…
rn
Bảng này chứa toàn các ký hiệu +, – hoặc -(*).
Chẳng hạn + tại (dòng r1, cột Thêm) thì có nghĩa là khi thêm một bộ vào quan hệ
r1 thì ràng buộc toàn vẹn bị vi phạm.
Dấu - Tại ô (dòng r2, cột sửa) thì có nghĩa là khi sửa một bộ trên quan hệ r2 thì
ràng buộc toàn vẹn không bị vi phạm.
Quy ước:
- Không được sửa thuộc tính khoá.
- Nếu không bị vi phạm do không được phép sửa đổi thì ký hiệu là - (*).
- Hành động cần phải có khi phát hiện có ràng buộc toàn vẹn bị vi phạm:
Khi một ràng buộc toàn vẹn bị vi phạm, cần có những hành động thích hợp.
Thông thường có 2 giải pháp:
Thứ nhất: Đưa ra thông báo và yêu cầu sửa chữa dữ liệu của các thuộc
tính cho phù hợp với quy tắc đảm bảo tính nhất quán dữ liệu. Thông báo
phải đầy đủ và phải thân thiện với người sử dụng. Giải pháp này là phù
hợp cho việc xử lý thời gian thực.
Thứ hai: Từ chối thao tác cập nhật. Giải pháp này là phù hợp đối với việc
xử lý theo lô. Việc từ chối cũng phải được lưu lại bằng những thông báo
đầy đủ, rõ ràng vì sao thao tác bị từ chối và cần phải sữa lại những dữ liệu
nào?
Khóa nội, khoá ngoại, giá trị NOT NULL là những ràng buộc toàn vẹn miền
giá trị của các thuộc tính. Những ràng buộc toàn vẹn này là những ràng buộc
toàn vẹn đơn giản trong CSDL.
Các hệ quản trị cơ sở dữ liệu thường có các cơ chế tự động kiểm tra các ràng
buộc toàn vẹn về miền giá trị của khoa nội, khoá ngoại, giá trị NOT NULL.
Việc kiểm tra ràng buộc toàn vẹn có thể tiến hành vào những thời điểm sau đây.
35
Thứ nhất: Kiểm tra ngay sau khi thực hiện một thao tác cặp nhật CSDL.
Thao tác cặp nhật chỉ được xem là hợp lệ nếu như nó không vi phạm bất cứ
một ràng buộc toàn vẹn nào, nghĩa là nó không làm mất tính toàn vẹn của
CSDL Nếu vi phạm ràng buộc toàn vẹn, thao tác cặp nhật bị coi là không
hợp lệ và sẽ bị hệ thống huỷ bỏ (hoặc có một xử lý thích hợp nào đó).
Thứ hai: Kiểm tra định kỳ hay đột xuất, nghĩa là việc kiểm tra ràng buộc
toàn vẹn được tiến hành độc lập với thao tác cặp nhật dữ liệu. Đối với
những trường hợp vi phạm ràng buộc toàn vẹn, hệ thống có những xử lý
ngầm định hoặc yêu cầu người sử dụng xử lý những sai sót một cách tường
minh.
1.2.1.3. Phân loại ràng buộc toàn vẹn
Trong quá trình phân tích thiết kế CSDL, người phân tích phải phát hiện tất
cả các ràng buộc toàn vẹn tiềm ẩn trong CSDL đó. Việc phân loại các ràng buộc
toàn vẹn là rất có ích, nó nhằm giúp cho người phân tích có được một định
hướng để phát hiện các ràng buộc toàn vẹn, tránh bỏ sót. Các ràng buộc toàn vẹn
có thể được chia làm hai loại chính như sau:
- Thứ nhất: Ràng buộc toàn vẹn có phạm vi là một quan hệ bao gồm:
Ràng buộc toàn vẹn miền giá trị, ràng buộc toàn vẹn liên thuộc tính, ràng
buộc toàn vẹn liên bộ.
Thứ hai: Ràng buộc toàn vẹn có phạm vi là nhiều quan hệ bao gồm: Ràng
buộc toàn vẹn phụ thuộc tồn tại, ràng buộc toàn vẹn liên bộ - liên quan hệ,
ràng buộc toàn vẹn liên thuộc tính - liên quan hệ.
Để minh hoạ, chúng ta xét ví dụ sau đây:
Ví dụ 1.9:
Cho một CSDL C dùng để quản lý việc đặt hàng và giao hàng của một công
ty. Lược đồ CSDL C gồm các lược đồ quan hệ sau:
Q1: Khach (MAKH, TENKH, DIACHIKH, DIENTHOAI)
Mô tả:
36
Mỗi khách hàng có một mã khách hàng (MAKH) duy nhất, mỗi MAKH xác
định tên khách hàng (TENKH), địa chỉ (DIACHIKH), số điện thoại
(DIENTHOAI).
Q2: Hang (MAHANG, TENHANG, QUYCACH, DVTINH)
Mô tả:
Mỗi mặt hàng có một mã hàng (MAHANG) duy nhất, mỗi MAHANG xác
định tên hàng (TENHANG), quy cách hàng (QUYCACH), đơn vị tính
(DVTINH).
Q3: Dathang (SODH, MAHANG, SLDAT, NGAYDH, MAKH)
Mô tả:
Mỗi mã số đặt hàng (SODH) xác định một ngày đặt hàng (NGAYDH) và mã
khách hàng tương ứng (MAKH). Biết mã số đặt hàng và mã mặt hàng thì biết
được số lượng đặt hàng (SLDAT). Mỗi khách hàng trong một ngày có thể có
nhiều lần đặt hàng.
Q4: Hoadon (SOHD, NGAYLAP, SODH, TRIGIAHD, NGAYXUAT)
Mô tả:
Mỗi hoá đơn tổng hợp có một mã số duy nhất là SOHD, mỗi hoá đơn bán
hàng có thể gồm nhiều mặt hàng. Mỗi hoá đơn xác định ngày lập hoá đơn
(NGAYLAP), ứng với số đặt hàng nào (SODH). Giả sử rằng hoá đơn bán hàng
theo yêu cầu của chỉ một đơn đặt hàng có mã số là SODH và ngược lại, mỗi đơn
đặt hàng chỉ được giải quyết chỉ trong một hoá đơn. Do điều kiện khách quan có
thể công ty không giao đầy đủ các mặt hàng cũng như số lượng từng mặt hàng
yêu cầu trong đơn đặt hàng nhưng không bao giờ giao vượt ngoài yêu cầu. Mỗi
hoá đơn xác định một trị giá của những mặt hàng trong hoá đơn (TRIGÍAHD)
và một ngày xuất kho giao hàng cho khách (NGAYXUAT).
Q5: Chitiethd (SOHD, MAHANG, GIABAN, SLBAN)
Mô tả:
Mỗi SOHD, MAHANG xác định giá bán (GIABAN) và số lượng bán
(SLBAN) của một mặt hàng trong một hoá đơn.
Q6: Phieuthu (SOPT, NGAYTHU, MAKH, SOTIEN)
37
Mô tả:
Mỗi phiếu thu có một số phiếu thu (SOPT) duy nhất, mỗi SOPT xác định một
ngày thu (NGAYTHU) của một khách hàng có mã khách hàng là MAKH và số
tiền thu là SOTIEN. Mỗi khách hàng trong một ngày có thể có nhiều số phiếu
thu.
1.2.1.3.1. Ràng buộc toàn vẹn có bối cảnh là một quan hệ:
a. Ràng Buộc Toàn Vẹn liên bộ:
+ Ràng buộc toàn vẹn về khoá chính:
Đây là một trường hợp đặc biệt của Ràng Buộc toàn Vẹn liên bộ, ràng buộc
toàn vẹn này rất phổ biến và thường được các hệ quản trị CSDL tự động kiểm
tra.
Ví dụ 1.10
Với r là một quan hệ trên lược đồ quan hệ Khach ta có ràng buộc toàn vẹn sau:
R1 : t1, t2 r
t1.MAKH ≠ t2.MAKH
+ Ràng buộc toàn vẹn về tính duy nhất.
Ví dụ: Mỗi phòng ban phải có một tên gọi duy nhất
Ngoài ra nhiều khi ta còn gặp những ràng buộc toàn vẹn khác chẳng hạn như
ràng buộc toàn vẹn sau trong quan hệ sau đây:
KETQUA(MASV, MAMH, LANTHI, DIEM)
Mỗi sinh viên chỉ được đăng thi mỗi môn thi tối đa là 3 lần
b. Ràng Buộc Toàn Vẹn Về Miền Giá Trị:
Ràng buộc toàn vẹn có liên quan đến miền giá trị của các thuộc tính trong một
quan hệ. Ràng buộc này thường gặp. Thông thường các hệ quản trị CSDL đã tự
động kiểm tra (một số) ràng buộc loại này.
Ví dụ 1.11
Với r là một quan hệ của Hoadon ta có ràng buộc toàn vẹn sau:
R3 : t r
R1 Thêm Sửa Xoá
Khach + - -
38
t.TRIGIAHD > 0
c. Ràng Buộc Toàn Vẹn Liên Thuộc Tính:
Ràng buộc toàn vẹn liên thuộc tính (một quan hệ) là mối liên hệ giữa các
thuộc tính trong một lược đồ quan hệ.
Ví dụ 1.12
Với r là quan hệ của Hoadon ta có ràng buộc toàn vẹn sau:
R4 : t r
t.NGAYLAP <= t.NGAYXUAT
1.2.1.3.2. Ràng buộc toàn vẹn có bối cảnh là nhiều quan hệ:
a- Ràng Buộc Toàn Vẹn Về Khoá ngoại:
Ràng buộc toàn vẹn về khoá ngoại còn được gọi là ràng buộc toàn vẹn phụ
thuộc tồn tại. Cũng giống như ràng buộc toàn vẹn về khoá nội, loại ràng buộc
toàn vẹn này rất phổ biến trong các CSDL.
Ví dụ 1.13
R2.dathang[MAKH] khach[MAKH]
b- Ràng Buộc Toàn Vẹn Liên Thuộc Tính Liên Quan Hệ:
Ràng buộc loại này là mối liên hệ giữa các thuộc tính trong nhiều lược đồ
quan hệ.
Ví dụ 1.14
Với r, s lần lượt là quan hệ của Dathang và Hoadon. Ta có ràng buộc toàn vẹn
R5 như sau:
R5 : t1 r, t2 s
Nếu t1.SODH=t2.SODH thì t1.NGAYDH <= t2.NGAYXUAT
R3 Thêm Sửa Xoá
Hoadon + + -
R4 Thêm Sửa Xoá
Hoadon + + -
R2 Thêm Sửa Xoá
dathang + + -
Khach - - +
39
c- Ràng Buộc Toàn Vẹn Liên Bộ Liên Quan Hệ:
Ràng buộc loại này là mối liên hệ giữa các bộ trong một lược đồ cơ sở dữ
liệu. Chẳng hạn như tổng số tiền phải trả trong mỗi hoá đơn (chitiethd) phải
bằng TRỊ GIÁ HOÁ ĐƠN của hoá đơn đó trong quan hệ Hoadon. Hoặc số
lượng học viên trong một lớp phải bằng SOHOCVIEN của lớp đó.
Ngoài ra còn có một số loại RBTV khác như: ràng buộc toàn vẹn về thuộc
tính tổng hợp, ràng buộc toàn vẹn do tồn tại chu trình, ràng buộc toàn vẹn về giá
trị thuộc tính theo thời gian.
1.2.2. Bắt tuân theo ràng buộc toàn vẹn
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 + + -
40
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
41
đ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.
Ví dụ 1.15
42
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.
43
Chương II
CƠ SỞ DỮ LIỆU TÍCH CỰC
2.1. CƠ SỞ DỮ LIỆU TÍCH CỰC
2.1.1. Khái niệm cơ sở dữ liệu tích cực
Cơ sở dữ liệu tích cực là một CSDL bao gồm tập quy tắc được tự động kích
hoạt bằng các sự kiện đã được thực hiện một hành động. Quy tắc đó được gọi là
quy tắc ECA. Tuy nhiên, nhiều nghiên cứu mà trong đó một mô hình tổng quát
cho các cơ sở dữ liệu tích cực có thể nhìn thấy đã được làm từ các mô hình
trigger trước đó đã được đề nghị.
2.1.2. Quy tắc ECA
2.1.2.1. Sự kiện (Event)
Một sự kiện là một điều gì đó xảy ra ở một thời điểm. Bởi vậy, việc xác định
một sự kiện bao gồm cả việc mô tả sự việc xảy ra được giám sát. Bản chất của
việc mô tả và cách thức mà theo đó sự kiện có thể được phát hiện rộng rãi phụ
thuộc vào nguồn (Source) hoặc đối tượng phát sinh sự kiện [5]. Các lựa chọn có
thể là:
- Các hành động cấu trúc, trong trường hợp sự kiện được sinh ra bằng một
hành động ở một phần của cấu trúc (ví dụ như: thêm bản ghi, sửa một
thuộc tính, truy cập vào 1 bản ghi).
- Lời kêu gọi hành vi, trong trường hợp sự kiện được sinh ra bởi việc thực
hiện một vài hành động của người dùng (ví dụ, thông điệp hiển thị được
gửi tới một đối tượng kiểu widget). Đối với các ngôn ngữ sự kiện thường
cho phép các sự kiện xuất hiện trước hoặc sau một hành động nào đó thực
thi.
- Sự thực thi (giải quyết), trong trường hợp khi sự kiện được sinh ra bằng
các lệnh thực thi (ví dụ, từ chối abort, ủy thác commit, bắt đầu thực thi
begin – transaction)
- Trừu tượng hoặc người dùng định rõ, trong trường hợp một cơ chế lập
trình được sử dụng cho phép một chương trình ứng dụng báo hiệu sự xuất
44
hiện một sự kiện rõ ràng (ví dụ trong phản hồi một vài thông tin mà
người dùng nhập vào).
- Ngoại lệ (loại trừ ra), trong trường hợp sự kiện được sinh ra như là kết
quả của một vài ngoại lệ phát sinh (ví dụ như, sự cố gắng truy cập một
vài dữ liệu mà không có sự cho phép thích hợp).
- Đồng hồ, trong trường hợp sự kiện được sinh ra ở một điểm thời gian, sự
kiện thời gian tương đối và chu kỳ được báo cáo trong tài liệu
- Ngoài ra, trong trường hợp sự kiện được sinh ra bởi sự việc xảy ra bên
ngoài cơ sở dữ liệu (ví dụ, nhiệt độ dọc lớn hơn 30 độ).
Một sự kiện biểu thị một sự kiện được xác định cho tất cả các đối tượng
trong một tập hợp hay không (ví dụ, tất cả các đối tượng thuộc một lớp), đối với
các tập hợp con đã cho (ví dụ như, tất cả các nhân viên trừ giáo sư) hoặc đối với
một số thành viên nhất định của tập hợp (ví dụ, để tránh việc truy cập trái phép
tới các đối tượng xác định, hoặc cho phép cập nhật các đối tượng cụ thể hiển thị
trên màn hình).
Các kiểu sự kiện có thể là:
- Gốc (nguyên thủy), trong trường hợp này sự kiện được sinh ra bởi sự việc
đơn lẻ ở tầng thấp thuộc một trong những loại được mô tả ở nguồn
(Source). Ví dụ, sự kiện “on insert to Owns” theo dõi việc thêm những
bản ghi mới vào quan hệ “Owns”.
- Hỗn hợp, trong trường hợp này sự kiện được sinh ra bởi sự kết hợp các sự
kiện hoặc hỗn hợp bằng cách sử dụng một loạt các toán tử cấu thành lên
sự kiện.
Các toán tử sự kiện khác nhau tùy vào hệ thống. Phổ biến là:
Toán tử tách rời(disjunction) – E1 or E2 xuất hiện khi một trong các
thành phần E1 hoặc E2 xuất hiện;
Toán tử kết hợp (conjunction) – E1 and E2 xảy ra khi cả hai E1 và E2
đều xảy ra theo thứ tự bất kỳ;
Toán tử nối tiếp (sequence)– seq(E1,E2) xuất hiện khi E1 xuất hiện
trước E2; toán tử đóng kín – “closure E in Int” xuất hiện chỉ một lần lần
45
đầu tiên E ra tín hiệu, không cần chú ý tới sự xuất hiện sau đó của E
trong một khoảng thời gian Int,
Toán tử sử học (history) – times(n,E) in Int báo hiệu khi sự kiện E xuất
hiện n lần trong khoảng thời gian Int;
Phủ định (not) – not E1 in Int phát hiện sự không xuất hiện của sự E1
trong khoảng thời gian Int.
Như một ví dụ của của quy tắc với sự kiện hỗn hợp, quy tắc sau thực hiện sự
ràng buộc mà thuộc tính qty của stock là như nhau bằng số lượng được ghi vào
quan hệ Owns:
on update to qty of Holder or
update to qty of Stock or
insert to Stock or
delete to Stock or
insert to Holder or
delete to Holder
If exists
(select *
from Stock
where qty #
(
select sum (qty)
from Owns
where Owns.reg# =Stock-.reg#)
)
do abort
Như một ví dụ thêm, để xác định giá cổ phiểu bị thay đổi hay không trong
ngày làm việc sự kiện có thể được sử dụng: on update to price of Stock in
[09:00, 17:00].
46
Đại số sự kiện phong phú có thể đề xuất cho một loạt các hệ thống, bao gồm
HiPAC [Dayal et al. 1988], SAMOS [Gatziu và Dittrich 1994], ODE [Gehani et
al.1992] và Sentinel [Chakravarthy et al.1994].
Khi phát hiện những sự kiện hỗn hợp, có vài sự kiện xuất hiện (của cùng một
loại sự kiện) có thể được sử dụng để hình thành nên một sự kiện hỗn hợp. Ví dụ
như, hãy xem xét một sự kiện hỗn hợp CE mà là sự nối tiếp của hai sự kiện EV1
và EV2. Nếu cả hai sự xuất hiện của sự kiện EV1, đầu tiên là ev1 và sau đó là
ev1’, được báo hiệu, và sự xuất hiện của sự kiện EV2 (ví dụ, ev2) bây giờ được
tạo ra, có một câu hỏi là trường hợp nào của CE sẽ được tạo ra. Khả năng bao
gồm sequence(ev1,ev2) hoặc sequence(ev1’,ev2) hoặc sequence(ev1,ev2)
sequence(ev1’,ev2) . Các sự lựa chọn là phân biệt với nhau bằng cách sử dụng
các điều khoản tiêu thụ. Trong Chakravarthy et al.[1994] tồn tại 4 điều khoản
tiêu hủy được trình bày là: ngữ cảnh gần đây, xem xét phần lớn tập hợp sự kiện
gần đây mà có thể được sử dụng để xây dựng lên sự hỗn hợp ( trong ví dụ trước,
sequence(ev1’,ev2) được phát hiện khi ev2 xuất hiện, sau khi ev1’ và ev2 không
còn được xét để phát hiện CE nữa); ngữ cảnh liên tục, nó xác định cửa sổ trượt
và bắt đầu kết hợp với mỗi sự kiện nguyên thủy diễn ra (2 sự kiện nối tiếp bắt
đầu được hình thành khi ev1 và ev1’ xuất hiện, và cả hai sự kiện nối tiếp sẽ
được báo hiệu như là ev2 được phát hiện); và ngữ cảnh tích lũy, chất đống tất cả
các sự kiện nguyên thủy đến khi sự kiện ghép lại xuất hiện (sự kiện nối tiếp
được báo chỉ một lần khi ev2 sinh ra, ở nơi tham số đầu tiên của sự nối tiếp chứa
các tham số của tất cả sự xuất hiện của EV1, tức là ev1 và ev1’). Nhân tố cơ bản
cho mỗi ngữ cảnh có thể được tìm thấy ở Chakravarthy et al.[1994].
Vai trò của một sự kiện biểu thị các sự kiện phải luôn được định sẵn cho các
quy tắc tích cực hay không, hoặc việc đặt tên rõ ràng của một sự kiện có cần
thiết hay không. Nếu vai trò là tùy ý, thì khi mà không một sự kiện nào được xác
định thì các quy tắc điều kiện - hành động được hỗ trợ, các quy tắc đó có chức
năng khác nhau đáng kể và thực thi từ quy tắc sự kiện - điều kiện - hành động
(ECA). Nếu như vai trò là none thì các sự kiện có thể không được định rõ, và tất
47
cả các quy tắc là quy tắc điều kiện – hành động. Nếu vai trò là bắt buộc, thì chỉ
quy tắc ECA được hỗ trợ.
Hình 2.1 Ngữ cảnh mà trong đó một quy tắc được xử lý
2.1.2.2. Điều kiện (Condition)
Vai trò của một điều kiện biểu thị đã quy định hay chưa. Trong các quy tắc
ECA, điều kiện thông thường là tùy chọn. Khi không điều kiện nào được quy
định cho một quy tắc ECA, dẫn đến một quy tắc sự kiện – hành động. Trong các
hệ thống mà ở đó cả sự kiện và điều kiện là tùy chọn, thì đó luôn là trường hợp
mà ít nhất một cái được quy định [5].
Ngữ cảnh biểu thị sự thiết lập mà trong đó điều kiện được đánh giá. Các
thành phần khác nhau của một quy tắc không được đánh giá trong sự độc lập
trong cơ sở dữ liệu hoặc từ mỗi thành phần khác, và hơn nữa cũng có thể không
được đánh giá lần lượt. Kết quả là, việc xử lý một quy tắc đơn lẻ có thể được
liên kết với ít nhất 4 trạng thái cơ sở dữ liệu khác nhau: – cơ sở dữ liệu ở
thời điểm bắt đầu của sự thực thi hiện thời; – cơ sở dữ liệu khi sự kiện đã
diễn ra, – cơ sở dữ liệu khi điều kiện được đánh giá; và – cơ sở dữ liệu
khi hành động được thực hiện. Hệ thống quy tắc tích cực có thể hỗ trợ các công
cụ bên trong điều kiện của quy tắc mà cho phép nó có thể không truy cập tới
hoặc nhiều hơn các trạng thái và, , và có thể cũng cho phép truy cập
tới các ràng buộc liên kết với sự kiện . Các thông tin có sẵn được dùng với
các thành phần khác nhau của một quy tắc được minh họa ở Hình 2.1. Nhìn
chung, vị trí của các thành phần còn phức tạp hơn trong miêu tả ở Hình 2.1, bởi
48
vì trạng thái trước và sau một sự kiện diễn ra có thể khác nhau, và bởi vì nhiều
sự kiện có thể được bắt đầu và có thể thực hiện tới khi hoàn thành trong khi thực
hiện một hành động đơn lẻ. Như là một ví dụ tính tiện ích của thông tin đó, quy
tắc sau được sử dụng để phản hồi lại tình huống trong đó giá trị của cổ phần nắm
giữ bởi cổ đông (Holder) giảm về 0.
on update tovalue of Holder
If new.value = 0
do (action)
Trong quy tắc này, thông tin từ sự kiện ( được sử dụng để xác định khi
nào trường value được thiết lập bằng 0, do đó việc phản hồi thích hợp có thể
được tạo ra (ví dụ, cổ đông Holder được xóa, thông tin về cổ đông Holder được
gửi tới người quản lý quỹ). Một ví dụ khác, các điều kiện hay hành động truy
cập tới tham số sự kiện sử dụng old chuyển đến giá trị mà một mục dữ liệu nắm
giữ trước một sự kiện cập nhật nó, insert dẫn tới giá trị mới được chèn vào,
delete là việc dẫn tới một giá trị hiện tại bị xoá và cập nhật liên quan tới các
thuộc tính của một mục dữ liệu mà chúng không bị ảnh hưởng bởi sự kiện cập
nhật.
2.1.2.3. Hành động (Active)
Phạm vi các công việc mà có thể được thực hiện bởi một hành động được chỉ
rõ như là sự lựa chọn của nó. Các hành động có thể cập nhật theo cấu trúc của
cơ sở dữ liệu hoặc quy tắc thiết lập, thực hiện hành động lấy thông tin từ cơ sở
dữ liệu và thông báo người dùng hoặc quản trị hệ thống trong một vài tình
huống, hủy bỏ giao dịch, hoặc lấy một số quy tắc phụ của hành động sử dụng
trong do-instead [Stonebraker et al.1990]. Sau đây là một ví dụ của do-instead,
nếu muốn cố xóa đi giá trị từ quan hệ Holder mà có giá trị value > 0, sau đó cho
phép hành động được thực hiện, người quản lý hệ thống có thể được thông báo
hành động đó:
on delete to Holder
if delete.value > 0
do instead (inform system manager)
49
Khác với nhiều cú pháp chuẩn, trong trường hợp này bản ghi được xóa đi và
người quản lý hệ thống được thông báo:
on delete to Holder
if delete.value > 0
do (inform system manager)
Ngữ cảnh của hành động gần giống với ngữ cảnh của điều kiện, và biểu thị
thông tin sẵn có về hành động, như trong minh họa ở Hình 2.1. Đôi khi thông
tin có thể được chuyển từ điều kiện của quy tắc sang hành động, như ( hoặc
( . Sau đây là một ví dụ về sự tiện ích của thông tin ngữ cảnh, quy tắc sau
được sử dụng để sửa lại thông tin lưu trữ trong thuộc tính value của tất cả bản
ghi Holder mà bị ảnh hưởng bởi sự thay đổi price của vài Stock.
On update to price of Stock
If true
Do update Holder
Set value = value*(new.price/old.price)
Where reg# in (select reg# from Owns where stock# =
update.stock#)
Trong quy tắc này, cả giá trị old và new của price đều được truy cập tới
( , để làm trạng thái của cơ sở dữ liệu tại thời gian của cập nhật ( .
2.2. MÔ HÌNH TỔNG QUÁT VÀ CÁC TRIGGER TRONG ORACLE
2.2.1. Mô hình tổng quát của CSDL tích cực:
Mô hình được sử dụng để chỉ rõ các quy tắc của cơ sở dữ liệu tích cực được
tham chiếu đến như là mô hình ECA (Event-Condition-Active). Một quy tắc
trong mô hình ECA có 3 thành phần:
a. Sự kiện (Event) làm kích hoạt quy tắc: các sự kiện này thường là các thao
tác cập nhật cơ sở dữ liệu được áp dụng một cách tường minh đối với cơ sở
dữ liệu. Tuy nhiên, trong mô hình tổng quát chúng cũng có thể là các sự kiện
thời gian hoặc là các dạng sự kiện ngoài khác.
b. Điều kiện (Condition) xác định hành động của quy tắc có thể được thực
hiện hay không: mỗi khi sự kiện kích hoạt có mặt, một điều kiện được chọn
50
có thể được tính giá trị. Nếu không có điều kiện nào được chỉ rõ, hành động
sẽ được thực hiện sự kiện xảy ra. Nếu điều kiện được chỉ rõ, đầu tiên nó được
tính giá trị và chỉ khi nó tính giá trị là đúng (true) thì hành động của quy tắc
sẽ được thực hiện.
c. Hành động (Action) thực hiện: Hành động thường là một dãy lệnh SQL
nhưng nó cũng có thể là một giao tác cơ sở dữ liệu hoặc một chương trình
bên ngoài sẽ được thực hiện một cách tự động.
Hãy xem một vài ví dụ minh họa khái niệm này. Có hai quan hệ NHÂN
VIÊN và ĐƠN VỊ. Mỗi nhân viên có một tên (tenNV), mã số (masoNV), lương,
mã số đơn vị (masoDV) là khóa ngoài tham chiếu đến DONVI, và mã số người
giám sát (MasoNGS) là khóa ngoài đệ quy đến NHANVIEN. Với ví dụ này,
chúng ta giả thiết rằng masoNV có thể cho phép có giá trị null, chỉ ra rằng nhân
viên có thể tạm thời chưa được đăng ký vào đơn vị nào. Mỗi đơn vị có một tên
(TenDV), một mã số (MasoDV), tổng lương của tất cả các nhân viên đăng ký
vào đơn vị (Tongluong) và một người quản lý (MasoNQL) là khóa ngoài đến
NHANVIEN.
Chú ý rằng thuôc tính Tongluong thực chất là một thuộc tính suy diễn được,
giá trị của nó là tổng lương của tất cả các nhân viên đăng ký vào một đơn vị cụ
thể. Việc duy trì giá trị đúng của một thuộc tính suy diễn được như vậy có thể
được thực hiện thông qua một luật tích cực. Trước tiên chúng ta phải xác định
các sự kiện có thể gây ra một thay đổi giá trị của Tongluong, đó là các sự kiện
sau:
[1]. Chèn vào một hoặc nhiều bộ giá trị nhân viên mới
[2]. Thay đổi lương của một hoặc nhiều nhân viên có sẵn
[3]. Thay đổi việc đăng ký của các nhân viên có sẵn từ đơn vị này sang đơn
vị khác.
[4]. Loại bỏ một hoặc nhiều bộ giá trị nhân viên.
Trong trường hợp sự kiện 1, chúng ta chỉ cần tính lại Tongluong nếu nhân
viên mới được ghi tức khắc vào một đơn vị - nghĩa là giá trị của thuộc tính
MasoNV đối với bộ nhân viên mới là khác null (giả thiết null là cho phép đối
51
với MasoNV). Như vậy điều đó sẽ là điều kiện để kiểm tra. Một điều kiện tương
tự có thể sẽ được kiểm tra cho sự kiện 2 (và 4) để xác định xem có phải là nhân
viên mà lương của anh ta bị thay đổi (hoặc bị xóa) hiện tại đã được đăng ký vào
một đơn vị hay không. Với sự kiện 3, chúng ta luôn luôn thực hiện một hành
động để duy trì giá trị của Tongluong một cách đúng đắn, như vậy là không cần
điều kiện nào (hành động luôn luôn được thực hiện).
Hành động đối với các sự kiện 1, 2 và 4 là cập nhật một cách tự động giá trị
của Tongluong đối với đơn vị của nhân viên để phản ánh việc lương của nhân
viên vừa mới được thêm, xóa hoặc cập nhật. Trong trường hợp của sự kiện 3,
cần một hành động đúp: một để cập nhật Tongluong của đơn vị cũ của nhân
viên và hành động khác để cập nhật Tongluong của đơn vị mới của nhân viên.
Bốn active rules R1, R2, R3 và R4 tương ứng với tình trạng ở trên có thể
được chỉ ra trong ký hiệu của hệ quản trị cơ sở dữ liệu Oracle. Chúng ta hãy xét
quy tắc R1 để minh họa cú pháp của việc tạo ra các luật tích cực trong Oracle.
Lệnh CREATE TRIGGER chỉ rõ tên của một trigger (hoặc các luật tích cực) –
Tongluong1 cho R1. Mệnh đề AFTER chỉ ra rằng quy tắc sẽ được kích hoạt sau
sự kiện kích hoạt quy tắc xảy ra. Các sự kiện kích hoạt – ví dụ như chèn một
nhân viên mới ở trong ví dụ này – được chỉ ra sau từ khóa AFTER. Mệnh đề ON
chỉ rõ quan hệ mà trên đó quy tắc được chỉ ra – NHÂN VIÊN đối với R1. Các từ
khóa tùy chọn FOR EACH ROW chỉ ra rằng quy tắc sẽ được kích hoạt một lần
với mỗi một hàng bị ảnh hưởng bởi sự kiện kích hoạt. Mệnh đề tùy chọn WHEN
được sử dụng để chỉ ra điều kiện nào cần kiểm tra sau khi quy tắc được kích
hoạt nhưng trước khi hành động được thực hiện. Cuối cùng, hành động cần làm
được chỉ ra như một khối PL/SQL, khối này thường chứa một hoặc nhiều lệnh
SQL hoặc các lời gọi để thực hiện các thủ tục bên ngoài.
R1: CREATE TRIGGER Tongluong1
AFTER INSERT ON NHÂNVIÊN
FOR EACH ROW
WHEN (NEW.MasoDV IS NOT NULL)
UPDATE ĐƠNVỊ
52
SET Tongluong = Tongluong + NEW.Luong
WHERE MasoDV = NEW.MasoDV;
R2: CREATE TRIGGER Tongluong2
AFTER UPDATE OF Luong ON NHÂNVIÊN
FOR EACH ROW
WHEN (NEW.MasoDV IS NOT NULL)
UPDATE ĐƠNVỊ
SET Tongluong = Tongluong + NEW.Luong – OLD.Luong
WHERE MasoDV = NEW.MasoDV;
R3: CREATE TRIGGER Tongluong3
AFTER UPDATE OF DNO ON NHÂNVIÊN
FOR EACH ROW
BEGIN
UPDATE ĐƠNVỊ
SET Tongluong = Tongluong + NEW.Luong
WHERE MasoDV = NEW.MasoDV;
UPDATE ĐƠNVỊ
SET Tongluong = Tongluong - OLD.Luong
WHERE MasoDV = OLD.MasoDV;
END;
R4: CREATE TRIGGER Tongluong4
AFTER DELETE ON NHÂNVIÊN
FOR EACH ROW
WHEN (OLD.MasoDV IS NOT NULL)
UPDATE ĐƠNVỊ
SET Tongluong = Tongluong - OLD.Luong
WHERE MasoDV = OLD.MasoDV;
Bốn trigger (các quy tắc tích cực) R1, R2, R3 và R4 minh họa một số tính
chất của các quy tắc tích cực. Trước tiên, các sự kiện cơ bản có thể chỉ ra để
kích hoạt các quy tắc là các lệnh cập nhật của SQL chuẩn: INSERT, DELETE,
53
UPDATE. Chúng được chỉ ra bằng các từ khóa INSERT, DELETE, UPDATE
trong ký hiệu của Oracle. Trong trường hợp của UPDATE người ta có thể chỉ ra
các thuộc tính được cập nhật – ví dụ, bằng cách viết UPDATE OF Luong,
MasoDV. Thứ hai, người thiết kế quy tắc cần có cách tham chiếu đến các bộ giá
trị đã được chèn, xóa, sửa đổi: Các từ khóa NEW và OLD được sử dụng trong
Oracle: NEW được sử dụng để tham chiếu đến bộ vừa được chèn vào hoặc vừa
được sửa đổi, trong khi đó OLD được sử dụng để tham chiếu đến bộ bị xóa hoặc
bộ trước khi được cập nhật.
Như vậy, quy tắc R1 được kích hoạt sau một phép toán INSERT được áp
dụng cho quan hệ NHÂNVIÊN. Trong R1, điều kiện (NEW.MasoDV IS NOT
NULL) được kiểm tra, và nếu nó được tính giá trị là đúng, nghĩa là bộ nhân viên
vừa mới được chèn vào là có quan hệ với một đơn vị, thì hành động sẽ được
thực hiện. Hành động cập nhật các bộ ĐƠNVỊ có liên quan tới nhân viên vừa
mới được chèn vào bằng cách cộng lương của người đó (NEW.Luong) vào
thuộc tính Tongluong của đơn vị liên quan của chúng.
Quy tắc R2 tương tự với R1 nhưng nó được kích hoạt bằng một phép toán
UPDATE, sửa đổi lương của một nhân viên thay vì chèn. Quy tắc R3 được kích
hoạt bằng một sửa đổi đối với thuộc tính MasoDV của NHÂNVIÊN, nó có
nghĩa thay đổi đăng ký của nhân viên từ một đơn vị sang một đơn vị khác.
Không có điều kiện để kiểm tra trong R3, vì vậy hành động được thực hiện mỗi
khi sự kiện kích hoạt xuất hiện. Hành động sửa đổi cả đơn vị mới và đơn vị cũ
của nhân viên đăng ký lại bằng cách cộng lương của họ vào Tongluong của đơn
vị mới và trừ lương của họ ra khỏi Tongluong của đơn vị cũ. Để ý rằng điều này
có thể làm việc ngay cả giá trị của MasoDV là NULL bởi vì trong trường hợp
này không đơn vị nào được lựa chọn cho hành động của quy tắc.
Điều quan trọng là xét ảnh hưởng của mệnh đề tùy chọn FOR EACH
ROW, nó có nghĩa là quy tắc được kích hoạt một cách riêng rẽ đối với mỗi bộ
giá trị. Điều này được biết đến như một row-level-trigger. Nếu mệnh đề này bị
bỏ qua, trigger sẽ được biết như là một statement-level trigger và sẽ được kích
hoạt một lần đối với mỗi lệnh kích hoạt. Để thấy sự khác nhau, hãy xem phép
54
toán cập nhật sau đây, nó tăng 10% lương cho tất cả các nhân viên đăng ký vào
đơn vị 5. Phép toán này sẽ là một sự kiện kích hoạt quy tắc R2:
R2: UPDATE NHÂNVIÊN
SET Luong = 1.1* Luong
WHERE MasoDV=5;
Bởi vì lệnh ở trên có thể cập nhật nhiều bản ghi, một quy tắc sử dụng ngôn
ngữ row-level như là R2 sẽ được kích hoạt một lần đối với mỗi hàng, trong khi
đó một quy tắc sử dụng ngữ nghĩa statement-level được kích hoạt chỉ một lần.
Hệ thống Oracle cho phép người sử dụng chọn lựa một trong hai tùy chọn trên
để sử dụng cho mỗi quy tắc. Việc dựa vào mệnh đề tùy chọn FOR EACH ROW
tạo ra một row-level trigger và việc bỏ nó tạo ra một statement-level trigger. Để
ý rằng các từ khóa NEW và OLD chỉ có thể được sử dụng với các row-level
trigger.
Cú pháp để chỉ ra các trigger trong hệ thống Oracle được tổng kết như sau:
:: = CREATE TRIGGER
(AFTER| BEFORE) ON
[ FOR EACH ROW]
[WHEN ]
;
::=
::=
{, }].
Một ví dụ khác, giả sử rằng chúng ta muốn kiểm tra có phải lương của một
nhân viên là lớn hơn lương của người giám sát trực tiếp của anh ta hay không?
Nhiều sự kiện có thể kích hoạt quy tắc này: việc chèn vào một nhân viên mới,
thay đổi lương của một nhân viên hoặc thay đổi người giám sát của nhân viên.
Giả sử rằng hành động sẽ thực hiện sẽ là một lời gọi đến một thủ tục bên ngoài
INFORM_SUPERVISOR, nó sẽ thông báo về người giám sát. Quy tắc có thể
được viết như sau:
R5: CREATE TRIGGER INFORM_SUPERVISOR1
55
BEFORE INSERT OF UPDATE OF Luong, MasoNGS ON NHÂNVIÊN
FOR EACH ROW
WHEN
(NEW.Luong > (SELECT Luong FROM NHÂNVIÊN
WHERE MasoNV = NEW.MasoNGS))
INFORM_SUPERVISOR (NEW.MasoNGS, NEW.MasoNV);
2.2.2. Vấn đề thiết kế và cài đặt cho các cơ sở dữ liệu tích cực
Phần trước đã cho tổng quan về các khái niệm chính để chỉ ra các quy tắc
tích cực. Trong phần này đưa các vấn đề bổ sung liên quan đến việc thiết kế và
cài đặt các quy tắc như thế nào. Vấn đề thứ nhất liên quan đến việc kích hoạt,
thôi kích hoạt và nhóm các quy tắc. Thêm vào việc tạo ra các quy tắc, một hệ
thống cơ sở dữ liệu tích cực phải cho phép những người sử dụng kích hoạt, thôi
kích hoạt và bỏ các quy tắc bằng cách tham chiếu đến các tên quy tắc của chúng.
Một quy tắc thôi kích hoạt sẽ không bị kích hoạt bởi sự kiện kích hoạt. Tính chất
này cho phép các người sử dụng lựa chọn các quy tắc thôi kích hoạt đối với một
chu kỳ thời gian nào đó khi chúng là không cần thiết. Các lệnh kích hoạt sẽ làm
cho các quy tắc tích cực trở lại. Lệnh drop loại bỏ các luật ra khỏi hệ thống. Một
tùy chọn khác là nhóm các quy tắc vào một cái gọi là thiết lập quy tắc, như vậy
toàn bộ tập hợp các quy tắc có thể được kích hoạt, ngừng kích hoạt hoặc loại bỏ.
Việc có một lệnh có thể kích hoạt một quy tắc hoặc một tập quy tắc thông qua
một lệnh PROCESS RULES do người sử dụng đưa ra cũng là một điều có lợi.
Vấn đề thứ hai liên quan đến liệu hành động được kích hoạt có thể được thực
hiện trước, sau, hoặc đồng thời với sự kiện kích hoạt được hay không. Vấn đề
liên quan là liệu hành động được kích hoạt có thể được xem như một giao tác
tách rời hay không hay nó phải là một phần của cung giao tác kích hoạt quy tắc.
Trước tiên chúng ta phải cố gắng phân loại các tùy chọn khác nhau.
Điều quan trọng là không phải tất cả các tùy chọn có thể sẵn sang sử dụng
đối với một hệ cơ sở dữ liệu tích cực. Thật vậy, hầu hết các hệ thống thương mại
được giới hạn đến một hoặc hai tùy chọn.
56
Giả thiết rằng sự kiện kích hoạt xảy ra như là một phần của việc thực hiện
giao tác. Trước hết chúng ta xét các tùy chọn khác nhau với việc sự kiện kích
hoạt liên kết với việc tính giá trị của các điều kiện của quy tắc như thế nào. Việc
tính giá trị của các điều kiện của quy tắc cũng được xem như xem xét quy tắc
bởi vì hành động chỉ được thực hiện sau sự xem xét lại điều kiện tính giá trị đến
true hoặc fasle. Có ba khả năng chính đối với sự xem xét quy tắc:
[1]. Sự xem xét tức khắc (immediate consideration): Điều kiện được tính giá
trị như là một phần của cùng giao tác như là sự kiện kích hoạt và được tính
toán ngay tức khắc. Trường hợp này có thể được phân loại thành ba tùy chọn:
- Tính giá trị điều kiện trước khi thực hiện sự kiện kích hoạt
- Tính giá trị điều kiện sau khi thực hiện sự kiện kích hoạt
- Tính giá trị điều kiện thay vì thực hiện sự kiện kích hoạt
[2]. Sự xem xét chậm: Điều kiện được tính giá trị ở cuối giao tác chứa sự
kiện kích hoạt. Trong trường hợp này có thể có nhiều quy tắc được kích hoạt
chờ để có các điều kiện của chúng được tính.
[3]. Sự xem xét riêng rẽ: Điều kiện được tính giá trị như là một giao tác riêng
rẽ, tách rời khỏi giao tác kích hoạt.
Tập hợp các tùy chọn tiếp theo liên quan đến mối quan hệ giữa việc tính giá
trị điều kiện của quy tắc và việc thực hiện hành động của quy tắc. Ở đây, một
lần nữa có ba tùy chọn có thể có: thực hiện tức khắc, thực hiện chậm và thực
hiện tách rời. Tuy nhiên, hầu hết các hệ thống tích cực sử dụng tùy chọn thứ
nhất. Nghĩa là, khi điều kiện được tính giá trị, nếu nó trả lại giá trị true, hành
động được thực hiện ngay tức khắc.
Một vấn đề khác liên quan đến các quy tắc của cơ sở dữ liệu tích cực là sự
phân biệt các quy tắc mức dòng (row-level rule) và các quy tắc mức lệnh
(statement-level rule). Bởi vì các lệnh cập nhật của SQL (được xem như các sự
kiện kích hoạt) có thể chỉ ra một tập hợp các bộ, ta phải phân biệt giữa liệu quy
tắc có thể xem xét một lần đối với toàn bộ lệnh hay không hay liệu nó có thể
được xem xét một cách tách biệt đối với từng hàng bị ảnh hưởng bởi lệnh. Hệ
57
thống Oracle cho phép người sử dụng chọn một trong hai tùy chọn trên sử dụng
với từng quy tắc.
Một trong các khó khăn có thể hạn chế việc sử dụng rộng rãi các quy tắc tích
cực, mặc dù khả năng của chúng lầm đơn giản việc phát triển cơ sở dữ liệu và
phần mềm, là ở chỗ không có các kỹ thuật dễ sử dụng để thiết kế, viết và kiểm
tra các quy tắc. Ví dụ, rất khó khăn để kiểm tra rằng một tập hợp các quy tắc là
tương thích, nghĩa là hai hoặc nhiều quy tắc trong tập hợp không mâu thuẫn với
nhau. Cũng rất khó khăn để đảm bảo sự kết thúc của một tập hợp các quy tắc
dưới mọi hoàn cảnh. Để minh họa ngắn gọn vấn đề kết thúc, hãy xem xét các
quy tắc dưới đây:
R1: CREATE TRIGGER T1
AFTER INSERT ON TABLE1
FOR EACH ROW
UPDATE TABLE 2
SET ATTRIBUTE 1 = ……..;
R2: CREATE TRIGGER T2
AFTER UPDATE OF ATTRIBUTE1 ON TABLE 2
FOR EACH ROW
INSERT INTO TABLE 1 VALUE (….);
Ở đây quy tắc R1 được kích hoạt bởi một sự kiện INSERT trên bảng 1 và
hành động của nó gồm một sự kiện UPDATE trên thuộc tính 1 của bảng 2. Tuy
nhiên, sự kiện kích hoạt của quy tắc R2 là một sự kiện UPDATE trên thuộc tính
1 của bảng 2 và hành động của nó bao gồm một sự kiện INSERT trên bảng 1.
Dễ dàng nhìn thấy trong ví dụ này hai quy tắc có thể kích hoạt lẫn nhau không
ngừng, dẫn đến sự không kết thúc. Vì vậy, nếu hàng chục quy tắc được viết thì
sẽ rất khó khăn để xác định sự kết thúc có được đảm bảo hay không.
Nếu các quy tắc tích cực đạt đến khả năng của nó thì cần phải phát triển các
phương tiện để thiết kế, sửa lỗi và hướng dẫn các quy tắc tích cực nhằm giúp các
người sử dụng trong việc thiết kế và sửa lỗi các quy tắc đó.
2.2.3. Các ứng dụng tiềm năng đối với các cơ sở dữ liệu tích cực
58
Một ứng dụng quan trọng là cho phép khai báo một số các điều kiện xuất
hiện. Ví dụ, một cơ sở dữ liệu tích cực có thể được sử dụng để theo dõi nhiệt độ
của một lò nung công nghiệp. Ứng dụng có thể đưa một cách có chu kỳ các bản
ghi đọc nhiệt độ một cách trực tiếp từ các cảm ứng nhiệt độ vào cơ sở dữ liệu và
các quy tắc tích cực có thể được viết để được kích hoạt khi một bản ghi nhiệt độ
được đưa vào với điều kiện là kiểm tra nếu nhiệt độ vượt quá mức nguy hiểm và
hành động là đưa ra báo động.
Các quy tắc tích cực cũng có thể được sử dụng để bắt tuân theo các ràng
buộc toàn vẹn bằng cách chỉ rõ các kiểu của sự kiện có thể gây ra việc các ràng
buộc bị vi phạm và sau đó tính giá trị các điều kiện thích hợp để kiểm tra xem
các ràng buộc có bị vi phạm bởi các sự kiện hay không. Vì thế, các ràng buộc
ứng dụng phức tạp, thường được biết như các quy tắc nghiệp vụ có thể được bắt
buộc theo cách đó. Ví dụ, trong ứng dụng của cơ sở dữ liệu “Trường đại học”
một quy tắc có thể theo dõi điểm trung bình của các sinh viên mỗi khi một điểm
mới được nhập vào và nó có thể báo cho người giám sát nếu điểm trung bình
của sinh viên ở dưới một ngưỡng nào đấy.
Một ứng dụng khác bao gồm duy trì tự động dữ liệu suy diễn được giống như
các ví dụ về quy tắc R1 đến R4 duy trì thuộc tính suy diễn được Tongluong mỗi
khi các bộ giá trị nhân viên riêng rẽ được thay đổi. Một ứng dụng tương tự là sử
dụng các quy tắc active để duy trì sự kiên định của các khung nhìn mỗi khi các
quan hệ cơ sở được sửa đổi. Một ứng dụng liên quan là duy trì tính kiên định
của các bảng được nhân bản bằng cách chỉ rõ các quy tắc sửa đổi các bản sao
mỗi khi bảng chính được sửa đổi.
59
Chương III
CÀI ĐẶT CÁC QUY TẮC ECA BẰNG NGÔN NGỮ SQL
3.1. GIỚI THIỆU TRIGGER TRONG SQL-SERVER
Ta đã biết các ràng buộc được sử dụng để đảm bảo tính toàn vẹn dữ liệu
trong cơ sở dữ liệu [2]. Một đối tượng khác cũng thường được sử dụng trong các
cơ sở dữ liệu cũng với mục đích này là các trigger. Cũng tương tự như thủ tục
lưu trữ, một trigger là một đối tượng chứa một tập các câu lệnh SQL và tập các
câu lệnh này sẽ được thực thi khi trigger được gọi. Điểm khác biệt giữa thủ tục
lưu trữ và trigger là: các thủ tục lưu trữ được thực thi khi người sử dụng có lời
gọi đến chúng còn các trigger lại được "gọi" tự động khi xảy ra những giao tác
làm thay đổi dữ liệu trong các bảng.
Mỗi một trigger được tạo ra và gắn liền với một bảng nào đó trong cơ sở
dữ liệu. Khi dữ liệu trong bảng bị thay đổi (tức là khi bảng chịu tác động của các
câu lệnh INSERT, UPDATE hay DELETE) thì trigger sẽ được tự động kích
hoạt.
Sử dụng trigger một cách hợp lý trong cơ sở dữ liệu sẽ có tác động rất
lớn trong việc tăng hiệu năng của cơ sở dữ liệu. Các trigger thực sự hữu dụng
với những khả năng sau:
Một trigger có thể nhận biết, ngăn chặn và huỷ bỏ được những thao tác
làm thay đổi trái phép dữ liệu trong cơ sở dữ liệu.
Các thao tác trên dữ liệu (xoá, cập nhật và bổ sung) có thể được trigger
phát hiện ra và tự động thực hiện một loạt các thao tác khác trên cơ sở dữ
liệu nhằm đảm bảo tính hợp lệ của dữ liệu.
Thông qua trigger, ta có thể tạo và kiểm tra được những mối quan hệ phức
tạp hơn giữa các bảng trong cơ sở dữ liệu mà bản thân các ràng buộc
không thể thực hiện được.
3.2. CSDL TRONG QUẢN LÝ BÁN HÀNG
Trong chương này tôi cài đặt các quy tắc ECA trên CSDL Quản lý bán hàng.
Gồm một số bảng chính sau:
60
3.2.1. Danh mục Cart:
2.2.2. Danh mục CartStatus:
2.2.3. Danh mục News:
STT Tên trường Kiểu dữ liệu Ràng buộc
1 Id Bigint Khoá chính
2 userId Bigint
3 DateOrder Datetime
4 DateSell Datetime
5 Status Id Int Khóa ngoài
S
Các file đính kèm theo tài liệu này:
- LUẬN VĂN-NGHIÊN CỨU, XÂY DỰNG CƠ SỞ DỮ LIỆU TÍCH CỰC.pdf