So sánh DATALOG với đại số quan hệ

Một phần của tài liệu Tiểu luận môn cơ sở dữ liệu nâng cao NGHIÊN CỨU CƠ SỞ DỮ LIỆU SUY DIỄN VÀ ỨNG DỤNG (Trang 38 - 44)

III. Chương II I: CƠ SỞ DỮ LIỆU SUY DIỄN 1.Giới thiệu chung

10)So sánh DATALOG với đại số quan hệ

Về mặt cơ bản ngôn ngữ Datalog với các câu hỏi không đệ quy được xem như tương đương với đại số quan hệ về khả năng thể hiện.

Với các câu hỏi đệ quy cho phép người ta một công cụ mạnh hơn các ngôn ngữ quan quan hệ. Điều này ngôn ngữ Datalog cho phép hỏi các câu hỏi không được phép trong đại số quan hệ.

Phép hợp : là tập các luật có cùng đầu luật

Hỏi(X1, X2,…,Xn) ← r1(X1, X2,…,Xn) Hỏi(Y1, Y2,…,Yn) ← r2(Y1, Y2,…,Yn) Ví dụ 1: (r1) Chamẹ(x,y) ← Bố(x,y)

(r2) Chamẹ(x,y) ← mẹ(x,y)

Ví dụ 2 : Tìm tên của các khách hàng tại chi nhánh “Hà Nội”, làm như sau: Hỏi(Y) ← Vay(“Hà Nội”, X, Y, Z)

Hỏi(B) ← Gưi tiền(“Hà Nội”, A, B, C)

Phép chọn : ứng với một luật mà thân luật có một vị từ so sánh -> biểu thức chọn.

Phép chọn chọn các n_bộ trong quan hệ r được viết dưới dạng câu hỏi:

r(x1, x2,…, xn)?

Trong đó: xi (i=1, 2,..,n) là tên biến hay một hằng số. Ví dụ 1: Chamẹ(x,y) ← Chamẹ(x,y) , y= Dũng

điều này ≈σy = ‘Dũng’(Chamẹ(x,y)) ( phép chọn với điều kiện là y= ‘Dũng’) Ví dụ 2: Chọn (tìm kiếm) tên của những khách hàng vay quá 1000? Hỏi(Y) ← Vay(“Hà Nội”, X, Y, Z), Z >1000

Phép chiếu : là phép toán ứng với một số luật mà có một số biến ở thân luật mà không xuất hiện trong đầu luật.

Cha(x) = KQ(x) ← Chamẹ(x,y) , y = Dũng

Phép kết nối : là phép ứng với luật mà có biến chung ở các vị từ của thân luật. Phép kết nối hai quan hệ r1 và r2 được viết dưới dạng Datalog như sau:

Hỏi(X1, X2,…,Xn, Y1, Y2,.., Ym) ← r1(X1, X2,…,Xn), r2(Y1, Y2,.., Ym) Trong đó: Xi, Yj | i=1,2,..,n và j=1,2,..,m là các tên biến phân biệt nhau. Ví dụ 1: (r3) Ôngbà(x,y) ← Chamẹ(x,z) , Chamẹ(z,y)

Khả năng đệ quy : Ví dụ 1: như (r7)

Ví dụ 2: Giả sử có lược đồ quan hệ:

Quản lý(Tên nhân công, tên người quản lý)

Lược đồ thể hiện mối quan hệ người quản lý và nhân công. Giả sử “Quản lý” là một quan hệ theo mô hình trên.

Tên nhân công Tên người quản lý Mỗ Hoa Mai Lan Chén Tích Mễ Mỗ Mỗ Mỗ Hoa Hoa Yêu cầu:

a) Tìm tên của những người làm việc trực tiếp dưới quyền của ông Mỗ, tức phụ thuộc mức 1, viết như sau:

Hỏi(X) ← Quản lý(X, “Mỗ”)

b) Để tìm tên của những người làm việc trực tiếp dưới quyền của người do ông Mỗ quản lý, tức phục thuộc mức 2 vào ông Mỗ, Viết như sau:

Hỏi(X) ← Quản lý(X, Y), Quản lý(Y, “Mỗ”)

Như vậy, người ta không thể thể hiện yêu cầu tìm người phụ thuộc bậc n vào ông Mỗ trong đại số quan hệ được. Dĩ nhiên câu hỏi tìm tên của nhân công làm việc

dưới quyền của ông Mỗ, trực tiếp hay gián tiếp, không thể tạo được bằng đại số quan hệ hay bằng Datalog với các câu hỏi không đệ quy. Nguyên nhân là do người ta không biết ông Mỗ quản lý đến mức nào. Tuy nhiên người có thể tạo câu hỏi này trong Datalog dưới dạng câu hỏi đệ quy như sau:

e(X) ← Quản lý(X, “Mỗ”) e(X) ← Quản lý(X, Y), e(Y) Hỏi(X) ← e(X)

Chú ý:

Cách 1: Đối với những câu hỏi đệ quy người ta cũng có thể chuyển về câu hỏi không đệ quy bằng cách sử dụng ngôn ngữ tựa Pascal với một số lần hữu hạn các bước lặp. Việc lặp được thể hiện qua câu lệnh Repeat. Điều kiện trong câu Until sẽ kiểm tra về tập hợp, như tính bằng nhau, bao nhau hay rỗng. Trong câu Until các quan hệ suy diễn được coi như các tập. Do vậy câu hỏi đệ quy trên có thể được viết lại như sau:

e’(X) ← Quản lý(X, “Mỗ”) Repeat (adsbygoogle = window.adsbygoogle || []).push({});

e(X) ← e’(X)

e’(X) ← Quản lý(X, Y), e(Y) Until e = e’

Mô tả:

Luật đầu tiên tìm nhân công mà ông Mỗ trực tiếp quản lý. Khi hoàn thành các luật trong vòng Repeat được đánh giá.

Tại mỗi lần lặp, mức tiếp theo của nhân công được tìm và được bổ sung vào tập

e.

Thủ tục này kết thúc khi tập e = e’ (Khi không còn nhân công mới có thể được bổ sung vào e.). Mặt khác, do tập những người quản lý là hữu hạn.

Cách thực hiện: Theo dõi chu trình với các dữ liệu trong bảng khi chạy. e’ = {Hoa, Lan, Mai}

e = {Hoa, Lan, Mai}

e’ = {Hoa, Lan, Mai, Chén, Tích} e = {Hoa, Lan, Mai, Chén, Tích}

Cách 2: Ngoài cách làm như trên người ta có thể có cách làm khác mà vẫn đạt được kết quả như trên:

m(X, Y) ← Quản lý(X, Y)

m(X, Y) ← Quản lý(X, Z), m(Z, Y) Hỏi(X) ← m(X, “Mỗ”)

So sánh giữa cách 1 cách 2:

Cách 1: Tìm ra các nhân công của ông Mỗ. Cách này cho phép tìm nhanh hơn. Cách 2: Tìm tất cả quan hệ nhân công – người quản lý rồi chọn ra các cặp có tên người quản lý là Mỗ

Khác với câu hỏi không đệ quy, người ta có nhiều chiến lược đánh giá câu hỏi đệ quy như chiến lược đánh giá từ dưới – lên.

Để đánh giá câu hỏi đệ quy e được gọi là đánh giá thô. Tuy nó đơn giản những không mấy hiệu qủa trong số các chiến lược dưới – lên. Sự không hiệu quả là do khi người ta sử dụng luật đệ quy, tập e trước đó đã được sử dụng trong tính toán. Để hiệu quả hơn, người ta dùng đánh giá nửa thô. Dưới đây chỉ các nhân công vừa được bổ sung trong lần lặp trước mới được luật xét đến.

Cách 1: i:=0

ei (X) ← Quản lý(X, “Mỗ”) Repeat

e(X) ← ei (X)

ei + 1(X) ← Quản lý(X, Y), ei (Y) i: = i +1 Until ei⊆ e Cách 2: i:=0 mi (X, Y) ← Quản lý(X, Y) Repeat m(X, Y) ← mi (X, Y) mi + 1(X, Y) ← Quản lý(X, Z), mi (Z, Y) i: = i +1

Until mi⊆ m

Hỏi(X) ← Quản lý(X, “Mỗ”)

Lưu ý: Dù đã có phương pháp đánh giá tốt hơn đánh giá thô, người ta vẫn không đạt được hiệu quả như trong câu hỏi cho cùng kết quả trước đó. Cũng có nhiều kĩ thuật đảm bảo làm tinh kĩ thuật nửa thô.

Một phần của tài liệu Tiểu luận môn cơ sở dữ liệu nâng cao NGHIÊN CỨU CƠ SỞ DỮ LIỆU SUY DIỄN VÀ ỨNG DỤNG (Trang 38 - 44)