Do cơ sở lý thuyết của truy vấn trên ODB là còn khá mới so với RDB, nên các câu truy vấn được hỗ trợ bởi Versant là còn hạn chế. Chỉ những câu truy vấn tìm kiếm – Search query – là được hỗ trợ trực tiếp từ DBMS.
a. Search query.
Truy vấn tìm kiếm, search query, là xem xét một nhóm đối tượng và trả về những đối tượng thỏa điều kiện dị tìm.
Trong Versant, điều kiện dị tìm được gọi là perdicate, mỗi predicate là kết hợp bởi một hay nhiều predicate term. Mỗi predicate term bao gồm ba thành phần: thuộc tính cần kiểm tra, phép tốn so sánh và giá trị khóa. Các predicate term kết hợp với các phép logic toán and, or, not tạo thành predicate.
Predicate ::= PredicateTerm [ AND|OR PredicateTerm ]*
PerdicateTerm ::=[NOT] AttributeName COMPARISION_OPERATOR KeyValue
Trong đó:
• AttributeName: tên thuộc tính cần so sánh của đối tượng. Tên thuộc tính phải
được đặt theo đúng quy cách. Thuộc tính phải thuộc một trong các kiểu sau:
kiểu vô hướng; kiểu mảng tĩnh các phần tử 1 byte; Vstr của kiểu 1 bytes; các
Link, LinkVstr và mảng các Link; chuỗi kiểu PString hoặc VString; các kiểu lưu trữ thời gian: VDate, VTime, o_date, o_time, o_timestamp, o_interval. • COMPARISION_OPERATOR: là các phép tốn so sánh. Có 4 loại phép tốn
so sánh: quan hệ (=,>=,…), so sánh chuỗi (O_MATCH, O_NOT_MATCH), kiểm tra đối tượng có thuộc lớp hay khơng (O_ISA_EXACT, O_NOT_ISA_
EXACT) và các phép tốn tập hợp.
• KeyValue: là giá trị cho trước dùng để so sánh với thuộc tính của các đối
tượng.
Như vậy, ta có thể hiện thực câu truy vấn theo vùng bằng predicate như sau:
(xmin<= x)and(x <= xmax)and( ymin<= y)and(y <= ymax)and(zmin<= z)and(z <= zmax). Do hạn chế của mệnh đề truy vấn chỉ lượng giá giá trị thuộc tính với một giá trị khác, nên ta không thể thiết lập biểu thức truy vấn lân cận theo cơ chế trên. Vì vậy, để có thể truy vấn các đối tượng lân cận một đối tượng, ta phải viết giải thuật hiện thực ở cấp chương trình.
b. Chỉ mục cho Search query.
Việc truy tìm các đối tượng thỏa mệnh đề truy vấn theo vùng sẽ trở nên rất nặng nề do, DBMS phải tiến hành lượng giá sáu mệnh đề logic, sau đó phải giao các kết quả trung gian với nhau mới đưa ra được kết quả cuối cùng. Do đó, để tăng hiệu suất tìm kiếm ta phải giảm bớt số lượng đối tượng lượng giá mà không ảnh hưởng đến kết quả. Để làm
được điều này, Versant cung cấp khả năng tạo chỉ mục trên các thuộc tính.
Chỉ mục chỉ áp dụng trên một thuộc tính đơn của một lớp và ảnh hưởng đến tất cả các
đối tượng của lớp này. Nó là một danh sách của các cặp gồm giá trị khóa và định danh
của đối tượng. Chỉ mục khơng có tên và được quản lý tự động, nó có thể là duy nhất hoặc không duy nhất. Tuy nhiên, một chỉ mục chỉ có tác dụng đến một lớp duy nhất, nó khơng có tính kế thừa. Vì vậy, để chỉ mục cho một thuộc tính của lớp cha có tác
dụng trên các lớp con, ta phải thiết lập chỉ mục tường minh cho các lớp con này. Mỗi thuộc tính có thể có hai loại chỉ mục: chỉ mục B-Tree và chỉ mục bảng băm – hash table. Tùy vào các câu truy vấn dự định trên thuộc tính đế có thể đặt các loại chỉ mục phù hợp.
• Chỉ mục B-Tree: thường phù hợp cho các câu query theo đoạn. Như vậy, trong câu truy vấn theo vùng, các thuộc tính tọa độ của đối tượng nên được đặt chỉ mục B-Tree.
• Chỉ mục bảng băm: thường phù hợp với phép so sách trùng các chuỗi.
c. Chỉ mục cho dữ liệu đa chiều.
Ta thấy, đối với các đối tượng không gian dựa vào cơ chế truy vấn của Versant chỉ
giải quyết được một phần nhỏ các yêu cầu truy vấn do cơ chế chỉ mục của Versant là chỉ mục của thuộc tính đơn. Vì vậy, ta cần xây dựng một cấu trúc chỉ mục khác phù hợp với dữ liệu đa chiều.
Luận văn tốt nghiệp GVHH: Nguyễn Hữu Hải.