Đưa ra giải thuật ước lượng siêu cạnh cho các trường hợp tách biệt hay liên thông của các siêu đồ thị con hợp thành siêu đồ thị mà biểu diễn cho một truy vấn đối tượng lồng.. Cú pháp của
Trang 1Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Phạm Thị Huệ
TỐI ƯU HÓA TRUY VẤN ĐỐI VỚI CƠ SỞ DỮ LIỆU
HƯỚNG ĐỐI TƯỢNG
LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH
Trang 2Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
ĐẠI HỌC THÁI NGUYÊN KHOA CÔNG NGHỆ THÔNG TIN
Phạm Thị Huệ
TỐI ƯU HÓA TRUY VẤN ĐỐI VỚI CƠ SỞ DỮ
LIỆU HƯỚNG ĐỐI TƯỢNG
Chuyên ngành: Khoa học máy tính
Mã số: 604801
LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH
NGƯỜI HƯỚNG DẪN KHOA HỌC: PGS.TS Đoàn Văn Ban
Thái Nguyên - 2010
Trang 3LỜI NÓI ĐẦU
Hiện nay công nghệ thông tin đã trở thành lĩnh vực không thể thiếu được cho cuộc sống của con người Từ khi ra đời công nghệ thông tin đã không ngừng phát triển, nó từng bước thể hiện vai trong các ngành nghề: Y tế, quân
sự, giáo dục, văn hoá … Cơ sở dữ liệu là một lĩnh vực quan trọng của Công nghệ thông tin
Việc tìm kiếm và xây dựng các phần mềm ứng dụng phục vụ nhu cầu của
xã hội các nhà chuyên môn luôn hướng tới mục đích đáp ứng được các bài toán phức tạp như CSDL cho WebCSDL multimedia, CSDL phân tán… đồng thời tốc độ xử lý phải nhanh và chính xác Xuất phát từ nhu cầu đó, các nhà nghiên cứu không ngừng tìm tòi, cải tiến và đưa ra mô hình dữ liệu với khả năng ứng dụng cho các đối tượng phức, khả năng mở rộng kế thừa Mô hình CSDL hướng đối tượng, với cách tiếp cận mới là giải pháp tốt cho các CSDL ứng dụng phức tạp đó
Trong những năm gần đây, việc phát triển các ngôn ngữ CSDL trên các
hệ thống CSDL hướng đối tượng được xem là một hướng nghiên cứu quan trọng Các ngôn ngữ CSDL được mở rộng theo hướng tích hợp với ngôn ngữ lập trình hướng đối tượng, điều này tạo điều kiện cho các hệ thống tăng khả năng tính toán phức tạp và xây dựng giao diện lập trình hướng đối tượng Một trong những hướng nghiên cứu quan trọng được đề cập trong hệ thống CSDL hướng đối tượng là tối ưu hoá truy vấn hướng đối tượng Với một truy vấn sẽ tồn tại nhiều phương án mà hệ thống CSDL cho phép xử lý và đưa ra kết quả theo yêu cầu Việc tối ưu hoá truy vấn sẽ cho chúng ta lựa chọn phương án nào có tổng thời gian thực hiện truy vấn hiệu quả nhất Hiện nay
đã có rất nhiều các kết quả nghiên cứu về phát triển ngôn ngữ hướng đối
Trang 4tượng và biên dịch truy vấn tương đương từ truy vấn hướng đối tượng sang quy vấn quan hệ
Xuất phát từ nhu cầu cấp thiết của việc nghiên, mở rộng ngôn ngữ hướng đối tượng, biên dịch truy vấn và tối ưu hoá truy vấn quan hệ cùng các kết quả nghiên cứu của nhiều tác giả Đoàn Văn Ban, Hoàng Bảo Hùng, Lê Mạnh Thạnh… tôi đã chọn đề tài luận văn: “Tối ưu hoá truy vấn đối với CSDL hướng đối tượng” Nội dung luận văn bao gồm phần mở đầu, kết luận và bốn chương
Chương 1 trình bày kiến thức nền tảng của mô hình dữ liệu hướng đối tượng như định danh đối tượng, kiểu, lớp, lược đồ mối quan hệ kế thừa phương thức
Chương 2 Tìm hiểu Ngôn ngữ truy vấn OQL và đại số đối tượng tương ứng
được chọn làm cơ sở cho những nghiên cứu, mở rộng các thuật toán tối ưu hoá truy vấn đối tượng và là công cụ minh hoạ cho các thuật toán tối ưu hoá truy vấn được đề xuất trong chương 3
Chương 3 giới thiệu và trình bày khái niệm siêu đồ thị kết nối đối tượng Sau
đó sử dụng ký pháp siêu đồ thị để biểu diễn truy vấn OQL Xây dựng giải thuật khởi tạo siêu đồ thị trong các trường hợp truy vấn đối tượng đơn và lồng Đưa ra giải thuật ước lượng siêu cạnh cho các trường hợp tách biệt hay liên thông của các siêu đồ thị con hợp thành siêu đồ thị mà biểu diễn cho một truy vấn đối tượng lồng
Chương 4 cài đăt mô phỏng thuật toán chuyển đổi lược đồ đối tượng sang lược đồ quan hệ nhúng
Trang 5Chương 1: CÁC KHÁI NIỆM CƠ BẢN VỀ CƠ SỞ DỮ LIỆU HƯỚNG
ĐỐI TƯỢNG 1.1 Đối tượng, lớp và định danh đối tượng
1.1.1 Đối tượng và định danh đối tượng
Khái niệm cơ bản nhất của mô hình hướng đối tượng (HĐT) là đối tượng Đối tượng [1], [2] là một khái niệm, một sự trừu tượng hoá, hay một
sự vật có nghĩa trong bài toán đang khảo sát Đó chính là các mục mà ta đang nghiên cứu, đang thảo luận về chúng Đối tượng là thực thể của hệ thống, của CSDL và được xác định thông qua định danh của chúng Thông thường các đối tượng được mô tả bởi các danh từ riêng hoặc được tham chiếu tới trong các mô tả của bài toán hay trong các thảo luận với người sử dụng Có những đối tượng là những thực thể có trong thế giới thực như người, sự vật cụ thể, hoặc là những khái niệm như một công thức, hay khái niệm trừu tượng, v.v…
Có những đối tượng được bổ sung vào hệ thống với lý do phục vụ cho việc cài đặt và có thể không có trong thực tế
Mỗi đối tượng có thể được biểu thị bởi bộ ba (oid, class_name, value) Trong đó oid là giá trị thuộc tính định danh OID của đối tượng class_name là tên lớp chứa đối tượng này và value là giá trị của đối tượng đó
1.1.2 Lớp đối tượng
Đối tượng là một thể hiện, một đại biểu của một lớp Lớp là một mô tả
về một nhóm các đối tượng có những tính chất (thuộc tính) giống nhau, có chung các hành vi ứng xử (thao tác gần như nhau) có cùng mối liên quan với các đối tượng khác và có chung ngữ nghĩa trong hệ thống Lớp thường xuất hiện dưới dạng những danh từ chung trong các tài liệu mô tả bài toán hay trong các thảo luận với người sử dụng Cũng như các đối tượng, lớp có thể là
Trang 6những nhóm thực thể có trong thế giới thực, cũng có những lớp là khái niệm trừu tượng và có những lớp được đưa trong thiết kế phục vụ cho vài đặt hệ thống vv…
Một cách hình thức, ta có một số ký hiệu được qui ước như sau:
Alloid: Tập tất cả các định danh đối tượng
Các giá trị trên tập các đối tượng (0) được định nghĩa như sau:
Một phần tử thuộc D hoặc thuộc Alloid là một giá trị được gọi là giá trị nguyên tố
Nếu v1, v2, …, vn là các giá trị và a1, a2, …, an là các tên thuộc tính, thì [a1: v1, a2 : v2, …, an : vn] là một giá trị được gọi là giá trị bộ
Nếu v1, v2,…, vn là các giá trị phân biệt thì {v1, v2, …, vn} là một giá trị được gọi là giá trị tập
Khái niệm về kiểu trên tập các lớp (C) cũng được định nghĩa như sau:
Interger, Real, String, Boolean là các kiểu gọi là kiểu nguyên tố
Nếu T1, T2,…, Tn là các kiểu và a1, a2, , an là các tên thuộc tính phân biệt của C thì [a1: T1, a2: T2, , an: Tn ] cũng là một kiểu còn gọi là kiểu
bộ
Trang 7 Nếu T là một biểu thức kiểu, thì {T} hoặc Set(T) cũng là kiểu còn được
gọi là kiểu tập
1.1.2 1.1.4 Thuộc tính thao tác và phương thức
Mỗi thuộc tính có thể là thuộc tính đơn trị hoặc thuộc tính đa trị Trái
với thuộc tính đơn trị, một thể hiện của thuộc tính đa trị là tương ứng với một
tập các giá trị
Ví dụ.1.1: Về thuộc tính đơn và đa trị
Class HoSo
Type tuple (mahs: int, hoten: char, thanhpho: char, ngaysinh:
tuple(ngay, thang, nam))
Class NhanVien inherits HoSo
Type tuple (manv: int, luong: float, thuong: float, tenphong: Phong)
Class Phong
Type tuple(maphong: int, tenphong: char, diadiem: char)
NhanVien là lớp được kế thừa từ lớp HoSo, có thuộc tính tenphong là
thuộc tính tham chiếu đối tượng đến lớp Phong, ngaysinh là thuộc tính đa trị,
các thuộc tính còn lại là đơn trị
Một thuộc tính có trong một lớp còn có thể là thuộc tính phức hợp, là
thuộc tính được xây dựng là tập các thuộc tính khác Việc khai báo một thuộc
tính phức hợp được thực hiện bằng toán tử xây dựng tuple (bộ)
Formatted: cap2, Left, Line spacing: single,
No bullets or numbering
Formatted: Bulleted + Level: 1 + Aligned at:
0.25" + Tab after: 0.5" + Indent at: 0.5"
Formatted: Indent: First line: 0.5"
Trang 8Thao tác (operation) là một hàm hay thủ tục có thể áp dụng (gọi hàm) cho hoặc bởi các đối tượng trong một lớp Khi nói tới một thao tác là ngầm định nói tới một đối tượng đích để thực hiện thao tác đó Ví dụ, thao tác (hàm)
hienthi() của lớp MonHoc khi gọi để hiển thị về các sinh viên học một môn học cụ thể như Lập trình hướng đối tượng chẳng hạn
Một phương thức là một cách thức cài đặt của một thao tác trong một lớp
Một số thao tác có thể là đa xạ, được nạp chồng, nghĩa là nó có thể áp dụng cho nhiều lớp khác nhau với những nội dung thực hiện có thể khác
nhau, nhưng cùng tên gọi Ví dụ lớp ThietBi có hàm tinhgia() Hàm này có
thể nạp chồng (đa xạ) bởi vì có nhiều phương thức (công thức) tính giá bán khác nhau tuỳ thuộc từng loại thiết bị Tất cả các phương thức này đều thực hiện một nhiệm vụ tinhgia(), nhưng được cài đặt với nội dung (các đoạn chương trình) khác nhau Hệ thống hướng đối tượng tự động chọn phương thức tương ứng với ngữ cảnh của đối tượng để thực hiện
Việc khai báo các toán tử hay các phương thức sử dụng từ khoá operations của mỗi đối tượng thuộc một lớp đối tượng nhằm phản ánh các hành vi được thực hiện trên mỗi đối tượng thuộc lớp đó Mỗi phương thức nhằm đặc tả tên của phương thức, các tham số kèm kiểu dữ liệu của chúng, kiểu của phương thức và phần thân là phần chứa mã lệnh của phương thức Dưới đây là mẫu đặc tả cho một lớp thường được xây dựng như sau: Class <class name>
Trang 9Các đối tượng đều được đóng gói Có nghĩa là cấu trúc bên trong của
đối tượng được che giấu, người dùng chỉ có thể biết được các phương thức
thực hiện của đối tượng đó Các thao tác trên các giá trị của một đối tượng chỉ
được thực hiện thông qua các phương thức được định nghĩa trên đối tượng đó
Đây chính là tính đóng gói thông tin trong mô hình dữ liệu hướng đối tượng
Việc đóng gói thông tin độc lập với dữ liệu vật lý
Các phương thức được gọi bởi các thông điệp Một thông điệp về cơ
bản chỉ là một lời gọi đến một phương thức nào đó, trong đó tham số đích
được phân biệt và có cách xử lý riêng về cú pháp
1.2 1.2 Các mối quan hệ giữa các lớp
1.2.1 Sự phân cấp lớp
Các lớp trong mô hình hướng đối tượng có thể được tổ chức theo một
phân cấp lớp (Class hierarchy) Ta nói lớp C2 nếu tập các thuộc tính và
thời tập các đối tượng thuộc C2 là tập con của tập các đối tượng thuộc C1
Điều đó có nghĩa rằng một lớp con sẽ kế thừa tất cả các đặc tính cho phép của
lớp cha, ngoài ra các lớp con còn có thể bổ sung các đặc tính khác, bổ sung
các hàm hay viết để một số hàm được kế thừa Nguyên tắc này tạo thuận lợi
trong việc tái sử dụng các thuộc tính và các phương thức của lớp cha bên
trong các lớp con, cho phép tạo ra một hệ thống hiệu quả và tin cậy hơn
1.2.2 1.2.2 Sự kế thừa
Trong các mô hình hệ thống hướng đối tượng, một số hệ thống chỉ cho
phép một lớp con có tối đa một lớp cha, trong khi các hệ thống khác cho phép
một lớp con có thể có nhiều lớp cha Một lớp con kế thừa các thuộc tính và
các phương thức từ chỉ một lớp cho được gọi là kế thừa đơn, ngược lại một
Formatted: Indent: First line: 0.5"
Formatted: cap1, Left, Line spacing: single,
No bullets or numbering
Formatted: cap2, Left, Line spacing: single
Formatted: cap2, Left, Line spacing: single,
No bullets or numbering
Trang 10lớp con kế thừa các thuộc tính và phương thức từ nhiều hơn một lớp cha được
gọi là kế thừa bội
Việc khai báo một mối quan hệ kế thừa giữa một lớp con và một lớp
cha được thực hiện bằng cách sử dụng từ khoá inherits kèm tên lớp cha khi
định nghĩa lớp con đó
Ví dụ 1.2
Để định nghĩa lớp GiaoVien là lớp con của lớp Nguoi, theo cách này, ta
chỉ cần khai báo các thuộc tính và các phương thức được bổ sung cho lớp
Thông thường, các hệ thống quy định nếu một lớp không có lớp cho thì
sẽ được xem như là lớp con của lớp Object được định nghĩa bởi hệ thống
Quan hệ kế thừa tồn tại một số vấn đề sau:
cha của nó, và giữa các lớp cha của một lớp Nếu tên của một thuộc
tính hay một phương thức xung đột giữa một lớp con và lớp cha của nó
thì tên dùng trong lớp con được ưu tiên trước, tức thuộc tính và phương
thức đó của lớp cha không được kế thừa Đối với trường hợp xung đột
Formatted: Indent: First line: 0.5"
Trang 11về tên các thuộc tính và phương thức giữa các lớp cha, thông thường ta chọn một lớp cha trên cơ sở thứ tự về quyền ưu tiên trước Phần lớn các
hệ thống yêu cầu một thứ tự ưu tiên về tên giữa các lớp cha trong mô tả
sự phân cấp lớp, tuy nhiên một số hệ thống khác lại xác định thứ tự ưu tiên này khi thực hiện
thứ nhất là phạm vi tác động của sự kế thừa yêu cầu sẽ kế thừa đầy đủ hoặc cho phép kế thừa có chọn lọc Kế thừa đầy đủ có nghĩa một lớp kế thừa đầy đủ tất cả các thuộc tính và phương thức gây nên xung đột về tên Kế thừa có chọn lựa cho phép một lớp con không kế thừa một số thuộc tính và phương thức từ các lớp cha Mặc dù kế thừa có chọn lựa
có một số thuận lợi hơn nhưng hầu hết các hệ thống chấp nhận kế thừa đầy đủ vì kế thừa có chọn lựa có sự khó khăn là phải lưu vết kế thừa Hướng thứ hai là cho phép kế thừa các thuộc tính cùng tên nhưng khác đặc tả, cụ thể là đặc tả về kiểu
truy nhập trực tiếp đến các thuộc tính của một lớp cha từ một lớp con như các phép toán đổi tên hoặc xoá một thuộc tính thì có thể làm mất hiệu lực xác định trong lớp con mà chúng tham chiếu đến các thuộc tính đó Một hướng khắc phục là giới hạn việc truy cập đối với các thuộc tính của một lớp thông qua các phương thức xác định chúng Tóm lại, một lược đồ CSDL hướng đối tượng có thể được mô tả bởi một đồ thị phân cấp phức hợp Cụ thể mỗi nút của đồ thị là tương ứng với một lớp (kèm cấu trúc các thuộc tính) Nếu lớp C1 là lớp con của lớp C2 thì sẽ có một cung đi từ nút C1 đến nút C2 (sử dung cung nét đậm trên hình vẽ) Ngoài
ra bên trong đồ thị phân cấp này người ra còn biểu diễn mối quan hệ giữa các lớp Nếu lớp C1 có thuộc tính mối quan hệ A với kiểu dữ liệu là lớp C2, thì sẽ
Trang 12có một cung xuất phát từ thuộc tính A và trỏ vào tên lớp C2 (sử dụng cung nét mỏng) Các thuộc tính đa trị được đánh dấu * Bằng cách này ta có thể mô tả trực quan một lược đồ CSDL hướng đối tượng
1.3 Kết luận
Chương 1 trình bày các khái niệm về đối tượng, lớp, kiểu và sự kế thừa Đó là những kiến thức cần thiết để phục vụ cho các chương sau Ta thấy rằng CSDL hướng đối tượng tập chung xử lý về dữ liệu, nhằm làm cho chương trình trở nên linh hoạt, tin cậy và dễ phát triển Hơn thế tính đột phá của cơ sở dữ liệu hướng đối tượng là chúng cho phép người thiết kế đặc tả cấu trúc của các đối tượng cùng với các phương thức thực hiện trên đối tượng
đó
Trang 13Chương 2: NGÔN NGỮ TRUY VẤN OQL VÀ ĐẠI SỐ ĐỐI
1- OQL được dùng để mô tả truy vấn và các thao tác của đối tượng
2- Ngôn ngữ định nghĩa đối tượng (OQL): Sử dụng mã OQL để định nghĩa giao diện với các kiểu đối tượng
3- 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 trên CSDL đối tượng Trong (3) OQL được dùng như ngôn ngữ truy vấn nhúng, nó cũng có thể được sử dụng như một ngôn ngữ truy vấn độc lập, nghĩa là, người dùng có thể biểu diễn các thao tác CSDL đối tượng hoàn toàn bằng OQL mà không cần một chương trình nhúng nào được viết bằng ngôn ngữ lập trình khác 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 CSDL, 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 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 Mục đích của mô hình ODMG
Trang 14là 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 tương lai của SQL trong phiên bản tương lai của OQL
2.1.2 Kiểu và lƣợc đồ suy dẫn 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 2.1 Trên cây phân cấp, 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 Kiểu được gọi là kiểu đặc
trưng, nếu nó được suy dẫn từ các kiểu cơ sở.Tất các nút lá trong hình 2.1 là
các kiểu đặc trưng
Hình 2.1 Sự phân cấp các kiểu trong CSDL
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/ B ag List/array
S tring i nt/float char set bag list array
int float
Siêu kiểu
Siêu phi thủ tục Kiểu hàm
Formatted: Tab stops: 0.74", Left
Formatted: Tab stops: 1.71", Left + 1.93",
Left + 3.57", Left
Formatted: Centered Formatted: Font: Times New Roman, 12 pt
Formatted: Centered Formatted: Font: Times New Roman, 12 pt
Formatted: Centered Formatted: Font: Times New Roman, 12 pt
Formatted: Font: Times New Roman, 12 pt Formatted: Centered
Formatted: Font: Times New Roman, 12 pt
Formatted: Font: Times New Roman, 12 pt
Formatted: Font: Times New Roman, 12 pt Formatted: Font: Times New Roman, 12 pt Formatted: Font: Times New Roman, 12 pt
Formatted: Centered Formatted: Font: Times New Roman, 12 pt Formatted: Font: Times New Roman, 12 pt Formatted: Centered
Formatted: Font: Times New Roman, 12 pt Formatted: Font: Times New Roman, 12 pt Formatted: Font: Times New Roman, 12 pt Formatted: Centered
Formatted: Font: Times New Roman, 12 pt Formatted: Centered
Formatted: Font: Times New Roman, 12 pt
Formatted: Centered Formatted: Font: Times New Roman, 12 pt Formatted: Centered
Formatted: Font: Times New Roman, 12 pt
Formatted: Font: 12 pt
Formatted: Centered Formatted: Font: Times New Roman, 12 pt
Formatted: Centered Formatted: Font: 12 pt
Formatted: Font: Times New Roman, 12 pt Formatted: Centered
Formatted: Font: Times New Roman, 12 pt
Trang 152.1.3 Thuộc tính và lƣợng từ
Biểu thức lôgic trong OQL [14] 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 logic là:
1 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
2 exis ts - kiểm tra sự tồn tại của một đối tượng trong lớp sưu tập thoả
mãn một điều kiện cho trước
3 unique - kiểm tra tính duy nhất của các đối tượng trong lớp sưu tập
4 in - kiểm tra một đối tượng có thuộc về một lớp sưu tập hay không
5 some, any và all – đâ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
6 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, exits và in là:
<Truy vấn>:: =forall<Truy vấn>in<Truy vấn>:<Truy vấn>
|exits<Tên>in <Truy vấn>:<Truy vấn>
|exits | 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
Formatted: Indent: First line: 1.13"
Formatted: Indent: Left: 1.13", Hanging:
4.38"
Trang 16Một số ví dụ về lƣợng từ:
Ví dụ 2.1
select f.hoten
from Khoa as f
where „Am nhac‟ in f.so_thich
Truy vấn trên có thể được viết lại bằng cách sử dụng lượng từ exits như sau:
Ví dụ 2.2
select f.hoten
from Khoa as f
where exists so_thich = „Am nhac‟
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ụ 2 3
Select s.hoten
From SV chua TN as s
Where s.exists Khoahoc.DaiHoc.ten_nganh = “CNTT”
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
bất kỳ giữa exists và forall
Trang 172.1.4 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ụ 2 5
Select s.hoten
from SinhVienTN as s, s.gvdh as f
where s.tuoi > f.tuoi
Trong đó, f là một biến tham chiếu đến các đối tượng thuộc lớp
SinhVienTN
2.1.5 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 30000 sinh viên và false nếu ngược lại.3- Các ngô
2.2 Đại số đối tượng
Các phép toán đại số đối tượng được chia làm sáu loại: phép toán đối
tượng, phép toán bộ, phép toán tập hợp, phép toán “ túi” phép toán danh sách
và phép toán mảng [16]
Formatted: cap2, Left, Line spacing: single
Formatted: Indent: First line: 0.5"
Formatted: Font: Italic
Formatted: Font: Italic
Trang 182.2.1 Phép toán đối tƣợng
Mỗi đối tượng được biểu diễn như một bộ ba (oid, TênLớp, GiaTrị),
oid là định danh của đối tượng, TênLớp là kiểu của đối tượng và Giá trị của
đối tượng do người sử dụng định nghĩa thường là kiểu bộ Có ba phép toán đối tượng:
Chiếu theo định danh (0): Phép toán 0 nhận vào một đối tượng
và trả về định danh của đối tượng
Chiếu theo giá trị (v): Phép toán v nhận vào một đối tượng và trả về giá trị của đối tượng
Chiếu theo đối tượng (D): Phép toán D nhận vào một định danh đối tượng và trả về đối tượng có định danh tương ứng
Trang 19Hiệu của hai tập hợp: set_diff
Chọn trên tập hợp (s
s.f): Phép toán s
s.f nhận vào một tập (thường là một tập đối tượng) và trả về một tập (đối tượng) sao cho mỗi phần tử ở tập kết quả đều thoả mãn điều kiện của biểu thức f
Làm phẳng tập (set_ flat): phép toán set_flat nhận vào một tập các tập
và trả về một tập chứa phần hợp của các phần tử của các tập lồng nhau
_ . ( ( ))( )
) ,
2.2.4 Phép toán trên kiểu “túi” (bag)
Các phép toán trên kiểu dữ liệu “túi” gồm có: thiết lập “túi”, hợp, hiệu, chọn, làm phẳng, áp dụng hàm trên “túi”: bag, bag_union, bag_diff, b
s.f,
bag_flat, bag_apply và chuyển đổi một “túi” về tập: bagtoest (chuyển đổi một
“ túi”, về tập hợp bằng cách loại bỏ các trùng lặp trong “túi”)
Trang 202.2.5 Phép toán trên danh sách (list)
Thiết lập danh sách, lấy phần tử đầu tiên, lấy phần tử cuối cùng, ghép
danh sách chọn làm phẳng, áp dụng hàm là: list, first, last, list_cat, l
s.f,
list_flat, list_applys.e
2.2.6 Phép toán trên mảng (array)
Thiết lập mảng, ghép mảng, áp dụng: array, array_cat, array_applys.e
Trích xuất phẩn tử (i): phép toán này trả về phần tử thứ i trong mảng
đã cho
Chiếu mảng (i,j), j>i: phép toán trả về một mảng con chứa các phần tử
có chỉ số từ i đến j của mảng đã cho
2.3 Kết luận
Ngôn ngữ truy vấn đối tượng OQL trên mô hình ODMG, sử dụng các
phép toán đại số đối tượng trong OQL để viết lại các truy vấn đối tượng dưới
dạng các biểu thức đại số
Ngôn ngữ truy vấn đối tượng OQL và đại số đối tượng tương ứng được
chọn làm cơ sở cho những nghiên cứu, mở rộng các thuật toán tối ưu hoá truy
vấn đối tượng và là công cụ minh hoạ cho các thuật toán tối ưu hoá truy vấn
được đề xuất trong chương 3, như chuyển đổi truy vấn đối tượng OQL sang
truy vấn hệ SQL, biểu diễn tương đương giữa truy vấn OQL và biểu thức đại
số đối tượng, sắp xếp thứ tự ưu tiên thực hiện của các phép toán đại số đối
tượng, từ đó mở rộng thuật toán tối ưu hoá truy vấn đối tượng bằng phương
pháp biến đổi biểu thức đại số đối tượng…vv
Formatted: cap1, Left, Indent: First line: 0",
Line spacing: single
Formatted: Indent: First line: 0", Tab stops:
0.5", Left
Formatted: cap0, Left, Indent: First line: 0",
Line spacing: single
Trang 21Chương 3 : TỐI ƯU HOÁ TRUY VẤN TRONG CƠ SỞ DỮ
LIỆU HƯỚNG ĐỐI TƯỢNG
Xuất phát từ ý tưởng sử dụng ký pháp siêu đồ thị của J.D.Ullman [10]
và Han[15] đề xuất trong tối ưu hoá truy vấn quan hệ, chúng ta mở rộng trên CSDL hướng đối tượng với định nghĩa của siêu đồ thị kết nối đối tượng (sau đây gọi tắt là siêu đồ thị) Mặt khác, trên cơ sở của thuật toán tối ưu truy vấn của wong-youssefi, chúng ta bổ sung việc xử lý các yếu tố kết nhập trong truy vấn - Mở rộng thuật toán tối ưu hoá truy vấn bằng việc xây dựng thuật toán hình thức rút gọn siêu đồ thị nhằm ước lượng chi phi xử lý truy vấn cho truy vân đối tượng
từ mô hình CSDL quan hệ, như tối ưu hoá trên các biểu thức đại số [9] và các giải thuật QUEL/SQL bằng siêu đồ thị của J.D Ullman [10] và Han [15] Siêu
đồ thị là sự tổng quát hoá của một đồ thị, trong đó các cạnh tạo nên khi kết nối các đỉnh bất kỳ Một cách hình thức, một siêu đồ thị H là một cặp H = (X, E), trong đó X là tập hữu hạn các phần tử, được gọi là các nút hay các đỉnh và
E là một tập của các tập con không rổng thuộc X được gọi là các siêu cạnh hay các liên kết đỉnh Vì vậy, E là một tập con thuộc P(X)\{Ø}, trong đó P(X)
là tập lực lượng của X Cụ thể ta có siêu đồ thị được thể hiện như sau:
Trang 22Hình 3.1 Siêu đồ thị H
Siêu đồ thị H gồm:
X= {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ở đó, chúng ta đưa ra 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ừ đó, đề xuất 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
3.1.1 Siêu đồ thị kết nối đối tƣợng
Chúng ta định nghĩa một cách hình thức siêu đồ thị kết nối đối tượng như sau:
Định nghĩa 3.1: [7] Siêu đồ thị kết nối đối tượng là một bộ sáu H = (CH, VH,
Trang 23Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
(iv)(iii) LH là tập hữu hạn các nhãn
(v)(iv) EH = EC EQ - tập hữu hạn các siêu cạnh, trong đó ECEQ 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
(vi)(v) sH: VH -> EH là ánh xạ khởi tạo các siêu cạnh từ tập các nút (vii)(vi) LbH: EH -> LH là hàm gán nhãn cho siêu cạnhsao cho e
EH thì lhH(e) LH
Các truy vấn được viết bằng ngôn ngữ truy vấn OQL (ODMG-93) [3], [8] 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
Trang 24VH = {A, B, C, D, E, F, G, H} là tập các nút LH = {e1, e2 , e3, f1, f2,
“head”}
EH = EC EQ, với EC gồ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”}
3.2 Tối ưu hoá truy vấn hướng đối tượng bằng siêu đồ thị kết nối
3.2.1 Siêu đồ thị kết nối [7], [6], [15]
Môt siêu đồ thị H = (V, E) chứa một tập các đỉnh V và tập các siêu cạnh
E Trong đó, tập đỉnh V tương ứng với tập các mục dữ liệu (thuộc tính) và
nhau (lớpđiều kiện) Siêu đồ thị là sự mở rộng của một đồ thị mà mỗi siêu
cạnh của nó được kết nối từ tập các nút trong V Trước hết, chúng ta xét biểu
Trang 25thức điều kiện trong mệnh đề Where, các biểu thừc điều kiện gồm các dạng
A B, {is, in, union, diff, forall, exits,…} (3.5)
Trong đó, A, B là thuộc tính của các lớp và a là hằng
Truy vấn OQL đơn chỉ có một khối select…from…where (SFW); Truy vấn
OQL lồng có nhiều hơn 1 khối SFW Mỗi khối SFW được biểu diễn bằng siêu
đồ thị kết nối như sau:
Mỗi nút là một thuộc tính thuộc một lớp Ci xác định trong tập hữu hạn các lớp có trong CSDL đề ra Đồ thị có các cạnh là các tập với số lượng
nút hữu hạn, ta gọi một cạnh như vậy là siêu cạnh Tập hợp các siêu
cạnh này tạo nên một siêu đồ thị và siêu đồ thị như vậy được gọi là siêu
đồ thị kết nối Nếu hai lớp Ci và Cj đề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, chúng ta vẫn 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ị kết nối được tạo thành từ các biểu thức điều kiện và các lớp Ci như sau:
Đố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
Đối với mỗi biểu thức điều kiện dạng (3.3) hay (3.4), chúng ta sẽ tạo ra một siêu cạnh chứa tất cả các thuộc tính có mặt trong biểu thức Những siêu
Trang 26cạ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
Điều kiện có dạng (3.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 3.2) với A, B là các 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
Một lớp trong CSDL hướng đối tượng hoặc lớp kết quả thu được từ
mệnh đề Select được biểu diễn bằng một siêu cạnh đối tượng hay gọi là siêu
cạnh đỉnh tương ứng Siêu cạnh đỉnh này được bao trong một đường liền nét
khép kín và gán nhãn là “head”
Nếu có hai điều kiện trên cùng một tập thuộc tính hoặc một điều kiện trên một tập thuộc tính của một lớp, chúng ta phải đặt tên cho mỗi siêu cạnh
để có thể phân biệt được chúng
Siêu cạnh kết hợp là một biểu thức gồm các thuộc tính và các lượng từ
{IS, IN, UNION, FORALL, EXISTS,…} tham gia Siêu cạnh kết hợp đượ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 hợp được gán nhãn là IS, IN, UNION, FORALL, EXISTS,
…vv
3.2.1.1 Thuật toán khởi tạo siêu đồ thị
Chúng ta biểu diễn hình thức của một siêu đồ thị đối tượng là H = (E1,
E2 , …, En) với Ei (i = 1, …, n) là siêu cạnh thuộc siêu đồ thị H Lược đồ đối tượng là S = (s1, …, sm), sj là các lớp trong S và truy vấn đối tượng QE = (s1,
s2, …sr, R, p1,…, pk) với sj (j = 1, …, r) là các lớp tham gia truy vấnR là lớp/kiểu kết quả của truy vấn và pt (t = 1, …, k) là các biểu thức điều kiện trong mệnh đề where Và thuật toán khởi tạo siêu đồ thị không chứa truy vấn lồng được xây dựng như sau:
Trang 27Thuật toán 3.1: Khởi tạo siêu đồ thị chứa truy vấn lồng
Vào: Lược đồ đối tượng S = (s1, …, sm)
Truy vấn đối tượng QE = (s1, s2, …sr , R, p1, p2,…, pk)
Ra: Siêu đồ thị H
Phương pháp:
(1) SC:= // tậpchứa các siêu cạnh đối tượng của siêu đồ thị H
(2) While sj (s1, …, sr) do
(3) if (sj là siêu lớp gốc) then //không kế thừa từ các siêu lớp khác
(4) Khởi tạo siêu cạnh đối tượng e = sH ({sj}) và nhãn IbH(e)
(5) else if (sj là lớp kế thừa đơn hay kế thừa bội) then
(6) Xử lý trường hợp xung đột về tên với các thuộc tính kế thừa
(7) Khởi tạo lớp sj chứa các thuộc tính của lớp sj và các thuộc tính kế thừa (8) Khởi tạo siêu cạnh đối tượng e = sH({sj} và nhãn IbH(e)
Thuật toán 3.2: Khởi tạo siêu đồ thị của truy vấn đối tượng lồng
Trang 28Vào: Lược đồ đối tượng S = (s1,…,sm)
Truy vấn đối tượng QE = (s1,…sr, R, p1,…, pk) tập TT {is, in, union, diff, forall, exists, …}
Ra: Siêu đồ thị H
Phương pháp:
(1) H:= ;
(2) While (mỗi truy vấn con QEi trong truy vấn QE) do
(3) Khởi tạo siêu đồ thị Hi với mỗi QEi (thuật toán 3.1)
(4) H:= H Hi
(5) While (với mỗi toán tử ti TT) do
(6) 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
(7) 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 SFW bởi các siêu cạnh kết hợp
3.2.1.2 Biểu diễn kết nối trong OQL
Phép kết nối trong ngôn ngữ truy vấn CSDL hướng đối tượng OQL được biểu diễn bằng 3 dạng thức kết nối là kết nối hàm (kết nối ẩn dùng ký hiệu “.”); kết nối đồng nhất tường minh (các thực thể được so sánh với nhau một cách trực tiếp) và kết nối quan hệ truyền thống là kết nối dựa vào giá trị
Trang 29class SINH_VIEN inherits NHAN_SU
type tuple ( gvhd: GIANG_VIEN;
class GIANG_VIEN inherits NHAN_SU
type tuple ( bomon: string[20];
Ví dụ 3.3: (kết nối hàm) cho biết tên khoa và tên những sinh viên tham gia
khoá học “CS565”
Select (e.hoten, e.tenkhoa.tenkhoa)
Trang 30where e.khoahoc = “cs565” and e.tenkhoa IS (d)
Trong đó, giá trị của thuộc tính tham chiếu e.tenkhoa được so sánh trực tiếp bằng toán tử IS với biến vùng d Toán tử IS được dùng để so sánh các tham chiếu, nó trả về giá trị là true nếu hai tham chiếu trỏ đến cùng một đối tượng Toán tử ISNOT được sử dụng để kiểm tra hai tham chiếu không quy
về cùng một đối tượng
Thuộc tính tenkhoa là thuộc tính có kiểu KHOA, phép kết nối hàm được biểu diễn bằng một siêu cạnh kết hợp (IS) Truy vấn trên được biểu diễn bằng siêu đồ thị kết nối như sau:
head “=”CS565””
head
IS
IS
Hình 3.3 Siêu đồ thị kết nối của ví dụ 3.3
Ví dụ 3.4: (Kết nối dựa vào giá trị) Cho biết họ tên sinh viên và họ tên giáo
viên hướng dẫn đang học tập và làm việc tại “ĐHKH”?
select s.hoten, s.gvhd
KHOA
Hoten tenkhoa
tenkhoa SINH_VIEN