Định nghĩa 3.2: Lớp cơ sở là lớp đƣợc lƣu trữ trong CSDL hƣớng đối tƣợng.
Lớp dẫn xuất là lớp trung gian đƣợc sản sinh trong quá trình ƣớc lƣợng truy vấn và đƣợc sử dụng nhƣ là đầu vào trong các bƣớc ƣớc lƣợng.
Quy tắc ƣớc lƣợng các siêu cạnh trong siêu đồ thị kết nối
Trong tiến trình thực hiện truy vấn, việc đƣa phép chọn và phép chiếu trên đối tƣợng lên trƣớc các phép kết nối và tích đề các đƣợc thực hiện càng sớm càng tốt. Vì, phép chọn thực hiện việc loại bỏ các đối tƣợng không liên quan trong các lớp, làm giảm không gian tìm kiếm; Phép chiếu đƣợc áp dụng cho trƣờng hợp tập thuộc tính của các lớp quá lớn nhƣng không tham gia trong kết quả của truy vấn, do đó phép chiếu làm giảm kích thƣớc lƣu trữ của mỗi lớp, loại bỏ các thuộc tính không có mặt trong kết quả của truy vấn. Vì vậy, việc áp dụng các quy tắc Heuristic trong ƣớc lƣợng siêu đồ thị kết nối đối tƣợng trên các siêu cạnh điều kiện đối với các phép toán chọn, chiếu đƣợc phát biểu nhƣ sau:
(QT1) Sử dụng một ràng buộc (điều kiện có kiểu A = a, A > a, ... hoặc một tập hạn chế các giá trị của một thuộc tính) để truy vấn trên một lớp (nếu có thể).
(QT2) Ƣớc lƣợng một điều kiện hoặc một siêu cạnh điều kiện càng sớm càng tốt nếu nhƣ có thể.
hoten luongCB … duan
tenduan kinhphi ... QuanLy >=10.000.000 head head IN DuAn 200.000.000
(QT3) Sau khi một siêu cạnh đã đƣợc đánh dấu, chiếu loại bỏ các thuộc tính không liên quan từ lớp dẫn xuất.
Mô tả thuật toán ƣớc lƣợng các siêu cạnh trong siêu đồ thị
Chúng ta biểu diễn hình thức cho siêu đồ thị kết nối của truy vấn hƣớng đối tƣợng là dãy các sự kiện: H = (E1, E2, … , Ej-1), trong đó, các sự kiện Ei (i = 1..j-1) có thể là siêu cạnh đối tƣợng, siêu cạnh điều kiện hoặc siêu cạnh kết nhập.
Lớp dẫn xuất thu đƣợc sau tác động của một sự kiện Ej đƣợc ký hiệu là
Lop_dan_xuat(E1, E2, … , Ej). Trƣờng hợp siêu đồ thị kết nối chỉ có một siêu cạnh E1 thì siêu cạnh đó phải là siêu cạnh đối tƣợng và Lop_dan_xuat(E1) = O(E1). Trong đó
O(E1) là lớp tƣơng ứng với siêu cạnh đối tƣợng E.
Thuật toán đƣợc giới thiệu sau đây thực hiện việc ƣớc lƣợng lớp dẫn xuất với sự kiện Ej trong H. Thuật toán Uocluongsieucanh nhận tham số vào là lớp dẫn xuất thu đƣợc sau khi thực hiện sự kiện Ej-1 và sự kiện Ej, kết quả trả về của thủ tục là một chƣơng trình tính Lop_dan_xuat sau tác động của Ej. Chúng ta xem xét ba trƣờng hợp xảy ra:
+ TH1: Khởi tạo lớp dẫn xuất E1 cho kết quả Lop_dan_xuat(E1) = O(E1), trong đó O(E1) là lớp tƣơng ứng với siêu cạnh đối tƣợng E1.
+ TH2: Nếu ta loại bỏ một siêu cạnh điều kiện Ej ra khỏi siêu đồ thị H và cho ta kết quả là siêu đồ thị H‟ = (E1, E2, … , Ej), thì lớp dẫn xuất của siêu đồ thị H‟ là phép chọn theo điều kiện lớp dẫn xuất của H.
Lop_dan_xuat(H‟) = σt.C(t)(Lop_dan_xuat(H))
Với C(t) là điều kiện trong mệnh đề Where (2.1): t.A = a;
(2.3) : t.A t.B, { < , , , > , }; (2.4): t.A t.B, { , , , , };
+ TH3: Nếu chúng ta loại bỏ một siêu cạnh đối tƣợng E khỏi siêu đồ thị H, và giả sử siêu đồ thị kết quả H‟có chứa các thành phần liên thông E1, E2,…, Ej. Khi đó với mỗi siêu cạnh đối tƣợng F trong E1, E2,…, Ej-1 có giao với E, chúng ta xác định đƣợc lớp đối tƣợng F trong phépnối với lớp đối tƣợng E của siêu cạnh đối tƣợng E.
O(F) := tuple_cat(O(F), π(O(F) O(E))(O(E))
Nếu siêu cạnh đối tƣợng F không giao với siêu đồ thị H ta xác định đƣợc đối tƣợng F
Lop_dan_xuat(H‟) := tuple_cat(O(F), Lop_dan_xuat(E1), …, Lop_dan_xuat (Ej-1))
Và thuật toán ƣớc lƣợng siêu cạnh đƣợc minh họa nhƣ sau.
Thuật toánUocLuongSieuCanh (Lop_dan_xuat(H), Ej)
Đầu vào: Lop_dan_xuat (H) và sự kiện Ej, trong đó H = (E1, E2, … , Ej-1)
Phương pháp:
Begin
(1) Khởi tạo H = (E1, E2, … , Ej-1)
(2) UocLuongSieuCanh(E1)
(3) Kết quả: Lop_dan_xuat(E1) := O(E1)
(4) If ( Ej là một điều kiện hoặc siêu cạnh điều kiện) then
(5) Loại bỏ siêu cạnh đối tƣợng Ej ra khỏi siêu đồ thị (6) H‟ := H {ej}
(7) Kết quả: Lop_dan_xuat(H‟):= t.C(t)(Lop_dan_xuat(H))
// Xét các trƣờng hợp siêu cạnh điều kiện trong mệnh đề Where. (8) If (Ej là siêu cạnh đối tượng) then
(9) If (mỗi siêu cạnh đối tƣợng F có giao với E) then
(10) O(F) := tuple_cat(O(F), π(O(F) O(E))(O(E)))
// O(F) là tập các đối tƣợng của F
(11) If (siêu đồ thị còn lại là tập các siêu cạnh tách biệt) then
(12) for i :=1 to j-1 do
(13) UocLuongSieuCanh(Lop_dan_xuat(H), Ej)
(14) Kết quả: Lop_dan_xuat(H‟) :=
tuple_cat(O(F), Lop_dan_xuat(E1), …, Lop_dan_xuat (Ej-1))
End;
Khi tất cả các siêu cạnh trong siêu đồ thị H đƣợc ƣớc lƣợng bằng cách tác động lần lƣợt các sự kiện để thu đƣợc các lớp dẫn xuất. Lớp dẫn xuất kết quả sẽ đƣợc chiếu lên tập các thuộc tính trong siêu cạnh đỉnh, đây chính là câu trả lời của truy vấn.
Thuật toán 2.3: Ƣớc lƣợng các siêu cạnh trong siêu đồ thị
Đầu vào: Siêu đồ thị H = (E1, E2, …En),R là siêu cạnh đỉnh.
Đầu ra: Lớp kết quả của truy vấn.
Phương pháp
Begin
(1) Siêu đồ thị H := (E1, E2, …En), với dãy các sự kiện Ei
(2) for j := 1 to n do
(3) Call UocLuongSieuCanh(Lop_dan_xuat (E1, E2, …Ej-1), Ej) (5) Bổ sung Lop_dan_xuat(E1, E2, …Ej) vào H
(6) Kết quả: H = πR(Lop_dan_xuat (H))
End;
Mệnh đề 2.1. Thuật toán 2.3 dừng sau hữu hạn bước và cho câu trả lời đúng Chứng minh:
Rõ ràng số các sự kiện trong H là hữu hạn, do đó thuật toán 2.3 sẽ dừng sau n lần tác động của các sự kiện Ei lên các lớp dẫn xuất, n là số sự kiện trong siêu đồ thị H
Sử dụng phƣơng pháp quy nạp để chứng minh cho điều này:
+ Trƣờng hợp cơ sở: n = 1, thì H = (E1), E1là siêu cạnh đối tƣợng, ta có:
H = πR(E1) = π(C1) là câu trả lời của truy vấn (C1 là lớp tƣơng ứng với siêu cạnh đối tƣợng E1).
+ Trƣờng hợp thứ k: n = k, giả sử lớp dẫn xuất thứ k thu đƣợc sau tác động của sự kiện Ek là ƣớc lƣợng của k siêu cạnh trong siêu đồ thị (Lop_dan_xuat (E1, ..., Ek)). Mặt khác, lớp dẫn xuất thu đƣợc ở bƣớc thứ k lại là đầu vào cho bƣớc ƣớc lƣợng thứ (k+1), do đó nếu k = n thì sau n bƣớc ƣớc lƣợng siêu cạnh, ta có lớp dẫn xuất thu đƣợc:
UocLuongSieuCanh(lop_dan_xuat(E1, ..., En-1), En) = lop_dan_xuat(E1, ..., En). Sau đó chiếu lên các siêu cạnh đỉnh ta có kết quả truy vấn là:
H = πR(lop_dan_xuat(E1, ..., En))
Xét truy vấn trong ví dụ 2.2. Chúng ta có dãy các sự kiện trong siêu đồ thị H = (PhongBan, tenphongban = “Truyền thông”, NhanVien)
Áp dụng thuật toán 2.3 ƣớc lƣợng các siêu cạnh trong siêu đồ thị ta có các bƣớc ƣớc lƣợng nhƣ sau:
+ Bƣớc 1: Khởi tạo lớp dẫn xuất tƣơng ứng với siêu cạnh đối tƣợng PhongBan
Lop_dan_xuat(PhongBan) = O(PhongBan)
+ Bƣớc 2: Áp dụng điều kiện chọn “tenphongban = “ Truyền thông” trên siêu cạnh đối tƣợng PhongBan.
O(PhongBan) = σk.k.tenphongban = “Truyền thông”( PhongBan)
+ Bƣớc 3: Ƣớc lƣợng siêu cạnh đối tƣợng NhanVien, là kết nối truyền thống dựa trên giá trị.
O(NhanVien)= tuple_cat(NhanVien, π(O(NhanVien)O(PhongBan))(πV(O(PhongBan))))
+ Bƣớc 4: Chiếu lớp dẫn xuất thu đƣợc sau phép kết nối lên siêu cạnh đỉnh (hoten)
Lop_dan_xuat(NhanVien, PhongBan) =
π(s.hoten)(πV(Lop_dan_xuat(NhanVien, PhongBan)))
Kết quả sau khi áp dụng thuật toán ƣớc lƣợng siêu cạnh trong siêu đồ thị H = (PhongBan, tenphongban = “Truyền thông”, NhanVien) đƣợc minh họa trên chƣơng trình cài đặt ở mục 3.4. Kết quả thực nghiệm trong chƣơng 3 (trang 62).