DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT CÁC KÝ HIỆU 9 Mid Method Identify Định danh phương thức 10 Odb Object database Cơ sở dữ liệu đối tượng CÁC CHỮ VIẾT TẮT 2 OID Object Identifier Đ
Trang 1ĐẠI HỌC QUỐC GIA HÀ NỘI
HÀ NỘI – 2014
Trang 2ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
PHẠM THỊ CHANH
TỐI ƯU HÓA TRUY VẤN CƠ SỞ DỮ
LIỆU HƯỚNG ĐỐI TƯỢNG
Ngành: CÔNG NGHỆ THÔNG TIN
Chuyên ngành : HỆ THỐNG THÔNG TIN
Mã số: 60480104
LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN
NGƯỜI HƯỚNG DẪN KHOA HỌC : PGS TS ĐOÀN VĂN BAN
HÀ NỘI – 2014
Trang 3LỜI CAM ĐOAN
Tôi xin cam đoan, kết quả của luận văn hoàn toàn là kết quả của tự bản thân tôi tìm hiểu, nghiên cứu Các tài liệu tham khảo đƣợc trích dẫn và chú thích đầy
đủ
Tác giả
Phạm Thị Chanh
Trang 4LỜI CẢM ƠN
Lời đầu tiên của luận văn em xin gửi lời cảm ơn chân thành nhất đến PGS.TS Đoàn Văn Ban, người đã trực tiếp hướng dẫn, giúp đỡ và tạo mọi điều kiện thuận lợi cho em từ lúc tìm hiểu, định hướng cũng như tìm kiếm tài liệu trong lĩnh vực cơ sở
dữ liệu hướng đối tượng cho đến lúc hoàn thành luận văn
Em xin gửi lời cám ơn sâu sắc đến tất cả các thầy cô giáo đã dạy dỗ và truyền đạt những kinh nghiệm quý báu cho chúng em trong suốt hai năm cao học ở trường Đại học Công nghệ - Đại học Quốc gia Hà nội
Cuối cùng, em xin biểu thị sự biết ơn tới những người thân trong gia đình và bạn bè đã ưu ái, giúp đỡ, động viên, khích lệ để em hoàn thành luận văn này
Hà nội, ngày … , tháng … , năm 2014
Trang 5DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT
CÁC KÝ HIỆU
9 Mid (Method Identify) Định danh phương thức
10 Odb (Object database) Cơ sở dữ liệu đối tượng
CÁC CHỮ VIẾT TẮT
2 OID (Object Identifier) Định danh đối tượng
3 UML (Unified Modeling Language) Ngôn ngữ mô hình hợp nhất
(Object Database Management Group)
Nhóm quản trị CSDL đối tượng
5 ODL(Object Definition Language) Ngôn ngữ định nghĩa đối tượng
6 OQL (Object Query Language) Ngôn ngữ truy vấn đối tượng
7 OODB(Object-Oriented Database) CSDL Hướng đối tượng
8 OODBMS (Object-Oriented Database
Management System)
Hệ quản trị CSDL Hướng đối tượng
9 ADTs (Abtract Data Types) Tập kiểu dữ liệu trừu tượng
10 SFW (Select From Where) Khối lệnh trọng tâm của ngôn ngữ
truy vấn OQL
Trang 6DANH MỤC CÁC THUẬT NGỮ
Biến thể hiện dựa trên giá trị Value based instance variable
Kiểu dữ liệu “túi”, đa tập là kiểu sưu tập Bag
Mối quan hệ kế thừa Inheritance relationship Mối quan hệ kết nhập Aggregation relationship
Phân cấp lớp hợp thành Class composition hierarchy
Phương thức thuộc tính - suy dẫn Derived-attribute method
Mô hình dữ liệu hướng đối tượng Object-Oriented Model
Tính đóng gói thông tin Encapsulation
Trang 7DANH MỤC CÁC HÌNH VẼ
Hình 1.1 Sự phát triển của các mô hình dữ liệu 4
Hình 1.2 Mô hình dữ liệu hướng đối tượng nguyên mẫu 6
Hình 1.3 Kế thừa đơn 14
Hình 1.4 Kế thừa bội từ hai lớp khác nhau và có lớp cơ sở chung 14
Hình 1.5 Kế thừa bội không có lớp cơ sở chung 15
Hình 1.6 Sự phân cấp các kiểu trong OQL 20
Hình 1.7 Lược đồ CSDL Quản lý Nhân viên 21
Hình 2.1 Siêu đồ thị H 28
Hình 2.2 Siêu đồ thị kết nối đối tượng của ví dụ 2.1 30
Hình 2.3 Siêu đồ thị kết nối của ví dụ 2.2 34
Hình 2.4 Siêu đồ thị kết nối của ví dụ 2.3 35
Hình 2.5 Siêu đồ thị kết nối của ví dụ 2.4 36
Hình 3.1 Lược đồ CSDL Quản lý Nhân sự 52
Hình 3.2 Form luận văn 61
Hình 3.3 Kết quả truy vấn 1 62
Hình 3.4 Kết quả truy vấn 2 63
Hình 3.5 Kết quả truy vấn 3 65
Trang 8DANH MỤC CÁC BẢNG, BIỂU ĐỒ
Bảng 2.1 Kết quả ƣớc lƣợng siêu cạnh của ví dụ 2.3 44
Bảng 2.2 Kết quả ƣớc lƣợng khi áp dụng thuật toán 2.5 Tinh chỉnh siêu đồ thị của ví dụ 2.3 46
Bảng 2.3 Kết quả ƣớc lƣợng siêu cạnh của ví dụ 2.4 46
Bảng 2.4 Kết quả ƣớc lƣợng khi áp dụng thuật toán 2.5 Tinh chỉnh siêu đồ thị của ví dụ 2.4 47
Biều đồ 3.1 So sánh thời gian thực hiện truy vấn 1 62
Biều đồ 3.2 So sánh thời gian thực hiện truy vấn 2 64
Biều đồ 3.3 So sánh thời gian thực hiện truy vấn 3 65
Trang 9LỜI MỞ ĐẦU
Chúng ta đang sống trong một thời đại mới, thời đại của Công nghệ thông tin (CNTT) Công nghệ thông tin ngày một phát triển và trở thành một nhu cầu không thể thiếu trong mọi lĩnh vực của đời sống xã hội CNTT là ngành quản lý công nghệ
và mở ra nhiều lĩnh vực khác nhau như phần mềm máy tính, phần cứng máy tính, ngôn ngữ lập trình, ….Và cơ sở dữ liệu cũng là một lĩnh vực quan trọng của Công nghệ thông tin Từ khi ra đời cho đến nay, những nghiên cứu về Cơ sở dữ liệu (CSDL) đã không ngừng phát triển và ngày càng trở nên cần thiết trong các ứng dụng
về CNTT
CSDL đã trở thành một bộ phận chủ yếu không thể thiếu trong hầu hết các hệ thống thông tin Hiện nay, các hệ thống thông tin hay các CSDL đều chủ yếu sử dụng một kiểu CSDL truyền thống đó là CSDL quan hệ, một trong những CSDL đã được phát triển và ứng dụng rộng rãi Tuy nhiên với sự phát triển nhanh chóng của CNTT, CSDL quan hệ đã dần bộc lộ những yếu điểm và nhiều hạn chế, đặc biệt là trong việc xây dựng các ứng dụng cơ dữ liệu phức tạp, dữ liệu đa chiều, dữ liệu có nhiều mối quan hệ, hay các dữ liệu đa phương tiện như: hình ảnh, âm thanh, video,…
Ngày nay, phương pháp hướng đối tượng được sử dụng rất phổ biến trong lĩnh vực phát triển phần mềm, vì cho phép lập trình viên tạo ra các đối tượng trong code trừu tượng hóa các đối tượng thực tế trong cuộc sống Trong thế giới thực, đối tượng
là thực thể tồn tại như con người, xe, máy tính,…Trong ngôn ngữ lập trình, đối tượng
có thể là màn hình, điều khiển,…Kỹ thuật hướng đối tượng là kỹ thuật nhằm vào sự tương tác giữa các đối tượng Mỗi đối tượng có những thuộc tính (thông tin lưu trữ), những phương thức xác định các chức năng của đối tượng và các đối tượng chỉ được tạo ra và tồn tại trên bộ nhớ chính, còn việc lưu trữ và tương tác dữ liệu dưới dạng các đối tượng trên bộ nhớ thứ cấp vẫn chủ yếu kế thừa từ mô hình quan hệ truyền thống Hiện đã có rất nhiều kết quả nghiên cứu, cho phép chuyển đổi qua lại giữa các bảng trong mô hình quan hệ sang tập các đối tượng tương ứng Mặc dù kế thừa được tính năng mạnh của hướng đối tượng, nhưng việc chuyển đổi qua lại này càng làm cho mã lệnh của chương trình phức tạp thêm, đồng thời hiệu suất chương trình cũng giảm đi rõ rệt
CSDL hướng đối tượng là giải pháp cho những hạn chế của CSDL quan hệ Trong CSDL hướng đối tượng, dữ liệu được lưu trữ dưới dạng các đối tượng của ngôn ngữ lập trình nên cho phép lưu trữ được các dạng dữ liệu phức tạp, lượng thông tin lớn, đa chiều, đa quan hệ, hay có thể mở rộng lưu trữ các dữ liệu đa phương tiện như hình ảnh, âm thanh, video Trên thế giới, một số hệ quản trị cơ sở dữ liệu hướng đối tượng được phát triển bởi các nhà phân phối sản phẩm thương mại, tại các phòng
Trang 10nghiên cứu công nghệ và các Viện Đại học như: Gemstone, ObjectStores, IRIS,
Orion, Extra, Oracle, Db4o,… Một mô hình dữ liệu đối tượng chuẩn ODMG đã được
phát triển và dựa vào đó để thiết lập một số khái niệm cơ sở được gọi là mô hình hạt nhân cho mô hình CSDL hướng đối tượng Mô hình hạt nhân đủ mạnh để thỏa mãn nhiều đòi hỏi của các ứng dụng mới, hơn nữa còn được dùng làm cơ sở để xác định những khác biệt chính giữa mô hình dữ liệu hướng đối tượng và các mô hình dữ liệu truyền thống khác Hệ thống hướng đối tượng là tập các lớp đối tượng có mối quan hệ với nhau, trao đổi thông tin với nhau để thực hiện những nhiệm vụ đặt ra của bài toán ứng dụng trong thực tế
Một trong những hướng nghiên cứu quan trọng được đề cập trong các 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 câu 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ả cuối cùng tương đương nhau, việc tối ưu hóa câu 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ả hơn, tức là chọn phương
án có chi phí ước lượng nhỏ nhất Hiện nay, các nhà nghiên cứu đã đề xuất rất nhiều
kỹ thuật tối ưu hoá truy vấn hướng đối tượng khả thi và đáp ứng được các yêu cầu này như: Scott Lee Vanderberg (1993), J Fong (1997), C Ramanathan and J Hodges (1997), Clement Yu, Yi Zhang, Weiyi Meng, Wom Kim, Gaoming Wang, Tracy
Pham and Son Daop (1997): Giới thiệu giải thuật chuyển đổi các truy vấn hướng đối
tượng sang truy vấn quan hệ để tận dụng các kỹ thuật tối ưu hoá truy vấn đã có trên
mô hình quan hệ; Jia Liang Han (1998): “Optimizing Relational Queries in Connection Hypergraph: Nested Queries, Views, and Binding Propagations”; Ullman
and Jeffrey D (1999), Lê Mạnh Thạnh và Hoàng Bảo Hùng (2009): Phương pháp tối
ưu hóa truy vấn đối tượng bằng các phép biến đổi biểu thức đại số đối tượng OQL;
Lê Mạnh Thạnh, Đoàn Văn Ban và Hoàng Bảo Hùng (2005): Phương pháp dùng ký
pháp siêu đồ thị để biểu diễn và tối ưu hoá các truy vấn trong CSDL hướng đối tượng Tuy nhiên đối với các truy vấn lồng, khi phân tích ước lượng chi phí của biểu
thức đại số lồng thì việc định giá sẽ cho chi phí chưa đạt hiệu quả như mong muốn
Vì vậy, luận văn tập trung nghiên cứu việc làm phẳng các truy vấn con trong truy vấn
lồng nhờ phương pháp dùng ký pháp siêu đồ thị để biểu diễn và tối ưu hoá các truy
vấn trong CSDL hướng đối tượng Từ đó, xây dựng thuật toán ước lượng chi phí xử
lý truy vấn đối tượng trên cơ sở ước lượng các siêu cạnh trong siêu đồ thị để đạt được
mức chi phí nhỏ hơn cho mỗi truy vấn Chính vì lý do trên mà tôi chọn đề tài “TỐI
ƯU HOÁ TRUY VẤN CƠ SỞ DỮ LIỆU HƯỚNG ĐỐI TƯỢNG” làm luận văn
tốt nghiệp
Mục tiêu của luận văn là nghiên cứu các mô hình CSDL hướng đối tượng để
giải bài toán tối ưu hóa truy vấn đối tượng Đây là vấn đề luôn được các nhà khoa
Trang 11học quan tâm nghiên cứu Trong khuôn khổ của luận văn, tôi tập trung nghiên cứu vào phương pháp tối ưu hóa truy vấn mà hay được sử dụng nhất đặc biệt là đối với các truy vấn lồng đó là sử dụng phương pháp siêu đồ thị Nghiên cứu các đặc trưng trong mô hình dữ liệu hướng đối tượng; Tìm hiểu các kỹ thuật xử lý truy vấn, sự biểu diễn câu truy vấn bằng ngôn ngữ truy vấn đối tượng OQL; Giới thiệu ký pháp siêu đồ thị [10] trong biểu diễn truy vấn Từ đó, sử dụng phương pháp này để tối ưu hóa truy vấn cho lớp các truy vấn lồng trong CSDL hướng đối tượng [3]
Với mục tiêu của luận văn như vậy, bố cục của luận văn gồm: phần mở đầu, ba chương nội dung và phần kết luận
Chương 1: Giới thiệu các khái niệm, định nghĩa cơ bản như: lớp, đối tượng,
định danh đối tượng trong mô hình CSDL hướng đối tượng; kế đến, trình bày sự mở rộng ngữ nghĩa của mô hình như hệ thống phân cấp và quan hệ kế thừa Tìm hiểu kỹ thuật xử lý truy vấn và các thay đổi so với kỹ thuật xử lý truy vấn quan hệ Để thực hiện được các câu truy vấn đối tượng một cách hiệu quả và tiếp tục nghiên cứu các vấn đề về tối ưu hoá truy vấn trong các CSDL hướng đối tượng, ngôn ngữ truy vấn OQL là ngôn ngữ truy vấn được chọn giới thiệu trong chương này
Chương 2: 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 Cuối chương, là mở rộng thuật toán tối ưu hóa truy vấn trên cơ sở xây dựng danh sách các bước thực thi câu truy vấn theo quy tắc có thứ tự loại bỏ siêu cạnh
Chương 3: Giới thiệu về hệ quản trị CSDL đối tượng DB4O Phát biểu bài toán
quản lý nhân sự trong công ty, đó là bài toán được áp dụng trong các ví dụ cho thuật toán tối ưu hóa truy vấn Đưa ra kết quả thực nghiệm cho bài toán tối ưu hóa truy vấn CSDL hướng đối tượng dựa trên siêu đồ thị Cuối cùng là kết luận và hướng phát triển của đề tài
Nội dung cơ bản của luận văn đã được trình bày, thảo luận tại xêmina khoa học
ở Bộ môn Hệ thống thông tin, khoa Công nghệ Thông tin, trường Đại học Công nghệ
- Đại học Quốc gia Hà nội
Trang 12Chương 1
MÔ HÌNH CƠ SỞ DỮ LIỆU HƯỚNG ĐỐI TƯỢNG
1.1 Tổng quan về hệ thống dữ liệu hướng đối tượng
1.1.1 Mô hình dữ liệu
Các hệ thống quản trị cơ sở dữ liệu (CSDL) đầu tiên xuất hiện trước những năm
1970 Những hệ thống này được phát triển từ hệ thống các tệp tin (File Systems) để
hỗ trợ cho việc lưu trữ và xử lý số lượng lớn các dữ liệu Tuy nhiên, các nhà nghiên cứu trong lĩnh vực CSDL nhận thấy giá trị của dữ liệu cần được lưu trữ để xử lý, và các mô hình dựa trên dữ liệu cần được nghiên cứu để cải thiện độ tin cậy, đảm bảo an ninh, an toàn dữ liệu và nâng cao hiệu quả của việc truy cập vào hệ thống
Mô hình dữ liệu cung cấp cách thức tổ chức các dữ liệu được lưu trữ theo cấu trúc đặc biệt hoặc theo các mối quan hệ sao cho việc truy cập và quản lý nhanh chóng, hiệu quả Nhiều mô hình CSDL như mô hình phân cấp (Hierarchical model),
mô hình mạng (Network model), mô hình quan hệ (Relational model), mô hình hướng đối tượng (Object-Oriented model) như Hình 1.1 đã xuất hiện và đóng vai trò quan trọng trong việc nghiên cứu phát triển các hệ thống quản trị CSDL (DataBase Management System)
Hình 1.1 Sự phát triển của các mô hình dữ liệu [1]
1.1.2 Những hạn chế của cơ sở dữ liệu quan hệ
Mô hình CSDL quan hệ truyền thống được sử dụng nhiều nhưng chưa đáp ứng được hết các yêu cầu của thực tế Mô hình quan hệ chỉ phù hợp cho những bài toán có
bộ dữ liệu nhỏ và không đáp ứng được cho những bài toán ở lĩnh vực ứng dụng mới, nhiều kiểu dữ liệu phức tạp Ví dụ, khi cần lưu trữ và xử lý một số lượng lớn dữ liệu,
dữ liệu hình ảnh, âm thanh hay video, … thì việc sử dụng mô hình quan hệ sẽ không đạt hiệu quả Nhưng đa phần những ứng dụng mới hiện nay đòi hỏi hệ thống cơ sở dữ
Complex Object Model
Object-Oriented Databases
Trang 13liệu phải xử lý được các tính năng như: các kiểu dữ liệu phức tạp, đóng gói dữ liệu (Data Encapsulation) và cấu trúc dữ liệu trừu tượng, cùng với những phương pháp mới để lập chỉ mục và truy vấn thông tin Phần lớn các hệ quản trị CSDL phổ biến hiện nay trên thị trường là các hệ quản trị dữ liệu theo mô hình quan hệ Tuy nhiên, các hệ quản trị CSDL quan hệ có những hạn chế như sau [13,19]:
Hạn chế trong vấn đề biểu diễn thế giới thực (Real world): Các quan hệ
(relations) không đủ mạnh để thể hiện các thực thể (entities) trong thế giới thực Rất khó để mà biểu diễn được mối quan hệ kế thừa, mối quan hệ thành viên (IS-A relationships) Ví dụ nhân viên là một người, trong ví dụ này, hệ quản trị CSDL quan
hệ phải định nghĩa 2 bảng là bảng Nguoi và bảng NhanVien, trong đó bảng NhanVien nhận được những thông tin từ lớp cha (superclass) Nguoi để kết nối lại
Hạn chế về nạp chồng ngữ nghĩa (Semantic overloading): Thành phần chuẩn
trong mô hình quan hệ là quan hệ (relation) không đủ mạnh để biểu diễn cho dữ liệu
và các mối quan hệ phức tạp của dữ liệu Nó thường phải chia một đối tượng thành một số các quan hệ (bảng) và truy vấn tin thì phải thực hiện các phép: chiếu, chọn và kết nối để tái cấu trúc các đối tượng đó
Chỉ biểu diễn những dữ liệu thuần nhất: Những hạn chế về kiểu dữ liệu trong
mô hình quan hệ làm nó không thể biểu diễn được các đối tượng trong thế giới thực
Một mục (item) bất kỳ trong một bộ dữ liệu (tuple) thực chất là phần giao nhau của
hàng với cột, nó phải là dữ liệu của một kiểu dữ liệu nguyên tố, bởi vì theo giả thuyết,
cả chiều ngang và chiều dọc đều phải có kiểu thuần nhất
Hệ thống khép kín: Những lĩnh vực ứng dụng còn tồn tại không thể bổ sung
được vào hệ thống sau khi phát triển hệ quản trị CSDL, như không thể bổ sung các kiểu dữ liệu mới vào hệ thống Nhưng thực tế đòi hỏi các hệ quản trị CSDL phải hỗ trợ để xử lý những kiểu dữ liệu mới như kiểu hình ảnh (images), video, audio, …
Giới hạn các phép toán: Mô hình quan hệ có một tập cố định các phép toán
trong SQL Ngoài ra, không cho phép mở rộng hay bổ sung thêm những phép toán mới
Khó thực hiện truy vấn đệ qui: Các câu truy vấn đệ qui cực kỳ khó đặc tả và cài
đặt trong mô hình quan hệ Đây cũng chính là điểm yếu làm cho SQL không thực hiện được đầy đủ trong tính toán
Những trở ngại trong đối sánh: Mô hình quan hệ sử dụng những mô thức lập
trình hỗn hợp khác nhau, trong đó cho phép các dữ liệu với kiểu khác nhau và nhiều
vị trí khác nhau có thể được xử lý trong cùng một thời điểm
1.1.3 Mô hình dữ liệu hướng đối tượng
Trong số các mô hình dữ liệu hiện nay, mô hình dữ liệu đối tượng là mô hình đảm bảo tính mềm dẻo, tính linh hoạt, và tính “mở” của hệ thống Mô hình dữ liệu
Trang 14hướng đối tượng đang được phát triển một cách phổ dụng trong lĩnh vực phát triển CSDL Được xây dựng theo cách tiếp cận hướng đối tượng nhằm khắc phục những hạn chế của những mô hình dữ liệu truyền thống Mô hình dữ liệu hướng đối tượng
có các đặc trưng cơ bản sau [6, 13]:
- Thông tin được biểu diễn thành các đối tượng giống như các đối tượng trong lập trình hướng đối tượng Lớp bao gồm các thông tin:
+ Dữ liệu thuộc tính mô tả các đặc trưng của các thực thể (đối tượng)
+ Các phương thức mô tả hành vi ứng xử của đối tượng
+ Mối quan hệ giữa các lớp với nhau
- Mỗi đối tượng (thực thể) có một định danh ID để xác định duy nhất trong hệ CSDL
- Các CSDL hướng đối tượng được thiết kế để làm việc tốt đối với những ngôn ngữ lập trình hướng đối tượng như: Java, C++, C#, Smalltalk,…
Mục đích của CSDL hướng đối tượng là để quản trị hiệu quả những kiểu dữ liệu phức hợp, dữ liệu đa phương tiện như âm thanh, hình ảnh, , nhằm khắc phục những hạn chế của CSDL quan hệ Hình vẽ sau đây giới thiệu về mô hình dữ liệu hướng đối tượng nguyên mẫu
Hình 1.2 Mô hình dữ liệu hướng đối tượng nguyên mẫu [13]
Trên cơ sở kế thừa và phát triển các điểm mạnh của CSDL quan hệ thì CSDL đối tượng đã bổ sung các tính chất mà CSDL quan hệ vẫn còn thiếu sót Cũng như hệ thống CSDL truyền thống, hệ thống CSDL hướng đối tượng có tính bền vững, tính chia sẻ dữ liệu, tính bảo mật, tính toàn vẹn và truy vấn dữ liệu Ngoài ra, CSDL hướng đối tượng còn có những ưu điểm khác như [13]:
- Sự tổng quát hoá
- Sự kết nhập
Lập trình hướng đối tượng
- Phiên bản
- Sự tiến hoá lược đồ
MÔ HÌNH DỮ LIỆU HƯỚNG ĐỐI TƯỢNG
Trang 15Hỗ trợ những kiểu dữ liệu được định nghĩa bởi người sử dụng: CSDL hướng
đối tượng có khả năng lưu trữ các kiểu phức hợp, kiểu được định nghĩa bởi người sử dụng, cho phép thao tác trong kiểu dữ liệu một cách dễ dàng
Cải tiến đáng kể về chất lượng dữ liệu: Ta có thể đưa ra nhiều ràng buộc vào
cấu trúc dữ liệu Mô hình còn cho phép thể hiện được cả những ràng buộc không có cấu trúc mà chương trình phải thoả mãn khi nó thực hiện trong hệ CSDL Một CSDL quan hệ được chuẩn hóa có thể xem như một trường hợp đặc biệt của CSDL hướng đối tượng
Tốc độ phát triển phần mềm nhanh hơn: Cấu trúc CSDL nhất quán và rõ ràng
giúp cho lập trình ứng dụng trở nên đơn giản và nhanh hơn Những người phát triển ứng dụng có kinh nghiệm thường sử dụng những câu lệnh rất mạnh của các hệ quản trị CSDL thay cho những đoạn chương trình của người sử dụng
Tích hợp dữ liệu dễ dàng và tiện lợi: Việc tích hợp nhiều hệ thống độc lập có
thể làm giảm bớt sự sao chép dữ liệu của con người và mở rộng những câu truy vấn
có thể trả lời được Mô hình hướng đối tượng cung cấp cách biểu diễn thống nhất làm thuận tiện hơn cho việc tìm hiểu và tích hợp thông tin
Không cần các khóa chính (Primary Keys): người sử dụng hệ quản trị CSDL
quan hệ thường phải lo lắng về tính duy nhất để phân biệt các bộ dữ liệu và đảm bảo rằng không có hai bộ dữ liệu có cùng giá trị của khóa chính để tránh xảy ra xung đột Nhưng trong một hệ quản trị CSDL hướng đối tượng, việc xác định duy nhất của các đối tượng được thực hiện bởi định danh đối tượng (OID) và người sử dụng không cần phải quan tâm về chúng
Một mô hình dữ liệu thống nhất: Một mô hình dữ liệu thông thường phải mô
hình hóa các thực thể, các mối quan hệ, các ràng buộc và các hoạt động thay đổi trạng thái của dữ liệu trong hệ thống Với hệ quản trị CSDL quan hệ ta không thể mô hình được các hoạt động và không đưa ra được những quy tắc để làm thay đổi trạng thái của dữ liệu trong hệ thống, bởi vì điều này vượt quá phạm vi của cơ sở dữ liệu Vì vậy, các ứng dụng sử dụng hệ thống CSDL quan hệ thường sử dụng một sơ đồ quan
hệ - thực thể để mô hình các bộ phận tĩnh của hệ thống và một mô hình riêng biệt cho các hoạt động và hành vi của các thực thể trong ứng dụng Với hệ quản trị CSDL hướng đối tượng, không có sự tách biệt giữa các mô hình dữ liệu và mô hình ứng dụng để mô tả đầy đủ các đặc trưng, tính chất tĩnh cũng như hành vi ứng xử động của các đối tượng Toàn bộ ứng dụng như vậy có thể được mô hình đầy đủ trong các biểu
đồ UML
1.2 Các khái niệm cơ sở
1.2.1 Đối tượng, Định danh đối tượng và Lớp đối tượng
Đối tượng (Object)
Trang 16Đối tượng là một khái niệm cơ sở quan trọng nhất của cách tiếp cận hướng đối tượng Đối tượng là thực thể của hệ thống, của CSDL chỉ một người, một địa điểm hay một vật nào đó tồn tại trong thế giới thực Một thực thể bất kỳ trong thế giới thực
là một đối tượng Đối tượng trong thế giới thực được xác định duy nhất, chứa một tập nhất định các thông tin về đối tượng và các hành vi dựa trên các thông tin đó Một đối tượng cũng có thể có các mối quan hệ hay có khả năng trao đổi thông tin với các đối tượng khác
Ví dụ: Một đối tượng Nhân viên là một người đang làm việc cho một công ty hay doanh nghiệp nào đó, được xác định duy nhất trong thế giới thực, chứa một tập nhất định các thông tin về Nhân viên đó như: mã nhân viên, họ tên, ngày sinh, nơi sinh, lương, dự án mà nhân viên đang tham gia,…Một đối tượng Nhân viên có thể có các quan hệ với các đối tượng khác, như quan hệ với đối tượng Phòng ban hay đối tượng Dự án mà nhân viên đó đang tham gia làm việc
Trong CSDL hướng đối tượng, các đối tượng trong thế giới thực được mô hình hóa, biểu diễn vào CSDL theo các đặc trưng của đối tượng và luôn duy trì sự tương ứng trực tiếp giữa các đối tượng trong CSDL với các đối tượng trong thế giới thực
Định danh đối tượng (OID: Object Identity)
Một đối tượng được xác định duy nhất trong thế giới thực, và do đó cũng phải được biểu diễn duy nhất trong CSDL Việc xác định duy nhất đối tượng trong CSDL được thực hiện bằng cách sử dụng các Định danh đối tượng (Object Identity) hay OID Hệ thống CSDL hướng đối tượng cung cấp một định danh duy nhất cho mỗi đối tượng và được lưu trữ trong CSDL Định danh duy nhất này do hệ thống tự động tạo ra và được gọi là định danh đối tượng Giá trị OID người dùng không nhìn thấy được, nó được sử dụng bên trong hệ thống để xác định duy nhất một đối tượng và dùng để tạo ra các tham chiếu bên trong đối tượng OID của mỗi đối tượng phải thỏa mãn hai tính chất sau:
1 Giá trị OID của một đối tượng không được thay đổi trong CSDL hướng đối tượng Điều này đảm bảo tính duy nhất của mỗi đối tượng Do đó, một hệ thống CSDL hướng đối tượng phải có cơ chế tạo ra các OID và đảm bảo tính bất biến
2 Mỗi giá trị OID chỉ được sử dụng duy nhất một lần; nghĩa là khi một đối tượng bị xóa đi từ CSDL thì OID của nó cũng không được gán cho đối tượng bất kỳ nào khác
Định danh đối tượng OID khác với khóa chính của đối tượng Khóa chính của đối tượng là một thuộc tính của đối tượng, được người dùng gán giá trị và có thể nhìn thấy, thay đổi được và có thể được cấp lại, còn OID thì không
Ví dụ: Một Nhân viên được biểu diễn trong CSDL có một OID duy nhất, xác định sự tương ứng Nhân viên đó trong thế giới thực Một Nhân viên khác trong thế
Trang 17giới thực nếu được biểu diễn trong CSDL thì phải có một OID khác với OID của Nhân viên trên, thậm trí cả khi Nhân viên trên bị xóa khỏi hệ thống Điều này đảm bảo sự tương ứng của CSDL với thế giới thực, tránh sự nhầm lẫn về các đối tượng được biểu diễn trong CSDL
thường được mô tả bằng từ khóa Class Ví dụ trong lược đồ quản lý nhân viên ta có
các lớp: NhanVien, PhongBan, DuAn …Trong đó, lớp Nhân viên mô tả cấu trúc
chung của các đối tượng Nhân viên, được khai báo như sau:
Thuộc tính có thể là thuộc tính đơn trị hoặc thuộc tính đa trị, thuộc tính đa trị
được khai báo bởi từ khóa set Ngoài ra một thuộc tính có thể là thuộc tính phức hợp, được xác định từ tập các thuộc tính khác (sử dụng từ khóa tuple để khai báo)
Ví dụ 1.1 Khai báo về các thuộc tính có trong lớp QuanLy
Trang 18luongcoban: double)
Class QuanLy inherits NhanSu
Type tuple ( chucvu: string;
phong: PhongBan;
duan: set( DuAn))
Trong ví dụ trên các thuộc tính hoten, giới tính, diachi… là các thuộc tính đơn trị, thuộc tính ngaysinh là thuộc tính phức hợp Còn thuộc tính duan là thuộc tính đa
trị, với ngữ nghĩa rằng mỗi đối tượng thuộc lớp QuanLy có thể tham gia vào nhiều
dự án khác nhau; nghĩa là mỗi đối tượng thuộc lớp QuanLy cho tương ứng một tập các giá trị OID của các đối tượng thuộc lớp DuAn
Phương thức (Method)
Phương thức của một lớp thường được dùng để mô tả các hành vi của đối tượng (hoặc của lớp) Ví dụ như đối tượng thuộc lớp điện thoại có các hành vi sau: Đổ chuông, chuyển tín hiệu từ sóng sang dạng nghe được, chuyển tín hiệu giọng nói sang dạng chuẩn, chuyển tín hiệu lên tổng đài.v.v Khi thiết kế, người ta có thể dùng các phương thức để mô tả và thực hiện các hành vi của đối tượng Mỗi phương thức thường được định nghĩa là một hàm, các thao tác để thực hiện hành vi đó được viết tại nội dung của hàm Khi thực hiện hành vi này, đối tượng có thể phải thực hiện các hành vi khác Ví dụ như điện thoại phải chuyển tín hiệu giọng nói sang dạng chuẩn trước khi chuyển lên tổng đài Cho nên một phương thức trong một lớp có thể sử dụng phương thức khác trong quá trình thực hiện hành vi của mình
1.2.3 Các kiểu dữ liệu
Các khái niệm sau đây được sử dụng trong hầu hết các hệ CSDL hướng đối tượng, chẳng hạn như Gemstone, Orion, Ontos, O2, ObjectStore, ODMG Để thuận tiện trong trình bày, chúng ta sử dụng một số ký hiệu sau [4, 6, 21]:
T – tập hữu hạn các kiểu
L – tập các kiểu nguyên thuỷ như: byte, int, long, float, double, char, string và
boolean
Trang 19Att – tập tất cả thuộc tính của các đối tượng trong hệ thống
O – tập tất cả đối tượng và các đại lượng trong một CSDL
Class – tập các tên lớp
Tập Dom các giá trị nguyên thuỷ là hợp của tất cả các miền giá trị cơ sở của ngôn ngữ lập trình Các phần tử của Dom được gọi là hằng, trong đó nil là một hằng
đặc biệt biểu diễn giá trị không xác định
Tập Obj = {o1, o 2 , …} là tập vô hạn các định danh đối tượng (OID) và tập O id là
tập con các định danh đối tượng, O id Obj Họ giá trị trên O id , ký hiệu Val(O id), được xác định như sau:
(i) Hằng nil Val(O id)
(ii) Nếu v Dom thì v Val(O id)
(iii) Nếu o O id thì o Val(O id)
(iv) Tập {vi | vi Val(O id), (i = 1, , n)} Val(O id)
(v) Cho tập các giá trị {vi | vi Val(O id), (i = 1, , n)} và tập các tên thuộc tính rời nhau {Ai | Ai, Aj Att, (i j Ai Aj), (i, j = 1, , n)} thì bộ [Ai : v1, , An : vn]
Class được sử dụng để mô tả định nghĩa kiểu của lớp các đối tượng
Ví dụ 1.2: Cho lược đồ CSDL hướng đối tượng sau:
SoNV: set (NhanVien ))
Ta tiến hành biểu diễn một số đối tượng từ lược đồ CSDL đối tượng trên, trong
đó mỗi đối tượng là một cặp (o, v) Xét các đối tượng
Ob 1 = (o1, [hoten: “Nam Phong”, gioitinh: false, luong: 6000000, phong: o5])
Ob 2 = (o2, [hoten: “Nguyên Minh”, gioitinh: true, luong: 4000000, phong: o5])
Ob 3 =(o3, [hoten: “Trần Hùng”, gioitinh: false, luong: 5000000, phong: o5])
Trang 20Ob 4 =(o4, [hoten: “Minh Châu”, gioitinh: true, luong: 3500000, phong: o5])
Ob 5 =(o5, [tenphong: “Kinh Doanh”, truongphong: o1, SoNV: {o1, o2, o3, o4}])
Đối tượng Ob 1 theo định nghĩa trong lược đồ trên sẽ gồm định danh o1 và một
bộ (tuple) các giá trị: [hoten : “Nam Phong”, gioitinh : false, luong : 6000000, phong :
o5] Đối tượng Ob 5 có định danh là o5 và một giá trị bộ: [tenphong : “Kinh Doanh”,
truongphong : o1, SoNV : {o1, o2, o3, o4}], trong đó, thuộc tính tenphong có giá trị nguyên thủy, thuộc tính truongphong tham chiếu đến đối tượng có định danh đối
tượng là o1, thuộc tính SoNV (số lượng nhân viên) có giá trị tập (set) tham chiếu đến
các đối tượng với các định danh đối tượng o1,o2, o3, o4
Trong mô hình dữ liệu quan hệ, so sánh bằng của các bộ trong quan hệ luôn dựa trên các giá trị của bộ, hai bộ bằng nhau nếu tất cả các thuộc tính khoá của hai bộ có cùng giá trị Tuy nhiên, trong mô hình CSDL hướng đối tượng cần phân biệt hai khái niệm “đồng nhất” và “bằng nhau” của các đối tượng như trong thực tế Hai quan hệ này được định nghĩa như sau:
Định nghĩa 1.1: Cho hai đối tượng S1(o1, v1) và S2(o2, v2)
i Đối tượng đồng nhất: Hai đối tượng S1 và S2 được gọi là đối tượng đồng nhất,
ký hiệu S1 = oidS2 nếu chúng có cùng định danh đối tượng, tức là S1.o1 = S2.o2
ii Đối tượng bằng nhau: Hai đối tượng S1 và S2 được gọi là bằng nhau về giá trị,
ký hiệu S1 = vS2
- Nếu kiểu của đối tượng là nguyên thuỷ thì chúng phải có cùng giá trị
- Nếu kiểu của đối tượng là kiểu không nguyên thuỷ thì chúng phải có cùng số các tính chất và với mọi tính chất pi của S1 đều tồn tại tính chất pj của S2 bằng nhau về giá trị
Các kiểu dữ liệu
Các kiểu cơ sở bao gồm các kiểu chuẩn trong SQL như: integer, string, float,
char, double, ….và các kiểu do người dùng định nghĩa như lớp hoặc cấu trúc
Các kiểu tập hợp đây là các kiểu đặc trưng chỉ có ở truy vấn hướng đối tượng
như: set, bag, list, array chỉ đến một tập hợp các đối tượng
- Set: Với T là một kiểu bất kỳ, set(T) được định nghĩa là một kiểu tập hợp gồm
các phần tử phân biệt nhau có kiểu là T Ví dụ {1, 2, 5, 8, 9} là một thể hiện của set(integer)
- Array: Với T là một kiểu bất kỳ và i có kiểu integer, array<T, i> là một dãy
gồm i phần tử có kiểu T Mỗi phần tử được gắn liền với một chỉ số
- Bag: Với T là một kiểu bất kỳ, bag(T) được định nghĩa như một kiểu tập hợp
gồm các phần tử thuộc kiểu T Khác với set, một phần tử trong bag có thể xuất hiện nhiều hơn một lần và không phân biệt thứ tự giữa chúng Ví dụ {1, 2, 2, 5}
là một thể hiện của bag(integer)
Trang 21- List: Với T là một kiểu bất kỳ, list(T) được định nghĩa như một kiểu danh sách
có 0 hoặc nhiều hơn một phần tử thuộc kiểu T Kiểu string là một kiểu đặc biệt của list (danh sách các ký tự)
Mỗi phần tử trong set được gắn liền với một sự kiện duy nhất, ngược lại trong bag các phần tử có thể lặp Với list giống như bag nhưng các sự kiện phải được sắp xếp đúng thứ tự Chẳng hạn {3, 5, 3} và {5, 3, 3} là khác nhau với list nhưng giống nhau với bag
Trong CSDL hướng đối tượng lớp được xem như một kiểu dữ liệu đã được cài đặt, các thể hiện của nó là các đối tượng cụ thể Chẳng hạn kiểu integer có thể xem như một lớp integer và các thể hiện như 1, 3, 5, …là các thể hiện của lớp integer đó
1.2.4 Hệ thống phân cấp và quan hệ kế thừa
Trong hệ thống CSDL hướng đối tượng, cho phép một lớp được kế thừa các thuộc tính và phương thức từ một lớp cơ sở, tức là những lớp mới có thể mở rộng, kế thừa những lớp khác có sẵn (super-class) Ngoài những thuộc tính, phương thức được kế thừa, ta có thể bổ sung thêm những thuộc tính và phương thức mới để mô tả đúng những lớp các đối tượng của bài toán ứng dụng
Quan hệ kế thừa là quan hệ kiểu “thành viên” (“IS-A”), nghĩa là mội đối tượng
của lớp con cũng là đối tượng của lớp cha và ngược lại đối tượng của lớp cha đại diện cho mội đối tượng của lớp con Các lớp trong mô hình hướng đối tượng có thể được tổ chức theo một cấu trúc phân cấp ISA giữa các lớp đối tượng Cấu trúc phân cấp lớp bao gồm ba thành phần: (1) tập các lớp; (2) các kiểu liên quan đến các lớp; (3) đặc điểm của các quan hệ ISA giữa các lớp [11]
Một cách hình thức, cấu trúc phân cấp lớp ISA là một bộ ba (C,,), trong đó,
C là tập hữu hạn tên các lớp, là ánh xạ từ C vào Types(C), là một quan hệ thứ tự
bộ phận trên tập các lớp C Thông thường thì quan hệ thứ tự bộ phận có tính phản xạ
Ta nói, lớp C2 là lớp con của lớp C1 hay nói cách khác lớp C2 kế thừa lớp C1 nếu kiểu của lớp C2 là tổng quát hơn kiểu của lớp C1, ký hiệu là C2C1 Chúng ta sử dụng quan hệ kiểu con () để biểu diễn một kiểu là tổng quát hơn kiểu khác [1, 2]
Định nghĩa 1.2 Cho (C, , ) là một cấu trúc phân cấp lớp, quan hệ kiểu con trên
Types(C) là thứ tự bộ phận nhỏ nhất trên Types(C), ký hiệu , thỏa mãn các điều kiện sau:
Trang 22Với mọi , any (any là lớp gốc của cây phân cấp)
1.2.4.1 Kế thừa đơn
Trong một số hệ thống chỉ cho phép một lớp được kế thừa từ một lớp cơ sở gọi
là kế thừa đơn [11]
Hình 1.3 Kế thừa đơn
1.2.4.2 Kế thừa bội
Có nhiều hệ thống cho phép một lớp có thể có nhiều lớp cơ sở gọi là kế thừa
bội Trong quan hệ kế thừa bội có thể dẫn đến sự pha trộn thông tin từ nhiều nguồn
dữ liệu khác nhau, từ các lớp được kế thừa Kế thừa bội tổ chức các lớp thành đồ thị định hướng phi chu trình, là cơ chế mạnh trong mô hình hệ thống, nhưng đồng thời cũng sẽ tạo ra nhiều sự phức tạp về tính nhập nhằng, không nhất quán dữ liệu
Kế thừa bội từ những lớp phân biệt: Một lớp có thể kế thừa từ nhiều lớp cơ sở khác nhau Ví dụ Lớp Person là cơ sở để tạo ra hai lớp con: Employee (Nhân viên)
và Manager (Nhà quản lý) Trong Công ty lại có những người vừa là nhân viên, vừa
là người phát triển Những người đó chính là các đối tượng của lớp PartTimeWorker
kế thừa từ hai lớp con Employee và Manager như Hình 1.4
Hình 1.4 Kế thừa bội từ hai lớp khác nhau và có lớp cơ sở chung[1]
Person
+salary: int +readInfo()
Trang 23Kế thừa bội không có lớp cơ sở chung: Kế thừa bội như Hình 1.4 là kế thừa có
lớp cơ sở chung là lớp Person Chúng ta có thể tạo ra lớp kế thừa bội từ nhiều lớp mà
chúng lại không có lớp cơ sở chung Loại kế thừa này thường xuất hiện khi ta muốn
pha trộn một số chức năng của các lớp thư viện khác nhau Ví dụ trong Hình 1.5, mỗi
đối tượng của lớp SearchTree (cây tìm kiếm) có thể là đối tượng của lớp MoveSubtree (cây con các nước đi) hoặc của lớp PossibleMove (lớp các nước có thể chọn) Bản thân lớp
MoveSubtree lại có thể chứa các SearchTree nhỏ hơn Mỗi nước đi của lớp Move lại có thể
là nước đi có thể (PossibleMove) hoặc lớp các nước đi hiện thời (ActualMove) Lớp
PossibleMove kế thừa hành vi chung của lớp Move và lớp SearchTree
Hình 1.5 Kế thừa bội không có lớp cơ sở chung [1]
Mục đích của xử lý truy vấn là tìm một phương án thực thi trong số tất cả các phương án tương đương (cho cùng một kết quả) nhưng giảm thiểu thời gian xử lý, giảm vùng nhớ trung gian, sử dụng ít tài nguyên hay là với chi phí nhỏ nhất Trong
hệ thống CSDL, chi phí của tiến trình xử lý truy vấn được tính với công thức:
Total_cost = IO_cost + CPU_cost
Trong đó, IO_cost là chi phí vào/ra do việc truyền dữ liệu giữa bộ nhớ chính và
bộ nhớ thứ cấp (thường là đĩa từ) và CPU_cost là chi phí tính toán trong tiến trình xử
lý truy vấn Người ta tập trung nghiên cứu trên chi phí IO_cost và bỏ qua chi phí
CPU_cost Điều này sở dĩ như vậy là vì mỗi ứng dụng CSDL lớn với số lượng khổng
lồ các truy xuất dữ liệu thì sự tham gia của chi phí CPU_cost vào tổng chi phí
Total_cost sẽ không có ý nghĩa
Chi phí xử lý truy vấn trên các lớp
Move SearchTree
Trang 24Việc phân tích tổng chi phí IO_Cost được thực hiện theo ba thành phần là chi phí nạp của lớp sưu tập (IO_Load), chi phí ước lượng tân từ (IO_Eval) và chi phí kết xuất kết quả(IO_Build) được xem xét trong hai trường hợp: giả thiết bộ nhớ xử lý đủ lớn và bộ nhớ nhỏ
Việc phân tích tổng chi phí IO_Cost được thực hiện theo ba thành phần: chi phí
nạp của lớp sưu tập (IO_Load), chi phí ước lượng tân từ (IO_Eval) và chi phí kết xuất kết quả (IO_Build)
Tổng chi phí vào/ra của việc xử lý truy vấn chứa ba thành phần:
Total_IO = IO_Load + IO_Eval + IO_Build
Với IO_Load là số các trang truy xuất để nạp các đối tượng thuộc lớp gốc, là lớp bắt đầu duyệt theo biểu thức đường dẫn, IO_Eval là số trang truy xuất để “đi qua” biểu thức đường dẫn theo phân cấp lớp hợp thành và IO_Build là số trang truy xuất
để tạo ra kết quả Để duyệt lớp bắt đầu theo biểu thức đường dẫn, trước hết người ta
sẽ nạp các đối tượng trong lớp gốc Có hai phương án duyệt các đối tượng: (a) duyệt tuần tự; (b) duyệt theo chỉ mục Hai phương án này có sự khác biệt về công thức chi
phí đối với thành phần IO_Load Nhưng các phương án duyệt để nạp các đối tượng
thuộc lớp gốc không làm ảnh hưởng đến các chi phí duyệt đường dẫn trong các lớp
khác Vì vậy, chi phí IO_Eval và IO_Build cũng không ảnh hưởng gì khi chọn một trong
hai phương án trên
1.4 Chuẩn cơ sở dữ liệu hướng đối tượng
Một trong các yêu cầu quan trọng của các mô hình hay các hệ quản trị CSDL là việc xây dựng một chuẩn chung cho tất cả các hệ thống Như việc thành công của hệ quản trị CSDL quan hệ là đã xây dựng được một chuẩn SQL cho phép quản trị CSDL Bởi vậy, việc xây dựng một chuẩn cho CSDL hướng đối tượng là rất cần thiết, quan trọng và mang lại nhiều lợi ích
Việc xây dựng chuẩn CSDL hướng đối tượng có tác dụng là định ra một cấu trúc chung cho tất cả các hệ thống, do đó người sử dụng sẽ dễ dàng hơn trong việc thao tác hệ thống cũng như bảo trì, chuyển đổi và nâng cấp hệ thống Mặt khác, chuẩn CSDL cho phép sự tương thích giữa nhiều hệ thống khác nhau, tức là các chương trình ứng dụng có thể truy cập được các dữ liệu được lưu trữ trong các hệ thống hay các CSDL trong các hệ thống khác nhau
ODMG (Object Database Management Group) là một trong những chuẩn CSDL hướng đối tượng, đang được phát triển và được ứng dụng trong nhiều hệ thống, hệ quản trị CSDL hướng đối tượng hiện nay ODMG đề xuất một số chuẩn cho mô hình CSDL đối tượng và được chỉnh sửa thành phiên bản 1.1 vào năm 1994, phiên bản 2.0 vào năm 1997, là một mô hình hướng đối tượng dựa trên mô hình đối tượng hạt nhân chuẩn
Trang 25Chuẩn mới nhất là ODMG 3.0 (1999) định nghĩa một cách linh hoạt các đặc tả cho việc lưu trữ những đối tượng bền vững ODMG 3.0 được thiết kế để các ứng dụng dễ chuyển đổi, cho phép phát triển ứng dụng dựa vào CSDL, đối tượng và chuẩn ngôn ngữ lập trình (OMG, SQL-92, …) hiện thời, đảm bảo việc lưu trữ đối tượng là đơn giản và chương trình dễ chuyển đổi [13]
Ý tưởng cơ sở của việc xây dựng các chuẩn ODMG là khá đơn giản Một mặt, việc thiết kế hệ thống dữ liệu không dựa vào mô hình hiện có như mô hình quan hệ,
mà nó phải được xây dựng theo luận thuyết hướng đối tượng Mặt khác, tự bản thân ngôn ngữ truy vấn không được hỗ trợ và thiết kế hệ thống cũng phụ thuộc nhiều vào ngôn ngữ lập trình như C++, Smalltalk, Java ODMG 3.0 gồm 4 thành phần đặc tả chính đó là [14]
Mô hình đối tượng (Object Model): Mô hình dữ liệu chung được hỗ trợ cho cài
đặt các chuẩn ODMG được xây dựng dựa vào mô hình đối tượng của OMG
Ngôn ngữ định nghĩa đối tượng - ODL (Object Definition Language): Là ngôn
ngữ đặc tả được sử dụng để định nghĩa các kiểu đối tượng phù hợp với mô hình đối tượng của ODMG
Ngôn ngữ truy vấn đối tượng - OQL (Object Query Language) Đây là ngôn ngữ
khai báo phi thủ tục được sử dụng để truy vấn và cập nhật đối tượng SQL-92 được
sử dụng như là cơ sở cho OQL
Ràng buộc ngôn ngữ (Language Binding) như: C++, Smalltalk, Java Những
ngôn ngữ này được gọi là ngôn ngữ thao tác đối tượng OML (Object Manipulation
Language)
1.4.1 Mô hình đối tượng của ODMG
Trong CSDL hướng đối tượng, đối tượng (Object) và hằng ký tự (literal) là các thành phần cơ bản nhất của mô hình đối tượng Trong đó, mỗi đối tượng có định danh nhận biết đối tượng và giá trị, trong khi hằng ký tự chỉ có giá trị mà không có định danh Giá trị của đối tượng có thể có cấu trúc phức tạp và có thể thay đổi Tuy nhiên giá trị của hằng ký tự là cố định và không thay đổi, có thể có kiểu cấu trúc [14] Ví
dụ, lớp NhanVien sẽ tạo ra đối tượng NhanVien có định danh được hệ thống tạo ra,
còn những dữ liệu nguyên thuỷ như giá trị 20 kiểu int (nguyên thuỷ) là literal sẽ
không có định danh
Các đối tượng và các hằng ký tự có thể được phân loại theo các kiểu khác nhau
Nghĩa là mỗi đối tượng hay mỗi hằng ký tự sẽ thuộc về một kiểu Một đối tượng là một thể hiện kiểu của nó, mọi thể hiện (instance) của cùng một kiểu sẽ có cùng tập các thuộc tính và các hành vi (beharvior)
Trạng thái của đối tượng được xác định bởi tập các giá trị đặc tính của nó Các
đặc tính có thể là các thuộc tính hoặc các mỗi quan hệ của bản thân đối tượng với một
Trang 26hoặc nhiều đối tượng khác Trạng thái của đối tượng có thể thay đổi trong quá trình tồn tại của nó
Hành vi của đối tượng được định nghĩa là các hoạt động, có thể được thực hiện
trên chính đối tượng hoặc bằng cách nhận, gửi thông điệp từ các đối tượng khác Tùy theo trạng thái của mình mà đáp ứng của đối tượng đối với một thông điệp có thể khác nhau ở các thời điểm khác nhau Mỗi phương thức được xác định bằng định danh của nó Mỗi định danh bao gồm danh sách các tham số vào, danh sách tham số
ra và kiểu trả về
Hệ thống quản trị CSDL đối tượng (ODMS) lưu trữ các đối tượng, cho phép chia sẻ cho nhiều người sử dụng và nhiều chương trình ứng dụng ODMS được xây dựng theo lược đồ đối tượng đã được định nghĩa trong ODL và thoả mãn các mối ràng buộc về kiểu của lược đồ
Mô hình đối tượng của ODMG xác định: đối tượng, hằng ký tự, kiểu, thao tác, thuộc tính, quan hệ, … Người phát triển ứng dụng sẽ sử dụng những cấu trúc này trong mô hình đối tượng của ODMG để xây dựng mô hình đối tượng cho hệ thống ứng dụng của mình Mô hình đối tượng của chương trình ứng dụng chính là lược đồ (logic) của hệ quản trị CSDL đối tượng (ODMS) Mô hình đối tượng của ODMG định nghĩa cơ sở các chức năng của ODMS
1.4.2 Ngôn ngữ định nghĩa đối tượng ODL
Ngôn ngữ định nghĩa đối tượng ODL (Object Definition Language) là một ngôn ngữ đặc tả được dùng để định nghĩa các kiểu đối tượng theo ngữ nghĩa của mô hình đối tượng ODMG [13] và độc lập với các ngôn ngữ lập trình Nó được dùng để tạo ra các đặc tả đối tượng, đó là lớp và giao diện Mục đích chính của ODL là:
- Hỗ trợ để thiết lập các cấu trúc ngữ nghĩa của mô hình đối tượng ODMG
- Không phải là một ngôn ngữ lập trình đầy đủ mà là ngôn ngữ định nghĩa đặc tả đối tượng
- Độc lập với các ngôn ngữ lập trình (Language – Independent)
- Tương thích với ngôn ngữ định nghĩa giao diện IDL (Interface Definition Language) của OMG
- Có thể phát triển mở rộng, không chỉ đối với các chức năng trong tương lai mà
Trang 271.4.3 Ngôn ngữ truy vấn đối tượng OQL
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:
Trang 28[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, unop và binop 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
Trang 291.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ắp thứ
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
DuAn
+chucvu : string +luongquanly : double +phong : PhongBan +duan : DuAn
QuanLy
Hình 1.7 Lược đồ CSDL Quản lý Nhân viên
Trang 30Ví 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
(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, 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
(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, exists và in 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ừ
Trang 31Truy 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 và 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
Trang 32bằ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ì”)
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 lấy định danh (πO): phép toán πO nhận vào một đối tượng và trả về định danh của đối tượng
- Chiều lấy 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 lấy đố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
1.5.2 Phép toán bộ
Thiết lập bộ: tuple(a 1 : v 1 , …, a n : v n ) Phép toán tuple nhận một số các thuộc tính và các cặp giá trị (a i : v i ) và trả về một bộ (a 1 , …, a n)
Chiếu bộ π(Attrs) (): phép toán này nhận một bộ và trả về một bộ con với tên các
thuộc tính được mô tả trong tập Attrs
Trích xuất giá trị thuộc tính ðAttrs (): nhận vào một bộ và trả về giá trị của thuộc
Trang 33- Phép toán hợp: set_union
- Phép toán hiệu: set_diff
- Phép toán chọn trên tập hợp σss.f(): phép toán 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 mô tả trong công thức f
Ví dụ: cho A = {2, 6, 4, 9}, s
s.s > 5 (A) = {6, 9} Ký hiệu “” trong “s” được
dùng như một biến đếm các phần tử trong tập đã cho Với tập đã cho là một lớp, s là
một biến thể hiện lớp
- Phép toán 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 tập lồng nhau Ví dụ, set_flat({1, 2, 3},
{2, 3, 4}, {4, 5}) = {1, 2, 3, 4, 5}
- Phép toán áp dụng hàm trên tập set_applys.e (): phép toán set_applys.e nhận vào một tập và áp dụng biểu thức đại số e cho mỗi phần tử trong tập Ví dụ, cho A =
{{1, 2, 3}, {2, 3, 4}, {4, 5}} là một tập các tập, thì set_applys.A set_diff{3} (A) =
{{1, 2}, {2, 4}, {4, 5}} Phép toán set_apply và chiếu bộ (hoặc trích xuất giá trị
thuộc tính) thường được sử dụng như phép chiếu trên một tập các bộ Ví dụ xét
truy vấn “Cho biết tên và tuổi của các nhân viên”, ta có:
)(
set_apply.(hoten,tuoi)(V(S)) NhanVien
1.5.4 Phép toán bag “túi”
Các phép toán trên kiểu dữ liệu bag gồm có: thiết lập bag, hợp, hiệu, chọn, làm phẳng, áp dụng hàm trên bag: bag(), bag_union(), bag_diff(), b
s.f (), bag_flat(), bag_applys.e () và bagtoset(): chuyển đổi một “túi” (bag) về tập hợp (set) bằng cách
loại bỏ các trùng lặp trong “túi”
1.5.5 Phép toán trên danh sách
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: list(), first(), last(), list_cat(), l
s.f (), list_flat(), list_applys.e ()
1.5.6 Phép toán trên mảng
- 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
1.6 Kết luận
UML là ngôn ngữ mô hình hóa, ngôn ngữ đặc tả và ngôn ngữ xây dựng mô hình trong quá trình phát triển phần mềm, đặc biệt là trong phân tích và thiết kế hệ thống hướng đối tượng Chương 1 trình bày các khái niệm cơ bản như đối tượng, định danh
Trang 34đối tượng, lớp, kiểu và quan trong nhất là quan hệ kế thừa Giới thiệu về ngôn ngữ truy vấn CSDL hướng đối tượng OQL và đại số đối tượng để 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 hướng đối tượng OQL cung cấp khá nhiều kiểu dữ liệu thích hợp trong mô hình CSDL hướng đối tượng, đảm bảo cho sự đặc tả các đối tượng phức một cách phong phú và linh hoạt Đó 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 35Chương 2 TỐI ƯU HÓA TRUY VẤN CƠ SỞ DỮ LIỆU HƯỚNG ĐỐI
TƯỢNG 2.1 Giới thiệu
Khi thực thi một truy vấn, có thể có nhiều phương án mà hệ thống CSDL cho phép xử lý Các phương án đều có kết quả cuối cùng là tương đương về kết quả tính toán nhưng khác nhau về chi phí thực hiện, tức là tổng thời gian cần để thực hiện một truy vấn Lựa chọn phương án nào để có tổng thời gian thực hiện truy vấn là nhỏ nhất Như vậy, vấn đề cần quan tâm là làm sao cực tiểu tần suất sử dụng của CPU, bộ nhớ, chi phí vào/ra và các nguồn tài nguyên về lĩnh vực truyền thông Với kỹ thuật phần cứng hiện nay việc tối ưu thực thi một truy vấn chỉ còn là vấn đề làm cực tiểu thời gian trả lời của truy vấn, trong khi đó các hệ thống lại chịu sự chi phối chính ở thời gian trao đổi vào/ ra Do đó, chúng ta cần lựa chọn phương án nào để có tổng thời gian thực hiện là nhỏ nhất? Để giải quyết vấn đề đó, chúng ta cần dùng các phương pháp để tối ưu hoá truy vấn trong các hệ thống quản trị CSDL
Trong những năm gần đây vấn đề tối ưu hoá truy vấn hướng đối tượng được nhiều nhà nghiên cứu quan tâm, các kỹ thuật tối ưu hoá truy vấn được phát triển có tính kế thừa từ mô hình CSDL quan hệ như dựa vào sự chuyển đổi lược đồ CSDL hướng đối tượng sang lược đồ quan hệ nhúng, thực hiện phương pháp biên dịch truy vấn đối tượng OQL về truy vấn quan hệ SQL Việc sử dụng CSDL quan hệ nhúng làm nền trong lưu trữ vật lý và các thao tác dữ liệu được thực hiện qua giao diện hướng đối tượng là giải pháp ứng dụng phù hợp cho một số hệ thống CSDL đối tượng – quan hệ Bên cạnh đó, để giải quyết cho một lớp các truy vấn đối tượng không lồng, có thể sử dụng phương pháp tối ưu truy vấn dựa trên tập luật biến đổi đại
số đối tượng được áp dụng cho các mô hình dữ liệu hướng đối tượng có hỗ trợ tập luật Phương pháp này xử lý cho lớp các truy vấn trên các kiểu đối tượng phức như kiểu túi, đa tập, danh sách, bộ, …v.v, nhưng khi thực hiện trên các lớp sưu tập, các biểu thức đại số đối tượng lồng thì nó chi phí ước lượng và các phương án thực thi truy vấn chưa hiệu quả Vì vậy, cần phải nghiên cứu các phương pháp, đề xuất các kỹ thuật tối ưu hóa truy vấn phù hợp cho các truy vấn đối tượng lồng
Đối với tối ưu hóa các truy vấn lồng trong CSDL hướng đối tượng đã được Cluet, S [27] đề xuất theo cách tiếp cận hai bước Bước đầu tiên, được gọi là tối ưu hóa trên cơ sở phụ thuộc: biến đổi các truy vấn ở mức ngôn ngữ nhằm thực hiện các biểu thức con chung và các truy vấn con độc lập một cách hiệu quả hơn Các truy vấn
đã biến đổi được biên dịch thành các biểu thức đại số lồng nhau Sự định giá các
Trang 36vòng lặp lồng nhau có thể không hiệu quả Vì vậy, ở bước hai xử lý cho các truy vấn con lồng trong giai đoạn “làm phẳng” các biểu thức đại số lồng nhau giúp cho phép định giá hiệu quả hơn Trong luận văn, tập chung nghiên cứu cách tiếp cận phương pháp biểu diễn các truy vấn lồng bằng siêu đồ thị kết nối Xuất phát từ ý tưởng biểu diễn và tối ưu hóa các truy vấn bằng siêu đồ thị của J.D Ullman [12] và Han [16] trên ngôn ngữ QUEL/SQL, Chúng tôi nghiên cứu mở rộng thuật toán tối ưu hóa câu truy vấn Wong-Youssefi trong ngôn ngữ truy vấn OQL trên CSDL hướng đối tượng và đưa ra phương pháp ước lượng chi phí phụ thuộc tỷ số giữa số các đối tượng của lớp bắt đầu trong biểu thức đường dẫn và tổng số các đối tượng của lớp, dựa trên mối quan hệ nhiều - nhiều giữa các lớp Tỷ số này là một trong những tham số lựa chọn trong quá trình thiết kế CSDL
2.1.1 Siêu đồ thị kết nối
Siêu đồ thị là sự tổng quát hóa của một đồ thị, trong đó một cạnh có thể nối với
bất kỳ đỉnh nào Về mặt hình thức, một siêu đồ thị H là một cặp 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 (hay gọi là thuộc tính), và mỗi siêu cạnh e E tương ứng với một tập các mục dữ liệu có liên quan với nhau (lớp, điều kiện) Khái niệm 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 đỉnh Ta có siêu đồ thị được thể hiện như trong hình 2.1 sau [9]:
Hình 2.1 Siêu đồ thị H
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]
Trang 37Định nghĩa 2.1: Siêu đồ thị kết nối đối tượng là một bộ sáu:
(v) S H : V H E H là ánh xạ khởi tạo các siêu cạnh từ tập các nút
(vi) lb H : E HL H là hàm gán nhãn cho siêu cạnh, sao cho
e E H thì lb H (e) L H
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:
- C i 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 C i
được biểu thị bằng một nút Nếu hai lớp C i và C j đề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 C i Xét biểu thức điều kiện trong mệnh đề Where, các biểu thức điều kiện
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 C i, 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
C i , 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
Trang 38hai 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 c 2 as d
Select A
From c 1 , c 2 , c 3
Where c 1 A = c 3 .F and (c 1 A + c 1 B > c 3 .D) and (c 3 .E IN (d)) and (c 1 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”
C H = {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
Trang 39L H = {c1, c2, c3, f1, f2,”head”} là các nhãn
E H = E C E Q , với E C 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à E Q 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ị
Lược đồ đối tượng S được biểu diễn hình thức là: S = (s 1 , …, s n ), s i là các lớp
trong S và truy vấn đối tượng QE = (s 1 , …, s m , R, p 1 , …, p k ), trong đó s i (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à p j (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ượng S = (s 1 , …, s n),
// 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({s i}) và gán nhãn lbH(e)
(6) else if (s i 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 s i ‟ 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({s i ‟}) và gán nhãn lbH(e)
Trang 40Từ 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 = (s 1 , ,s m ),
Truy vấn đối tƣợng QE = (s 1 , , s r , R, p 1 , ,p k),
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 (QE i QE)
(4) Khởi tạo siêu đồ thị H i với mỗi QE i (thuật toán 2.1)
(5) H := H Hi
(6) T := {is, in, union, diff, forall, exists, }
(7) While (t i T)
(8) Khởi tạo siêu cạnh kết nhập g có nhãn là t i , 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:
heso: float;