Trong thời gian gần đây, một số phƣơng pháp mở rộng để trả lời câu truy vấn đƣợc đề xuất nhằm mục đích tạo ra một chiến lƣợc tìm kiếm hƣớng đích, đồng thời có tính hiệu quả là đảm bảo kết thúc quá trình tính toán câu trả lời truy vấn. Điển hình là phép biến đổi ma tập (magic set transformation). Phƣơng pháp này đƣợc đánh giá là một trong những kỹ thuật tối ƣu câu truy vấn có hiệu quả trong CSDL suy diễn. Lý do quan trọng đối với sự thành công của các phƣơng pháp này là sự kết hợp đƣợc các ƣu điểm của kỹ thuật định giá theo kiểu trên xuống và dƣới lên, từ đó giảm thiểu đƣợc số các sự kiện cần tính và tìm kiếm CSDL. Trong [3] tác giả đã áp dụng hai phƣơng pháp
này để xử lý vòng lặp vô hạn trong quá trình định giá câu truy vấn trên chƣơng trình Datalog.
Có thể minh hoạ cho kiểu tiếp cận này bởi hoạt động của phép biến đổi ma tập. Ý tƣởng chính của phép biến đổi ma tập là mô phỏng sự lan truyền các trị buộc đƣợc tạo ra trong phƣơng pháp định giá câu truy vấn kiểu trên xuống. Sự lan truyền này nhận đƣợc bằng cách viết lại chƣơng trình gốc ban đầu. Trong mỗi quy tắc gốc một điều kiện mới đƣợc thêm vào để hạn chế việc tính toán trên quy tắc. Các điều kiện này đƣợc xem là các quan hệ lọc. Một tập quy tắc mới đƣợc tạo ra để mô phỏng sự lan truyền các trị buộc.
Phƣơng pháp ma tập biến đổi chƣơng trình Datalog P thành một chƣơng trình đƣợc gọi là chƣơng trình magic. Chƣơng trình magic tƣơng đƣơng với chƣơng trình P (theo nghĩa cho cùng kết quả câu truy vấn) nhƣng việc định giá trên chƣơng trình magic này sẽ hiệu quả hơn so với việc định giá câu truy vấn trên chƣơng trình ban đầu. Quá trình biến đổi chƣơng trình P theo phƣơng pháp ma tập bao gồm hai giai đoạn:
Giai đoạn 1: Thực hiện việc tô điểm chƣơng trình ban đầu thành một chƣơng trình (ký
hiệu Pad) theo một chiến lƣợc truyền thông tin sang ngang đƣợc chọn trƣớc. Chiến lƣợc này chỉ ra cách thức để các trị buộc trong đầu của quy tắc đƣợc truyền đến thân, thứ tự mà các đích con trong thân sẽ đƣợc tính và cách thức để các trị buộc này truyền sang ngang giữa các đích con trong thân quy tắc.
Giai đoạn 2: Một chƣơng trình đƣợc tạo ra từ chƣơng trình Pad, đƣợc gọi là chƣơng
trình magic. Giai đoạn hai bao gồm các công việc sau:
1. Khởi tạo sự kiện magic, sự kiện này chứa các hằng trong truy vấn.
2. Xây dựng vị từ magic, đối với mỗi vị từ IDB p, vị từ mag_p chính là vị từ nhận đƣợc từ p bằng cách chiếu lên các đối buộc của nó. Các vị từ magic giới hạn giá trị của các đối trong các vị từ để hạn chế việc tính các sự kiện không liên quan đến câu truy vấn. 3. Xây dựng các quy tắc định nghĩa vị từ magic.
4. Xây dựng các quy tắc sửa đổi từ các quy tắc trong Pad
bằng cách chèn vị từ magic vào trƣớc thân các quy tắc của chƣơng trình Pa d
.
Ví dụ 2.7 Xét chƣơng trình P gồm các quy tắc sau đây:
r1: path(X, Y) arc(X, Y)
r2: path(X, Z) arc(X, Y) path(Y, Z)
trong đó arc là vị từ EDB, giả sử quan hệ đối với vị từ arc gồm các bộ (1, 2), (3, 2), (2, 4), path là vị từ IDB. Câu truy vấn ?path(3, X)
Sử dụng thuật toán biến đổi ma tập, ta biến đổi chƣơng trình P thành chƣơng trình Mag_P sau đây:
mr1: path(X, Y) mag_path(X, Y) arc(X, Y)
mr2: path(X, Z) mag_path(X, Y) arc(X, Y) path(Y, Z) mr3: mag_path(Y, Z) mag_path(X, Z) arc(X, Y)
mr4: mag_path(3, X)
Sử dụng thuật toán nửa ngây thơ đối với chƣơng trình viết lại này, ta nhận đƣợc: Bƣớc 1: path và mag_path là rỗng, thuật toán chỉ sinh ra mag_path(3,X)
Bƣớc 2: Quy tắc mr1 tạo ra sự kiện path(3, 2), quy tắc mr3 tạo ra mag_path(2, Z) Bƣớc 3: Quy tắc mr1 tạo ra sự kiện path(2, 4), quy tắc mr1 tạo ra mag_path(4, Z) Bƣớc 4: Quy tắc mr2 tạo ra sự kiện path(3, 4)
Bƣớc 5: Không có sự kiện mới nào đƣợc tạo ra. Thuật toán dừng. Câu trả lời truy vấn nhận đƣợc.
Mặc dầu kỹ thuật ma tập đã đƣợc đánh giá là rất hiệu quả nhƣng nó chƣa hẳn là chiến lƣợc định giá câu truy vấn tốt nhất. Trong chƣơng 3, sẽ thảo luận một số hạn chế của phƣơng pháp này và trình bày một số cải tiến.