Siêu đồ thị H

Một phần của tài liệu (LUẬN văn THẠC sĩ) tối ưu hóa truy vấn cơ sở dữ liệu hướng đối tượng (Trang 36)

Siêu đồ thị H gồm

V = {v1, v2, v3, v4, v5, v6, v7}.

E = {e1, e2, e3, e4} = {{v1, v2, v3},{v2, v3}, {v3, v5, v6},{v4}}.

Trên cơ sở đó, tôi khảo cứu thêm khái niệm siêu đồ thị kết nối đối tƣợng để mở rộng phƣơng pháp biểu diễn này trong ngôn ngữ truy vấn đối tƣợng trong OQL. Từ đó, khảo cứu các thuật toán ƣớc lƣợng các siêu cạnh và thuật toán rút gọn siêu đồ thị kết nối đối tƣợng.

2.1.2. Siêu đồ thị kết nối đối tƣợng

Trƣớc hết, một cách hình thức ta xét định nghĩa của khái niệm siêu đồ thị kết nối đối tƣợng nhƣ sau [6, 12, 16].

Định nghĩa 2.1: Siêu đồ thị kết nối đối tƣợng là một bộ sáu:

H = (CH, VH, EH, LH, SH, lbH), trong đó: (i) CH: là tập hữu hạn các lớp tham gia truy vấn.

(ii) VH: là tập hữu hạn các nút. (iii) LH: là tập hữu hạn các nhãn.

(iv) EH := EC  EQ tập hữu hạn các siêu cạnh, trong đó EC, EQ lần lƣợt là tập các siêu cạnh biểu diễn các lớp đối tƣợng và các thành phần của truy vấn.

(v) SH: VH EH là ánh xạ khởi tạo các siêu cạnh từ tập các nút. (vi) lbH: EHLH là hàm gán nhãn cho siêu cạnh, sao cho

e  EH thì lbH(e)  LH

Các truy vấn đƣợc viết bằng ngôn ngữ truy vấn OQL rất phong phú và đa dạng, chúng ta giới thiệu một tập con của các truy vấn viết bằng ngôn ngữ OQL là các truy vấn lồng.

Từ định nghĩa 2.1 (trong các phần sau, siêu đồ thị kết nối đối tƣợng đƣợc gọi tắt là siêu đồ thị), truy vấn OQL đƣợc biểu diễn bằng ký pháp siêu đồ thị nhƣ sau:

- Ci là tập hữu hạn các lớp đối tƣợng trong CSDL. Tập các nút của siêu đồ thị là tập các thuộc tính thuộc các lớp tham gia truy vấn. Mỗi thuộc tính của lớp Ci

đƣợc biểu thị bằng một nút. Nếu hai lớp CiCj đều có cùng một số các thuộc tính kế thừa từ một siêu lớp nào đó, hoặc chúng cùng kế thừa tất cả các thuộc tính từ một siêu lớp, ta tạo riêng cho các thuộc tính này các nút khác nhau. - Các siêu cạnh của siêu đồ thị đƣợc tạo thành từ các biểu thức điều kiện và các

lớp Ci. Xét biểu thức điều kiện trong mệnh đề Where, các biểu thức điều kiện đƣợc chia ra các dạng sau:

 A = a, (2.1)

 A = B (2.2)

 A  B,  { < ,  ,  , > , }, (2.3)

 A  B,  { ,  ,  ,  , } (2.4)

 A  B,  {is, in, union, diff, forall, exists,…} (2.5) Trong đó, A, B là thuộc tính của các lớp và a là hằng.

+ Đối với mỗi lớp Ci, có một siêu cạnh chứa tất cả các nút là các thuộc tính của

Ci, ta gọi là siêu cạnh đối tượng và đƣợc vẽ bằng một đƣờng liền nét khép kín bao quanh tất cả các nút của siêu cạnh. Gán nhãn là tên của lớp.

+ Điều kiện có dạng (2.1) trong siêu đồ thị, đƣợc gán nhãn nút là “A = a”.

+ Biểu thức điều kiện có dạng “A = B” (dạng 2.2), với A, B là các thuộc tính trong hai lớp (có thể cùng là những thuộc tính đƣợc kế thừa từ một siêu lớp nào đó), thì chúng ta “trộn” các nút A và B lại với nhau đặt nhãn chung là tên của một trong

hai thuộc tính.

+ Với biểu thức điều kiện dạng (2.3) hay (2.4), chúng ta sẽ tạo ra một siêu cạnh chứa các thuộc tính có mặt trong biểu thức. Những siêu cạnh này đƣợc gọi là siêu cạnh điều kiện và chúng đƣợc biểu thị bằng đƣờng nét chấm khép kín.

- Nếu có hai điều kiện trên cùng một tập thuộc tính, ta phải đặt nhãn riêng cho mỗi siêu cạnh để có thể phân biệt đƣợc chúng.

- Các thuộc tính trong mệnh đề Select đƣợc bao trong một đƣờng liền nét khép kín và gán nhãn là “head ”, gọi là siêu cạnh đỉnh. Siêu cạnh đỉnh tƣơng ứng với một lớp kết quả của truy vấn.

- Siêu cạnh kết nhập chứa các thuộc tính tham gia trong các biểu thức chứa các phép toán { IS, IN, UNION, FORALL, EXIST, ….} của các truy vấn con lồng nhau, đƣợc vẽ bằng đƣờng nét rời khép kín bao quanh các thuộc tính có liên quan. Các siêu cạnh kết nhập đƣợc gán nhãn tƣơng ứng với tên các phép toán. Truy vấn đơn trong OQL chỉ có một khối Select … From …. Where (SFW); nhƣng truy vấn lồng có nhiều hơn một khối SFW. Truy vấn lồng biểu diễn bằng một siêu đồ thị đƣợc xây dựng từ các siêu đồ thị của các khối SFW đơn và liên kết với nhau qua các siêu cạnh kết nhập.

Ví dụ 2.1: Xét siêu đồ thị kết nối đối tƣợng biểu diễn truy vấn sau

Define c2 as d Select A From c1, c2, c3

Where c1.A = c3.F and (c1.A + c1.B > c3.D) and (c3.E IN (d)) and (c1.C = „c‟)

Hình 2.2. Siêu đồ thị kết nối đối tượng của ví dụ 2.1

Trong đó ta có:

Đối với điều kiện “c1.A = c3.F” thực hiện “trộn” hai nút đặt nhãn chung là “A”.

CH = {c1, c2, c3} trong đó: c1 = (A, B, C), c2 = (G, H) và c3 = (D, E, F) là các lớp đối tƣợng trong siêu đồ thị H.

V = {A, B, C, D, E, F, G, H} là tập các nút. D E A B C G H c1 c2 c3 head „=c‟ IN f1 f2

LH = {c1, c2, c3, f1, f2,”head”} là các nhãn.

EH = EC  EQ, với ECgồm tập các siêu cạnh đƣợc gán nhãn {c1,c2,c3} biểu diễn các lớp c1, c2 và c3. Và EQ có các siêu cạnh biểu diễn lần lƣợt là các kết quả của truy vấn, biểu thức điều kiện truy vấn tƣơng ứng có nhãn là {f1, f2, “head”}.

2.2. Tối ƣu hoá truy vấn CSDL hƣớng đối tƣợng bằng siêu đồ thị 2.2.1. Thuật toán khởi tạo siêu đồ thị 2.2.1. Thuật toán khởi tạo siêu đồ thị

Lƣợc đồ đối tƣợng S đƣợc biểu diễn hình thức là: S = (s1, …, sn), si là các lớp trong S và truy vấn đối tƣợng QE = (s1, …, sm, R, p1, …, pk), trong đó si (i = 1,…, m) là các lớp tham gia truy vấn (lấy ở mệnh đề From), R là điều kiện của truy vấn (lấy ở mệnh đề Select) và pj (j = 1, …, k) là các biểu thức điều kiện ở mệnh đề Where.

Thuật toán 2.1: Khởi tạo siêu đồ thị của truy vấn đối tƣợng (không chứa truy vấn lồng).

Đầu vào:Lƣợc đồ đối tƣợngS = (s1, …, sn),

Truy vấn đối tƣợng QE = (s1, …, sm, R, p1, …, pk)

Đầu ra:Siêu đồ thị H

Phương pháp:

(1) SC :=  // tập chứa các siêu cạnh đối tượng của siêu đồ thị H

(2) V := (s1, …, sm) // tập các đối tượng

(3) WhilesiV

(4) if (si là siêu lớp gốc) then

// không kế thừa từ các siêu lớp khác

(5) Khởi tạo siêu cạnh đối tƣợng e := sH({si}) và gán nhãn lbH(e) (6) else if (si là lớp kế thừa đơn hoặc kế thừa bội) then

(7) Xử lý trƣờng hợp xung đột về tên với các thuộc tính kế thừa

(8) Khởi tạo lớp si‟ chứa các thuộc tính của lớp và thuộc tính kế thừa (9) Khởi tạo siêu cạnh đối tƣợng e := sH({si‟}) và gán nhãn lbH(e)

(10) SC := SC e

(11) Khởi tạo siêu cạnh đỉnh h := sH({R}) và lbH(h) := “head” (12) SC := SC h

(13) SD :=  //tập chứa các siêu cạnh điều kiện của siêu đồ thị H

(14) P: = (p1, …, pk) (15) While pj  P

(16) if ( pj có dạng (2.3) và (2.4)) then

(17) Khởi tạo siêu cạnh điều kiện f := sH({pj})

(18) SD := SD f

(19) else Gán nhãn cho nút lbH(e) := “=a” (20) H := SC  SD

Từ thuật toán khởi tạo siêu đồ thị của truy vấn đối tƣợng (không chứa các truy vấn lồng) đƣợc xây dựng ở trên, ta tiến hành xây dựng thuật toán khởi tạo siêu đồ thị của truy vấn đối tƣợng có chứa các truy vấn lồng. Siêu đồ thị của truy vấn đối tƣợng có chứa truy vấn lồng đƣợc tạo ra từ các liên kết của các siêu đồ thị đơn với các siêu cạnh kết nhập.

Thuật toán 2.2: Khởi tạo siêu đồ thị của truy vấn đối tƣợng lồng

Đầu vào: Lƣợc đồ đối tƣợng S = (s1,...,sm),

Truy vấn đối tƣợng QE = (s1,..., sr, R, p1,...,pk), Tập T  {is, in, union, diff, forall, exists,...}

Đầu ra: Siêu đồ thị H

Phương pháp:

(1) H := 

(2) QE := (s1, …, sr, R, p1, …, pk) (3) While (QEi QE)

(4) Khởi tạo siêu đồ thị Hi với mỗi QEi(thuật toán 2.1)

(5) H := H  Hi

(6) T := {is, in, union, diff, forall, exists,...} (7) While (ti  T)

(8) Khởi tạo siêu cạnh kết nhập g có nhãn là ti, có vế trái là thuộc tính tham chiếu và vế phải là một truy vấn hay một vùng dữ liệu thuộc lớp.

(9) H := H  g

Truy vấn lồng OQL đƣợc kết nối từ các siêu đồ thị của các khối Select …From …Where… bởi các siêu cạnh kết nhấp.

2.2.2. Ví dụ minh họa

Để thống nhất trong trình bày các ví dụ của luận văn, tôi sử dụng CSDL quản lý nhân viên đƣợc minh họa nhƣ sau:

Class NhanSu

type tuple ( manhansu: string[10]; hoten: string[20]; gioitinh: string[10]; diachi: string[20];

ngaysinh: tuple (ngay: integer; thang: integer; nam: integer ) sonamcongtac: integer;

luongCB: double)

Class NhanVien inherits NhanSu

type tuple ( nql: string[20]; // nql – người quản lý phongban: PhongBan;

duan: set( DuAn))

Class QuanLy inherits NhanSu

type tuple ( chucvu: string[10];

PCCV: double; //PCCV – phụ cấp chức vụ phongban: PhongBan; duan: DuAn; ngayBĐ: datetime; ngayKT: datetime) Class PhongBan

type tuple ( maphongban: string[10]; tenphongban: string[20]; truongphong: string[20]; sonhanvien: integer )

Class DuAn

Type tuple ( maduan: string[10; tenduan: string[20]; phong: PhongBan; SoNV: int; Ngaybatdau: Datetime; Ngayketthuc: Datetime; kinhphi: double )

2.2.2.1. Biểu diễn các truy vấn đối tƣợng bằng siêu đồ thị

Ví dụ 2.2: Cho biết họ tên tất cả các nhân viên thuộc phòng “Truyền thông”

Select s.hoten

From NhanVien as s, PhongBan as k

Where k.tenphongban = “Truyền thông” and s.phongban = k.maphongban

Truy vấn trên đƣợc viết lại với toán tử EXISTS

Select s.hoten

From NhanVien as s Where EXISTS ( Select *

From PhongBan as k

Where k.tenphongban = “Truyền thông” and s.phongban = k.maphongban )

(a)

(b)

Toán tử EXISTS là toán tử so sánh trên tập hợp. Nó cho phép chúng ta kiểm tra một giá trị nào đó có tồn tại trong một tập hợp không. Vì thế, với mỗi Nhân viên s ta kiểm tra giá trị này trên tập các dòng của Phòng ban k xem có rỗng không. Nếu không rỗng tức là nhân viên s thuộc phòng “Truyền thông” và ta đƣa ra họ tên của nhân viên đó.

Thuộc tính phongban là thuộc tính có kiểu PhongBan, kết nối hàm giữa thuộc tính phongban với lớp PhongBan đƣợc biểu diễn bằng một siêu cạnh kết nhập với lƣợng từ EXISTS). Truy vấn trên đƣợc biểu diễn bằng siêu đồ thị kết nối nhƣ sau:

Hình 2.3. Siêu đồ thị kết nối của ví dụ 2.2

2.2.2.2. Biểu diễn các truy vấn lồng bằng siêu đồ thị kết nối

Ví dụ 2.3: Tìm tất cả các nhân viên có lƣơng cao nhất thuộc phòng “Truyền thông”

Select s.hoten, s.luongCB

From NhanVien as s, PhongBan as g Where g.tenphongban = “Truyền thông”

and s.phongban = g.maphongban

and s.luongCB = (Select max(k.luongCB) From NhanVien as k

Where k.manhansu = s.manhansu)

Với câu truy vấn trên ta có thể thực hiện lần lƣợt các bƣớc biểu diễn siêu đồ thị nhƣ sau. Trƣớc tiên, chúng ta biểu diễn riêng cho từng siêu đồ thị kết nối với hai khối SFW (a) và (b). max(luongCB) phongban ... NhanVien head (a) hoten phongban ….. NhanVien maphongban tenphongban … ….. PhongBan head EXISTS „=“Truyền thông”‟

Sau đó thực hiện việc “trộn” hai siêu đồ thị kết nối thành một siêu đồ thị kết quả (c) bằng phép kết nối s.manhansu = k.manhansu và các biểu thức điều kiện tƣơng ứng.

Hình 2.4. Siêu đồ thị kết nối của ví dụ 2.3.

Ví dụ 2.4: Cho biết tên các nhân viên có mức lƣơng thu nhập lớn hơn hoặc bằng 10 triệu và tham gia các dự án có kinh phí lớn hơn hoặc bằng 200 triệu.

Select g.hoten From QuanLy as g

Where g.luongCB  10.000.000

and g.duan IN ( Select k.tenduan

From DuAn as k

Where k.kinhphi  200.000.000)

Tƣơng tự nhƣ ví dụ 2.3, ta cũng xác định lần lƣợt các siêu đồ thị con cho từng khối SFW. Và truy vấn đƣợc biểu diễn bằng siêu đồ thị kết nối nhƣ sau: Các siêu cạnh đối tƣợng biểu diễn các lớp QuanLyDuAn. Đối với các siêu cạnh đỉnh, chúng ta có 2 siêu cạnh đỉnh: g.hoten là siêu cạnh đỉnh của khối SFW thứ nhất (kết quả của truy vấn) và k.tenduan là siêu cạnh đỉnh của khối SFW thứ hai cũng là khối SFW

hoten luongCB phongban …

head head NhanVien

(b) tenphongban

...

PhongBan

„=“Truyền thông”‟

hoten luongCB manhansu … phongban

head NhanVien ... Max(luongCB) = tenphongban ... NhanVien PhongBan head (c) „=“Truyền thông”‟

lồng. Hai siêu cạnh điều kiện g.luongCB  10.000.000; k.kinhphi  200.000.000 và siêu cạnh kết nhập g.duan IN k.tenduan đƣợc gán nhãn là IN.

Hình 2.5. Siêu đồ thị kết nối của ví dụ 2.4

2.2.3. Phƣơng pháp ƣớc lƣợng siêu đồ thị

Sau khi đã khởi tạo đƣợc siêu đồ thị, ta dựa vào dãy các sự kiện của bài toán đặt ra, tiến hành ƣớc lƣợng các siêu cạnh trong siêu đồ thị. Khi tất cả các siêu cạnh trong siêu đồ thị đƣợc ƣớc lƣợng, chiếu lên tập các thuộc tính cần xác định trong yêu cầu ta có câu trả lời của truy vấn [3].

2.2.3.1. Ƣớc lƣợng các siêu cạnh trong siêu đồ thị

Đị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))

Một phần của tài liệu (LUẬN văn THẠC sĩ) tối ưu hóa truy vấn cơ sở dữ liệu hướng đối tượng (Trang 36)

Tải bản đầy đủ (PDF)

(80 trang)