Ngôn ngữ truy vấn đối tƣợng OQL

Một phần của tài liệu TỐi ưu HÓA TRUY VẤN CƠ SỞ DỮ LIỆU Hướng ĐỐI TưỢNG (Trang 27)

Trong các hệ thống CSDL hƣớng đối tƣợng, các câu truy vấn hƣớng đối tƣợng OQL (Object Query Language) đƣợc biểu diễn giống nhƣ trong SQL [14], [19], [20]. OQL là một ngôn ngữ truy vấn CSDL hƣớng đối tƣợng đƣợc đề xuất trong ODMG- 93. OQL cung cấp một môi trƣờng phong phú để truy vấn CSDL đối tƣợng một cách hiệu quả, kể cả những cơ sở mức cao đối với các tập đối tƣợng. OQL là ngôn ngữ truy vấn không đƣa ra môi trƣờng lập trình đầy đủ cho các tính toán phức tạp. Vì vậy, để tăng khả năng tính toán cho OQL cần phải liên kết với các ngôn ngữ lập trình khác.

OQL đƣợc dùng để mô tả truy vấn và các thao tác của đối tƣợng; Ngôn ngữ định nghĩa đối tƣợng (ODL): sử dụng mã OQL để định nghĩa giao diện với các kiểu đối tƣợng; Các ngôn ngữ lập trình khác nhƣ C++, Smalltalk và Java đƣợc dùng để cài đặt các phƣơng thức và các chƣơng trình ứng dụng. Đồng thời có thể nhúng các câu lệnh OQL trong các thao tác theo mô hình CSDL hƣớng đối tƣợng.

OQL đƣợc thiết kế theo hƣớng phát triển kế thừa, đó là thiết kế một ngôn ngữ mới đầy đủ dựa trên SQL - ngôn ngữ chuẩn của CSDL quan hệ. Thiết kế của OQL ở dạng hàm, kết quả của truy vấn có kiểu, điều này cho phép kết quả của truy vấn này là đầu vào của một truy vấn khác, vì vậy các truy vấn phức tạp có thể đƣợc xây dựng bằng OQL. Bằng cách tích hợp các tính năng của SQL, OQL xây dựng trên nền tảng của CSDL quan hệ. Mục đích của mô hình ODMG là duy trì một mức độ tƣơng thích giữa kỹ thuật CSDL hƣớng đối tƣợng và kỹ thuật CSDL đối tƣợng quan hệ bằng cách tích hợp các tính năng của phiên bản tiếp theo SQL trong phiên bản mới của OQL.

1.4.3.1. OQL lõi

OQL là ngôn ngữ truy vấn đối tƣợng đƣợc ODMG xây dựng để hỗ trợ mô hình dữ liệu đối tƣợng chuẩn [14], [19].

Văn phạm của OQL có các qui tắc dẫn xuất: q ::= b | f | i | c |s

| x

| bag(q, …, q) | set(q, …, q) | list(q, …, q) | array(q, …, q) | dictionary((q, q) , …, (q, q)) | struct(l: q; : : : ; l: q) | C(l: q, …, l: q) | q:l | (C)q | q[q] | q in q | q() | q(q, …, q) | forall x in q: q | exists x in q: q | q binop q | unop (q) | select [distinct] q from (q as x, …, q as x) where q

[group by (l: q, …, l: q)] [having q]

[order by (q asc|desc, …, q asc|desc)]

Định nghĩa kiểu: Trong OQL ta có thể đặt tên các định nghĩa theo cú pháp

d ::= define x as q

| define x(x: , …, ) as q

Trong đó b, f, i, c, s là các giá trị boolean, float, int, char và String tƣơng ứng, x là tập đếm đƣợc các định danh, l là tập đếm đƣợc các nhãn (set of labels), và C tập đếm đƣợc tên gọi các lớp, unopbinop là tập các phép toán 1-ngôi, 2-ngôi

 Các phép toán một ngôi unop = {first, last, max, min, avg, sum, count, distinct, listtoset, element, flatten, abs, not, -}

 Các phép toán hai ngôi binop = {and, or, intersect, union, except, =, !=, <, >, <=, >=, + -, *, /, ||, mod}.

1.4.3.2. Các kiểu dữ liệu trong OQL

Lƣợc đồ suy dẫn kiểu trong ngôn ngữ truy vấn OQL

Hệ thống các kiểu dữ liệu nguyên thuỷ và các kiểu dữ liệu suy dẫn gắn với phân cấp kiểu đƣợc giới thiệu trong hình 1.6. Trên cây phân cấp, chúng ta nhận thấy rằng các kiểu tổng quát là các nút nằm ở nút nhánh trên cây, các kiểu này sẽ không đƣợc sử dụng trong các lƣợc đồ CSDL (khai báo hình thức). Kiểu đƣợc gọi là kiểu đặc trưng, nếu nó đƣợc suy dẫn từ các kiểu hệ thống, tất cả các nút lá trong hình 1.6 là các kiểu đặc trƣng.

Hình 1.6 . Sự phân cấp các kiểu trong OQL

Siêu kiểu Any

Kiểu phi thủ tục Kiểu hàm

Kiểu nguyên thuỷ Kiểu cấu trúc Kiểu sƣu tập

boolean Kiểu có thứ tự class struct set/bag list/array

string int/float char set bag list aray

1.4.3.3. Truy vấn Select … From … Where

Cú pháp của khối lệnh trọng tâm Select trong OQL đƣợc qui định nhƣ sau [19].

Select [distinct] <Danh sách kết quả>

From <Danh sách lớp/sƣu tập lớp>

Where <Biểu thức điều kiện>

[Group by <Các thuộc tính phân nhóm>] [Having <Điều kiện lọc>]

[Order by (<Khoá sắp xếp> asc|desc, …)]

Trong đó, từ khoá distinct nếu sử dụng thì kết quả của truy vấn có kiểu tập đối tƣợng phân biệt. Mệnh đề group by phân nhóm trên lớp sƣu tập, các đối tƣợng đƣợc nhóm theo giá trị của các thuộc tính phân nhóm. Mỗi cấu trúc của nhóm chứa một nhóm các thuộc tính và nhóm các đối tƣợng có cùng giá trị. Mệnh đề order by sắpthứ tự các đối tƣợng trong lớp sƣu tập kết quả.

Để truy nhập các đặc trƣng của đối tƣợng ta sử dụng tên của đối tƣợng kết hợp với tên các đặc trƣng của đối tƣợng (thuộc tính, mối quan hệ và các phép toán) để truy nhập vào các thành phần của một đối tƣợng hoặc các đặc tính liên quan đến nó. Kiểu miền của một thuộc tính của một lớp có thể là một lớp khác. Điều này quy định việc đi từ các đối tƣợng của một lớp đến các đối tƣợng của một lớp khác thông qua các liên kết hợp thành.

Sử dụng lƣợc đồ CSDL quản lý nhân viên đƣợc biểu diễn trong Hình 1.7 minh hoạ cho các ví dụ về các dạng thức biểu diễn của truy vấn OQL.

+maso : string +hoten : string +ngaysinh : string +diachi : string +SNCT : int +Luongcoban : double NhanSu +nql : QuanLy +phong : PhongBan +duan : DuAn NhanVien +tenphong : string +dienthoai : string +ngansach : float +truongphong : QuanLy PhongBan +luonghđ : float NV_HopDong +hesoluong : float +namvao : int NV_BienChe +maduan : string +tenduan : string +chiphi : float DuAn +chucvu : string +luongquanly : double +phong : PhongBan +duan : DuAn QuanLy

Ví dụ 1.3. Cho biết tên của các nhân viên biên chế thuộc phòng do trƣởng phòng là “Nam” quản lý.

Select s.hoten

From NV_BienChe as s

Where s.PhongBan.truongphong.hoten = “Nam”

Cấu trúc nhƣ s.PhongBan.truongphong.hoten gọi là biểu thức đƣờng dẫn. Vì mỗi đối tƣợng có một OID, thuộc tính OID do hệ thống xác định đối với mỗi lớp. Do đó một biểu thức đƣờng dẫn có thể xem xét nhƣ một ký hiệu viết tắt đối với việc biểu diễn một dãy các phép nối. Chẳng hạn, mệnh đề Where ở ví dụ trên có thể viết tƣơng đƣơng nhƣ sau:

“s.PhongBan = PhongBan.OID and PhongBan.truongphong = PhongBan.OID and PhongBan.Hoten = „Nam”

1.4.3.4. Thuộc tính và lƣợng từ

Biểu thức lôgic trong OQL thực hiện việc kiểm tra trên các thành viên của một lớp sƣu tập. Các phép toán kiểm tra đƣợc sử dụng trong biểu thức lôgic là:

(i) forall – kiểm tra với một điều kiện đúng (true) cho tất cả các đối tƣợng chứa trong lớp sƣu tập.

(ii) exists – kiểm tra sự tồn tại của một đối tƣợng trong lớp sƣu tập thảo mãn một điều kiện cho trƣớc.

(iii) unique – kiểm tra tính duy nhất của các đối tƣợng trong lớp sƣu tập. (iv) in – kiểm tra một đối tƣợng có thuộc về một lớp sƣu tập hay không.

(v) some, anyall – đây là những lƣợng từ đƣợc dùng để so sánh sự ít nhất (some hay any) hay với mọi (all) cho các đối tƣợng thuộc (in) trong một lớp sƣu tập.

(vi) set inclusion – các phép toán so sánh bao hàm {<, <=, >, >=} áp dụng với Các lớp sƣu tập để kiểm tra sự bao hàm của một lớp sƣu tập này và lớp kia. Cú pháp của truy vấn có lƣợng từ forall, existsin là:

<Truy vấn> ::= forall <Truy vấn> in <Truy vấn> : <Truy vấn> | exists <Tên> in <Truy vấn> : <Truy vấn>

| exists | unique (<Truy vấn>)

| <Truy vấn> <Phép toán so sánh> [some | any | all] <Truy vấn>

Các vị từ trong truy vấn CSDL hƣớng đối tƣợng có thể đƣợc thiết lập bằng cách sử dụng các thuộc tính tập hợp và phép toán thành viên in. Một số ví dụ về lƣợng từ.

Ví dụ 1.4

Select e.hoten

From NhanVien as e Where „Hà Nội‟ IN e.diachi

Truy vấn trên có thể đƣợc viết lại bằng cách sử dụng lƣợng từ EXISTS nhƣ sau:

Ví dụ 1.5: Select k.hoten

From NhanVien as e

Where e. EXISTS diachi = “Hà Nội”

Lƣợng từ với mọi forall có thể đƣợc áp dụng cho các thuộc tính tập đối với các dạng vị từ. Đƣờng dẫn không chứa thuộc tính tập hợp gọi là đơn trị, ngƣợc lại gọi là giá trị - tập. Các vị từ có thể sử dụng trong các biểu thức đƣờng dẫn.

Ví dụ 1.6. Biểu thức đƣờng dẫn có thể có nhiều hơn một lƣợng từ với sự kết hợp giữa

exist forall.

Select e.phongban From PhongBan as e

Where e. EXISTS phongban.forall DU_AN.tenduan = “ Bảo trì”

1.4.3.5. Biến tham chiếu

Biến vùng mô tả cho một biểu thức đƣờng dẫn có thuộc tính cuối cùng là một thuộc tính phức đƣợc gọi là biến tham chiếu. Ngƣời ta sử dụng các biến vùng biểu diễn cho các đối tƣợng của lớp trong một biểu thức đƣờng dẫn.

Ví dụ 1.7: Select s.tenphong

From PhongBan as s, s.duan as f Where s.ngansach < f.chiphi

Trong đó, f là một biết tham chiếu đến các đối tƣợng thuộc lớp PhongBan. Ví dụ trên có thể đƣợc viết tƣơng đƣơng nhƣ sau:

Select s.tenphong From PhongBan as s

Where s.ngansach < s.duan.chiphi

1.4.3.6. Phƣơng thức tham chiếu

Phƣơng thức trong truy vấn OQL đƣợc thể hiện qua hai dạng. Dạng thứ nhất là

phương thức thuộc tính – suy dẫn, sử dụng để tính giá trị cho mỗi đối tƣợng trong lớp mà phƣơng thức tác động. Phƣơng thức thuộc tính – suy dẫn có thể đƣợc sử dụng giống nhƣ một thuộc tính trong truy vấn. Dạng thứ hai là phương thức tân từ, trả về một giá trị kiểu boolean đối với mỗi đối tƣợng trong lớp. Ví dụ, ta có phƣơng thức “VienDaiHoc() : Boolean” trên lớp DaiHoc, phƣơng thức này trả về giá trị true nếu Đại học có trên 5 trƣờng thành viên hoặc trên 30.000 sinh viên và false nếu ngƣợc lại.

1.4.3.7. Kết xuất một cấu trúc

Mô hình dữ liệu hƣớng đối tƣợng cho phép sử dụng các đối tƣợng có cấu trúc tập, danh sách và bộ để thiết lập các đối tƣợng phức từ các đối tƣợng đơn. Ngôn ngữ truy vấn OQL cho phép thiết lập các giá trị phức trong kết quả trả về của một truy vấn

bằng việc dùng các phép toán thiết lập kiểu đối tƣợng phức ở mệnh đề Select với cú pháp:

<Truy vấn>::= struct ([<Định danh>:<Truy vấn> [, <Định danh>:<Truy vấn> ] *] ) |set | bag | list | array ([<Truy vấn> [,<Truy vấn>]*] )

Ví dụ 1.8.

Select tuple(maso : s.maso, hoten : s.hoten, Baotri: select c

from s.DuAn as c

where c.tenduan = “Bảo trì”) From NhanVien as s

Where s.hesoluong >2,5

Một phần của tài liệu TỐi ưu HÓA TRUY VẤN CƠ SỞ DỮ LIỆU Hướng ĐỐI TưỢNG (Trang 27)

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

(80 trang)