Tải bản đầy đủ (.pdf) (29 trang)

NGHIÊN CỨU MÔ HÌNH CSDL SUY DIỄN VÀ ỨNG DỤNG TRONG KHAI THÁC MẠNG THÔNG TIN KHÔNG ĐỒNG NHẤT

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.87 MB, 29 trang )

ĐẠI HỌC QUỐC GIA TP. HCM
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
___________________________
BÁO CÁO TIỂU LUẬN MÔN HỌC CƠ SỞ DỮ LIỆU NÂNG CAO

NGHIÊN CỨU MÔ HÌNH CSDL SUY DIỄN VÀ ỨNG DỤNG TRONG KHAI THÁC
MẠNG THÔNG TIN KHÔNG ĐỒNG NHẤT
(RESEARCHING ON DEDUCTIVE DATABASE SYSTEM AND APPLICATIONS IN HETEROGENEOUS INFORMATION
NETWORK MINING)

HVTH: ThS. PHẠM THẾ ANH PHÚ
GVHD: TS. NGUYỄN GIA TUẤN ANH
1. GIỚI THIỆU CHUNG VỀ CSDL SUY DIỄN & CÁC VẤN ĐỀ LIÊN QUAN ĐẾN KHAI THÁC TRI
THỨC TỪ CSDL
1.1. Nhu cầu về khả năng suy diễn và sinh tri thức từ dữ liệu
Lưu trữ, quản lý và truy xuất dữ liệu một cách hiệu quả là một trong các vấn đề rất quan trọng của ngành khoa
học máy tính. Hiển nhiên rằng, việc lưu trữ và quản lý dữ liệu có thể xem là một nhu cầu thiết yếu không thể
thiếu của tất cả mọi lĩnh vực, như: kinh tế/tài chính, quản lý xã hội, y tế, giáo dục, v.v. Trong xu thế phát triển
của Internet cùng với sự bùng nổ của dữ liệu trong kỷ nguyên BigData như hiện nay, thì bài toán lưu trữ và
quản lý dữ liệu càng được đặt nặng và có mức độ phức tạp cao hơn, vì ngoài yêu cầu có thể lưu trữ, quản lý
được một khối lượng dữ liệu vô cùng lớn, thì các hệ quản trị CSDL còn phải có khả năng tự suy luận cũng như
hỗ trợ rút trích hiệu quả các tri thức từ khối dữ liệu vô cùng lớn mà nó lưu trữ.
Tập luật
(rules) và sự
kiện (facts)

Phân tích cấu trúc
và các đặc tính
của dữ liệu
Dữ liệu
thô


có sẵn

Phát triển mô hình
giải thuật, thuật
toán phù hợp

A. Hướng tiếp cận khai
thác tri thức từ dữ liệu
thô có sẵn

Cơ chế lưu
trữ và suy
diễn

Dữ liệu thô
đầu vào

Thông tin và tri
thức có giá trị

B. Hướng tiếp cận khai
thác tri thức trực tiếp từ
hệ quản trị CSDL suy diễn

Hình 1.1. Sự khác biệt giữa hai hình thức khai phá tri thức từ dữ liệu

Khai phá tri thức và tự sinh tri thức từ CSDL. Hiển nhiên rằng các khái niệm rút trích thông tin (information
extraction) và khai phá tri thức (data mining / knowledge discovering) từ dữ liệu đã không còn là một lĩnh vực
xa lạ đối với chúng ta trong những năm gần đây. Tuy nhiên, việc khai thác dữ liệu còn phụ thuộc quá nhiều vào
việc phát triển các mô hình giải thuật, thuật toán, phương pháp,v.v. thông qua việc nghiên cứu về cấu trúc của

khối dữ liệu đã có. Và hướng tiếp cận này chỉ có thể áp dụng được cho cụ thể trường hợp của khối dữ liệu đã
nghiên cứu. Do đó kém tính linh hoạt cũng như khó khăn trong việc kiểm chứng được tính đúng đắn của tri
thức đầu ra. Bảng 1.1 đưa ra một số so sánh về sự khác biết giữa mô hình khai thác tri thức từ mô hình khai
thác dữ liệu và áp dụng hệ CSDL suy diễn. Do đó, câu hỏi đặt ra là, thay vì nghiên cứu cách để khai thác tri


2

Phạm Thế Anh Phú / Báo Cáo Tiểu Luận Môn Học Cơ Sở Dữ Liệu Nâng Cao - UIT

thức từ khối dữ liệu đã có sẵn, chúng ta có thể trực tiếp để CSDL tự sinh ra tri thức ngay từ khi dữ liệu mới
được nạp vào hay không ? (minh họa Hình 1.1)
Bảng 1.1. Khác biệt giữa mô hình khai thác tri thức từ mô hình khai thác dữ liệu và áp dụng hệ CSDL suy diễn

Phương pháp tiếp cận

Linh hoạt trong sự mở
rộng của dữ liệu theo thời
gian
Chuẩn hóa hình thức tổ
chức lưu trữ dữ liệu
Linh hoạt trong áp dụng
cho nhiều mô hình dữ liệu
khác nhau
Chi phí cho việc xây dựng
và thời gian
Đáp ứng yêu cầu về độ
chính xác và tính đúng
đắn của tri thức
Trường hợp áp dụng


Tiếp cận theo hướng xây mô hình/giải thuật
khai thác dữ liệu
(data mining technique)

Tiếp cận theo hướng CSDL suy diễn
(deductive and reasoning database)

Thông qua việc phân tích khối dữ liệu có sẵn đã
biết trước và tri thức cần biết từ dữ liệu à xây
dựng các giải thuật phù hợp để rút trích tri thức.

Từ khối dữ liệu đã biết trước, thiết kế mô hình lưu trữ
và dựa tri thức của chuyên gia (con người) để định
nghĩa các quy luật (rules) à hỗ trợ cho quá trình sinh
tri thức mới từ dữ liệu.

Tri thức được khai thác chỉ đúng cho khối dữ
liệu được khai thác tại thời điểm đó. Khi dữ liệu
thay đổi (mở rộng) cần phải chạy lại mô hình để
sinh lại tri thức mới tương ứng với khối dữ liệu
mới đó.
Không cần, có thể áp dụng trực tiếp lên tập dữ
liệu thô đã có mà không cần phải qua các bước
tiền xử lý phức tạp.
Kém linh hoạt và chỉ có thể áp dụng cụ thể cho
một loại dữ liệu nào đó mà thuật toán được thiết
kế (giao dịch, đồ thị, chuỗi thời gian, v.v.).
Thấp, chỉ đòi hỏi mô hình thuật toán tốt và thời
gian cho việc xử lý.

Tùy thuộc vào độ tin cậy của thuật toán được áp
dụng, chỉ đáp ứng ở mức độ chấp nhận được,
không yêu cầu chính xác tuyệt đối.
Áp dụng trong các trường hợp mà khối lượng dữ
liệu cần xử lý là vô cùng lớn, nhưng chúng ta
không có đầy đủ sự hiểu biết về nó cũng như,
kinh nghiệm chuyên gia,v.v. để có thể rút ra
được tập các quy luật tổng quát nhất. Phù hợp
cho việc xây dựng các hệ thống tư vấn, khuyến
nghị và hỗ trợ ra quyết định với đặc thù độ chính
xác không yêu cầu phải là 100%.

Có khả năng linh hoạt tự sinh ra tri thức mới khi có
dữ liệu được thêm vào (mở rộng), dựa trên các luật
đã được định nghĩa cũng như tri thức đã có của khối
dữ liệu cũ.
Cần định nghĩa và quy định trước, và có thể sẽ tốn
khá nhiều thời gian cho giai đoạn này. Dữ liệu không
được chuẩn hóa sẽ ảnh hưởng khá nhiều đến tri thức
được sinh ra.
Có thể áp dụng được cho nhiều loại dữ liệu khác
nhau, tùy thuộc vào hình thức tổ chức lưu trữ.
Rất cao, do đòi hỏi nhiều thời gian trong việc xây
dựng tập luật và chuẩn hóa dữ liệu lưu trữ.
Gần như có thể đạt độ chính xác tuyệt đối nếu dữ liệu
được chuẩn hóa tốt và sự đầy đủ cũng như chính xác
của các luật được định nghĩa.
Yêu cầu phải có đầy đủ kiến thức nền tảng cũng như
tri thức ở cấp độ chuyên gia để có thể xây dựng được
các tập luật chuẩn cho khối dữ liệu lưu trữ. Được áp

dụng trong việc xây dựng các hệ chuyên gia trong
ngôn ngữ, y tế, giáo dục, địa lý,v.v. yêu cầu độ chính
xác gần như tuyệt đối (100%), đóng vai trò làm nguồn
cơ sở tri thức cho các hệ thống trí tuệ nhân tạo.

Hay nói cách khác hơn hệ CSDL lúc này cần đóng vai trò như là một hệ cơ sở tri thức tự suy luận (knowledgebased system), hay còn gọi là các hệ chuyên gia (expert system). Từ đó khái niệm về việc xây dựng một hệ
CSDL có khả năng suy luận và hỗ trợ đưa ra kết luận/quyết định (deduction) được ra đời, hay còn gọi vắn tắt
là CSDL suy diễn (deduction database).
1.2. Sơ nét về lịch sử phát triển và các hệ CSDL suy diễn
1.2.1. Lịch sử phát triển của CSDL suy diễn
Cơ sở dữ liệu suy diễn [1] [2] [3] ban đầu được đề xuất do nhu cầu cần gom nhóm các mối quan hệ giữa các
thành phần của dữ liệu được tổ chức trên nền tảng CSDL bảng quan hệ (RDBMS) để hình thành các quy luật
tổng quát nhất, hỗ trợ cho việc rút trích dữ liệu được thuận tiện hơn. Ví dụ: trong CSDL bảng quan hệ truyền
thống, để thể hiện một mối quan hệ trực tiếp giữa hai thực thể ta phải dùng tối thiểu 1 bảng để biển diễn và lưu
"#$

"#$

()*

trữ mối quan hệ này, ta có thể biểu diễn như sau: 𝐴
𝐵,𝐵
𝐶,𝐵
𝐷 v.v. Ta có thể thấy CSDL bảng quan
hệ chỉ hiệu quả khi thể hiện các mối quan hệ hai ngôi trực tiếp, còn lại đối với các mối quan hệ gián tiếp, thì rất


Phạm Thế Anh Phú / Báo Cáo Tiểu Luận Môn Học Cơ Sở Dữ Liệu Nâng Cao - UIT

???


3

???

khó để biểu diễn và mô hình hóa, ví dụ: các quan hệ gián tiếp như: 𝐴 𝐶, 𝐴 𝐷. Do đó, đòi hỏi CSDL quan
hệ cần được mở rộng hơn để có thể suy diễn và khái quát hóa hơn các mối quan hệ trên dựa trên các tập luật và
mệnh đề logic. Ví dụ: dựa trên logic mệnh đề và luật: “cha” của “cha” thì tức là “ông”, ta có thể suy ra: 𝐴

ô./

ô./

𝐶,

𝐴
𝐷. Đây là một trong các hạn chế lớn của CSDL quan hệ truyền thống, trong khả năng tổng quát hóa cũng
như suy diễn các mối quan hệ của dữ liệu.
Về ý tưởng xây dựng và nguyên lý, CSDL suy diễn được phát triển từ các đóng góp của Green, C. Cordell và
Raphael, Bertram (1968) [4], trong việc phát triển các ứng dụng và hệ thống hỏi-đáp (question-answer) (trong
hai mô hình QA1 và QA2). Xuất phát từ ý tưởng ban đầu của Green và cộng sự trong việc dùng toán học logic
để mô tả và hệ thống mối quan hệ của dữ liệu. Trong đó, việc áp dụng tư duy logic toán học trong lập trình, hay
còn có thể gọi là sử dụng toán học với các ký hiệu, hàm, v.v. như một ngôn ngữ lập trình, đóng vai trò rất quan
trọng trong việc phát triển các ứng dụng CSDL suy diễn.
Điển hình nhất trong lập trình logic (logic programming) là sự ra đời của ngôn ngữ Prolog (là cách viết tắt của
cụm từ tiếng Pháp “Programmation en logique”), được giới thiệu bởi Alain Colmerauer và Robert Kowalski
(1972) với mục tiêu là hỗ trợ mô tả lại bài toán trên ngôn ngữ của logic toán học. Việc áp dụng áp lập trình
logic trong CSDL nhằm hỗ trợ hiệu quả cho việc khai báo các luật cũng như các suy luận logic dựa trên mối
quan hệ giữa các luật với dữ liệu được lưu trữ.
Bảng chứa quan hệ

[cha]-[con]
cha
A
B
...

con
B
C
...

A

em
D
...

???

B

Bảng chứa quan hệ
[anh]-[em]
anh
C
...

Cha

???


Cha

C

Anh

D

Hình 1.2. Minh họa về sự hạn chế của CSDL bảng truyền thống trong việc thể hiện cũng như suy diễn các mối quan hệ của dữ liệu

Do đó, nhu cầu cần có một ngôn ngữ lập trình logic riêng dành cho CSDL, để hỗ trợ thiết lập, biểu diễn các luật
cũng như truy vấn dữ liệu một cách hiệu quả, là vô cùng cần thiết. Năm, 1977, Hervé Gallaire and Jack Minker
đã đề xuất về nhu cầu này cũng như những tiềm năng cho việc ứng dụng lập trình logic trong CSDL, và ngôn
ngữ Datalog, do David Maier đề xuất, đã ra đời. Có thể nói Datalog là một phân hệ con của ngôn ngữ lập trình
logic Prolog được thiết kế để dành riêng cho các phát triển các hệ CSDL suy diễn. Khác với Prolog, Datalog có
một số đặc điểm riêng, điển hình như:
• Mô tả mối quan hệ và suy diễn dựa trên mệnh đề Horn (Horn clause).
• Các vị từ (predicate) không được đóng vai trò làm tham số (arguments).
• Thứ tự của các mệnh đề khai báo luật không quan trọng.
• Có số lần lặp đệ quy là hưu hạn và phải kết thúc.
• …
Từ nguyên lý của Datalog, hàng loạt các nền tảng CSDL suy diễn đã được xây dựng, điển hình như: LDL++,


4

Phạm Thế Anh Phú / Báo Cáo Tiểu Luận Môn Học Cơ Sở Dữ Liệu Nâng Cao - UIT

DLV, CORAL, XSB, SDS, DUDUCE-2, Declare, ConceptBase, NAIL, v.v.

1.2.2. Khái quát về luật, sự kiện và sự kiện, tri thức mới được sinh ra và suy diễn đệ quy
Ý tưởng xây dựng máy tính thành các hệ cơ sở tri thức có khả năng tự suy luận và hỗ trợ ra quyết định, thông
qua việc nạp dữ liệu kèm theo các tri thức đã được lưa chọn, ở dạng các tập luật (rules) và sự kiện (facts) đã
được kiểm chứng tính đúng đắn. Bản chất của tri thức được nạp cho máy tính rất đơn giản, chúng tồn tại ở ba
yếu tố sau, bao gồm:
• Luật (rule - r): là dạng các mẫu/quy luật ở dạng tri thức khẳng định là luôn đúng, đã được kiểm chứng
bởi con người (các chuyên gia).
• Sự kiện (fact - f): có thể xem là các nguồn dữ liệu của thông tin hay sự kiện đã diễn ra trong thực tế,
sự kiện sau khi được áp dụng luật (rule) để suy diễn sẽ giúp sinh ra các sự kiện hoặc tri thức mới.
• Sự kiện mới (new fact – nf): là một dạng thông tin, sự kiện mới được sinh ra sau khi áp dụng một
luật cụ thể nào đó để suy luận ra. Sự kiện, thông tin mới được suy từ tập luật đã có mang một giá trị
được gọi là tri thức (knowledge).
Dựa ba yếu tố đã đề cập bên trên, chúng ta có một số ví dụ điển hình như sau (xem Bảng 1.2):
Bảng 1.2. Một số ví dụ về luật (rule), sự kiện (fact) và sự kiện mới (new fact) hoặc tri thức (knowledge) được sinh ra
Luật (rule)
(r1) Mọi con “chó sói phương bắc” đều có “4
chân” và “màu trắng”.
(r2) Mọi động vật “màu trắng” đều “dễ dàng
ẩn mình trong tuyết”.
(r3) Mọi con “cóc” đều có “màu xanh”.
(r4) Mọi động vật “màu xanh” đều có thể “dễ
dàng ẩn mình trong rừng”

Sự kiện (fact)
(f1) [Bấc] là một con “chó sói phương bắc”
trong tác phẩm “Tiếng gọi nơi hoang dã” của
Jack London.
(f2) Tí có nuôi một con “cóc” tên [Tía].

Sự kiện mới (new fact)

à (nf1) Bấc có “4 chân” và “màu
trắng”.
à (nf2) Bấc có thể “dễ dàng ẩn
mình trong tuyết”.
à (nf3) Tía có “màu xanh”.
à (nf4) Tía có thể “dễ dàng ẩn
mình trong rừng”.

Như chúng ta có thể thấy, ở luật (r1) và luật (r3), với sự kiện tương ứng (f1) và (f2), chúng ta có thể suy trực
tiếp ra được các sự kiện mới tương ứng (nf1) và (nf3). Tiếp theo đó, với sự bổ sung thêm của các luật: (r2) và
(r4), từ sự kiện mới được sinh ra từ luật (nf1) và (nf3), chúng ta có thể tiếp tục suy diễn ra thêm được các sự
kiện/tri thức mới hơn là (nf2) và (nf4). Tiến trình suy diễn sẽ được diễn giãi lại chi tiết như sau:
• Từ luật (r1), chúng ta có một sự kiện mới (nf1), cho biết Bấc có 4 chân và có màu trắng vì sự kiện đầu
vào (f1) đã cho biết Bấc là một con chó sói phương bắc. Tiếp theo đó, dựa vào luật (r2), chúng ta sẽ
biết được rằng Bấc cũng có khả năng ẩn mình trong tuyết (nf2), vì trong sự kiện mới được suy ra (nf1)
đã cho biết là Bấc có màu trắng.
• Tương tự như bên trên, với sự kết hợp của luật (r2) và sự kiện (f2), chúng ta có thể kết luận Tía sẽ có
màu xanh vì Tía là con cóc. Và sự kết hợp của luật (r3) với sự kiện mới được sinh (nf3) chúng ta có
thể tiếp tục suy ra rằng, Tía có thể dễn dàng ẩn mình trong rừng, vì Tía có màu xanh (nf4).
Với việc áp dụng các luật khác tiếp theo lên một sự kiện/tri thức mới - được sinh ra do các luật trước đó – điển
hình như: r2(nf1) à nf2, r3(nf3) ànf4, v.v. chúng ta gọi là suy diễn hay truy vấn dạng đệ quy (recursion). Ở
các loại CSDL bảng truyền thống sử dụng ngôn ngữ truy vấn SQL, thì truy vấn đệ quy (recursive querying) là
hầu như không hỗ trỡ, hoặc tốn rất nhiều tài nguyên tính toán cũng như không gian lưu trữ để cài đặt. Truy vấn
đệ quy là một khái niệm rất quan trọng cũng như thế mạnh của CSDL suy diễn cũng như ngôn ngữ lập trình
Datalog.


Phạm Thế Anh Phú / Báo Cáo Tiểu Luận Môn Học Cơ Sở Dữ Liệu Nâng Cao - UIT

5


1.3. Sự kết hợp của trí tuệ nhận tạo (AI), CSDL suy diễn & các ứng dụng đã được xây dựng
Xuyên suốt quá trình phát triển, các nhà khoa học máy tính luôn nổ lực không ngừng trong việc tìm kiếm và
phát triển các giải pháp tốt, mạnh mẽ hơn để giúp máy tính có thể đạt được khả năng suy nghĩ như một con
người. Hay nói cách khác hướng đến việc xây dựng các cỗ máy tính sẽ có khả năng tự suy luận cũng như liên
cập nhật các thông tin để làm giàu thêm cho kho tri thức của riêng nó, để ngày càng mạnh mẽ và thông minh
hơn. Thế mạnh của máy tính là nó có thể học và làm việc vô cùng nhanh và không cần nghĩ ngơi, cũng như khả
năng lưu trữ, thu nạp dữ liệu gần như là vô hạn và CSDL suy diễn được coi là hạt nhân cho các hệ thống trí
thông minh nhân tạo mà con người đã từng xây dựng. Bản chất của tri thức máy tính được cung cấp là các tập
dữ liệu đã được kiểm chứng bởi con người và định nghĩa lại theo dạng các tập luật. Có thể nói, tập luật (rules)
đóng vai trò là nền tảng cơ bản nhất của các hệ CSDL suy diễn nói chung hay các hệ cơ sở tri thức, chuyên gia
nói riêng. Điển hình như một số hệ CSDL tri thức nổi tiếng, được phát triển dựa trên hình thức khai thác tập
luật, như:
• Hệ chuyên gia phát hiện sự cố SHINE (Spacecraft Health Inference Engine), NASA: được phát triển
bới NASA và JPL vào những năm 1970, SHINE hỗ trợ phát hiện các sự cố, lỗi tiềm ẩn có thể xảy ra
trong quá trình phóng tàu không gian hay các vệ tinh vào vũ trụ. Sau đó tiếp tục được đánh giá và phát
triển với đại học Berkeley, Mỹ. SHINE có ưu điểm thiết kế vượt trội hơn so với các hệ chuyên gia phát
hiện sự cố cùng loại, với số lượng luật có thể được nạp và xử lý lên đến hơn 500 triệu luật.
• Hệ chuẩn đoán và điều trị bệnh MYCIN: được phát triển trong những năm 1970, tại đại học Stanford,
Mỹ, MYCIN giúp hỗ trợ chuẩn đoán các trường hợp nhiễm bệnh do các loại vi khuẩn gây ra và hỗ trợ
đưa ra các quyết định về việc sử dụng loại thuốc kháng sinh điều trị nào cho hiệu quả. Ở giai đoạn
công bố ban đầu, MYCIN được nạp khoảng hơn 600 luật, được rút kết và thu thập trực tiếp từ dữ liệu
bệnh án, điều trị với sự hỗ trợ của các chuyên gia trong lĩnh vực y tế.
• Hệ chuyên gia hỗ trợ thăm dò địa chất, khoan dầu Dipmeter Advisor: là một hệ chuyên gia được xây
dựng bởi công ty khai thác dầu mỏ Schlumberger vào thập niêm 1980, dưới sự hỗ trợ của MIT. Với
hơn 90 tập luật được nạp vào, Dipmeter Advisor rất thành công trong việc hỗ trợ đưa ra các quyết
định trong quá trình khoan thăm dò các mỏ dầu, thông qua việc đánh giá các thuộc tính địa chất của
lớp đất.
1.4. Các đóng góp, tính mới và cấu trúc của bài tiểu luận
Trong bài tiểu luận này, nội dung nghiên cứu của chúng tôi chú trọng vào việc hoàn thành bốn mục đích chính

sau, bao gồm:
• Nghiên cứu tổng quan về kiến trúc cũng như cơ chế hoạt động của CSDL suy diễn, các khái niệm liên
quan đến CSDL mở rộng (EDB) và CSDL theo mục đích (IDB).
• Nghiên cứu về nguyên lý và nền tảng của ngôn ngữ lập trình luật dành cho CSDL, Datalog.
• Tìm hiểu, cài đặt và thực hành một số ví dụ với ngôn ngữ Datalog thông qua phần mềm DES (deductive
educational system) – được phát triển bởi P. Julián-Iranzo và F. Sáenz-Pérez, đại học UCM, Tây Ban
Nha dành cho mục đích giảng dạy lập trình logic Datalog cũng như các ngôn ngữ truy vấn khác nhau
trên CSDL.
• Ứng dụng mô hình CSDL suy diễn và Datalog trong việc suy diễn các quan hệ trong mạng thông tin
không đồng nhất (heterogeneous information network), hỗ trợ giải quyết các bài toán liên quan đến
tìm đường giữa các thực thể trong mạng thông tin dựa trên meta-path. Cài đặt và thực nghiệm mô hình
trên mạng thông tin học thuật DBLP.
Cấu trúc bài luận được tổ chức thành năm phần chính, bao gồm: giới thiệu tổng quan, cơ sở lý thuyết, hướng
dẫn cài đặt và thực hành Datalog với phần mềm DES, áp dụng mô hình CSDL suy diễn trong khai thác mạng


6

Phạm Thế Anh Phú / Báo Cáo Tiểu Luận Môn Học Cơ Sở Dữ Liệu Nâng Cao - UIT

thông tin không đồng nhất và cuối cùng là kết luận & hướng phát triển trong tương lai.
2. CƠ SỞ LÝ THUYẾT VỀ CSDL SUY DIỄN VÀ NGÔN NGỮ LUẬT DATALOG
2.1. Cơ sở dữ liệu suy diễn và nền tảng logic
Có thể nói, CSDL suy diễn là một nền tảng kết hợp của mô hình CSDL quan hệ truyền thống và lập trình logic,
trong đó lập trình logic được áp dụng để mô hình hóa dữ liệu, các mối quan hệ cũng như tập các luật được định
nghĩa. CSDL suy diễn được áp dụng rộng rãi trong việc xậy dựng nền tảng cho các ứng dụng liên quan đến trí
tuệ nhân tạo, các hệ cơ sở tri thức và các hệ chuyên gia. Về cơ bản, một hệ CSDL suy diễn có ba tính năng
chính là: lưu trữ, truy vấn và suy diễn, bao gồm hai thành phần chính (minh họa Hình 1.1):
• Nền tảng lưu trữ dữ liệu: thường là các hệ quản trị CSDL quan hệ, với các kiến trúc cơ sở để đầy đủ
để tổ chức lưu trữ, truy vấn dữ liệu. Chúng ta có thể coi nền tảng này đóng vai trò lưu trữ tập các sự

kiện (facts), điển hình như các mô hình lưu trữ dạng bảng quan hệ mà chúng ta hay gặp ở các hệ quản
trị CSDL phổ biến như: Oracle, Microsoft SQL Server, MySQL, v.v. hay còn được gọi là CSDL mở
rộng (Extensional Database - EDB).
• Nền tảng logic/suy diễn: từ các dữ liệu và quan hệ lưu cơ sở được lưu trữ, thành phần này giúp suy
diễn ra các thành phần dữ liệu và quan hệ mới mới. Bản chất của nền tảng này là tập các luật (rules)
đã được định nghĩa. Thông thường nền tảng này được xây dựng dưới sự hỗ trợ của một ngôn ngữ lập
trình logic phi thủ tục, điển hình và phổ biến nhất được dùng là Datalog. Ha còn được gọi là CSDL
theo mục đích (Intentional Database - IDB).
Trước hết để có một cái nhìn tổng quan nhất về ngôn ngữ lập trình logic dành cho CSDL, Datalog, chúng ta cần
nhìn lại sơ nét về ngôn ngữ tiên khởi/cha đẻ của nó là ngôn ngữ lập trình logic phi thủ tục, Prolog.
Nền tảng lưu trữ và
truy vấn dữ liệu
Lưu trữ sự kiện (fact)

Extensional
Database - EDB

Nền tảng suy diễn và
sinh tri thức mới
Lưu trữ luật (rule)

Intentional
Database - IDB
Thông tin và tri
thức có giá trị

Hình 2.1. Minh họa về kiến trúc của một hệ CSDL suy diễn

2.2. Các quy tắc logic, lập trình logic Prolog
Từ khi được giới thiệu lần đầu vào năm 1978 bởi Hervé Gallaire and Jack Minker, bởi sự đơn giản trong cú

pháp lập trình nhưng vô cùng mạnh mẽ của nó, Prolog đã được chấp nhận cũng như áp dụng rộng rãi trong việc
phát triển và xây dựng các ứng dụng trong nhiều khác nhau. Prolog đặc biệt được áp dụng trong việc xây dựng
các hệ cơ sở tri thức có khả năng tự suy diễn hay các ứng dụng liên quan đến trí tuệ nhân tạo và xử lý ngôn ngữ


Phạm Thế Anh Phú / Báo Cáo Tiểu Luận Môn Học Cơ Sở Dữ Liệu Nâng Cao - UIT

7

tự nhiên. Trong dự án xây dựng máy tính thế hệ thứ 5 của chính phủ Nhật, khởi động từ năm 1982, thì ngôn
ngữ Prolog được chọn làm nền tảng lập trình chính. Cú pháp của ngôn ngữ lập trình Prolog dựa trên các nguyên
lý của logic toán học, để giúp lập trình viên mô tả lại bài toán cho máy tính. Nói cách khác đơn giản hơn, thì
thông qua Prolog, chúng ta giúp cho máy tính hiểu được bài toán thông qua việc mô tả nó, rồi sau đó để máy
tính tự tìm lời giải, đáp án cho chúng ta.
Thông thường, chúng ta sẽ sử dụng các ký hiệu và quy tắc của ngôn ngữ lập trình Prolog để làm quy tắc logic
chuẩn. Một chương trình Prolog được cấu tạo bởi một hay nhiều mệnh đề (clause), thông thường mà mệnh đề
Horn (Horn clause). Mỗi mệnh đề được xây dựng từ một hay nhiều vị từ (predicate), một vị từ dùng để phát
biểu, kết luận về tập các đối tượng nào đó kết quả trả về sẽ ở dạng đúng (true) hay sai (false) (hay còn gọi là
dạng dữ liệu Boolean). Một mệnh Horn có dạng cú pháp như sau (xem công thức 1):
𝑄 ∶ −𝑃 = 𝑃5 ∧ 𝑃7 ∧ … ∧ 𝑃.

(1)

Với,





𝑄, là đầu mệnh đề, đại diện cho một vị từ logic phần đầu của mệnh đề, thường đại luật hay kết luận,

dùng để thể hiện phát biểu logic của bài toán trong trường hợp tập vị từ P không rỗng (P ≠ ∅).
𝑃, là thân mệnh đề, đại diện cho tập các vị từ logic trong phần thân của mệnh đề, P5 , P7 , … , P= , thông
thường mệnh đề dạng Horn, chỉ chứa phép toán tử “và” (AND ∧) giữa các vị từ. Trong một số trường
hợp tập P rỗng, thì mệnh đề được hiểu là một dạng mô tả sự kiện (fact) của bài toán.
: −, được quy định là điều kiện để luật/kết luận trả về kết quả đúng, đọc là “nếu” (if). Trong trường
hợp biểu diễn bằng logic toán học thì có thể đại diện là dấu “←”, đọc là “kéo theo”.

Trong lập trình Prolog, một vị từ được dùng như dạng một thủ tục/hàm, với các đối/tham số (arguments) được
gọi là logic nguyên tử (logic atom), và mỗi logic nguyên tử biểu diễn mối quan hệ giữa các hạng (term), hay
nói cách khác hạng và các logic nguyên tử thể hiện mối quan giữa giữa chúng cấu thành một mệnh đề. Chúng
ta có 2 loại hạng phân biệt, bao gồm:
• Hạng sơ cấp (elementary term): là các đối ở dạng hằng số (constant) hay biến số (variable), tương
tự như trong các ngôn ngữ lập trình thủ tục, ví dụ, các dạng hàm như: f(1,2,3), f(1, a, b),v.v.
• Hạng phức hợp (compound term): là một thủ tục hay hàm (function) chứa một hay nhiều đối. Ví dụ:
f5 (f7 1 ), f5 (f7 (a, b, c, d), v.v., giá trị trả về của hàm có thể thuộc bất kỳ loại dữ liệu nào.
Trong ngôn ngữ lập trình Prolog, ký hiệu của vị từ (predicate), hàm (function) và các hạng (term) được bắt đầu
bằng một chữ thường, ký hiệu các biến phải bắt đầu bằng một chữ cái viết hoa. Các câu lệnh logic hoặc khai
báo luật sẽ được viết dưới dạng các mệnh đề Horn (mô tả trong công thức 1), và quy ước khi kết thúc một mệnh
đề sẽ có dấu “.”. Một mệnh đề logic trong Prolog có thể ở 3 dạng sau:
• Một sự kiện (fact): ký hiệu: … . tương đương khi tập vị từ trong phần thân của mệnh đề, (P) là rỗng,
(P = ∅), hay có thể hiểu theo cách khác có nghĩa là sự kiện là một luật mà kết quả luôn trả về là đúng
… ∶ −𝑡𝑟𝑢𝑒. Ví dụ: chúng ta có các mệnh đề ở dạng sự kiển như sau: 𝑐ℎó_𝑠ó𝑖(𝐵ấ𝑐) – mô tả một con
chó sói tên Bấc, 𝑐𝑜𝑛_𝑐ó𝑐(𝑇í𝑎) – mô tả một con cóc tên Tía, v.v.
• Một luật / kết luận (rule): ký hiệu: … :- … . tương đương khi tập vị từ (P) là không rỗng, (P ≠ ∅),
gọi là luật vì nó sẽ biểu diễn cho các khẳng định hay phát biểu của mệnh đề logic trong bài toán, ví dụ
ta dung mệnh đề logic để phát biểu các luật như: 𝑐ℎó_𝑠ó𝑖_𝑝ℎươ𝑛𝑔_𝑏ắ𝑐 ∶ −4_𝑐ℎâ𝑛 ∧ 𝑚à𝑢_𝑡𝑟ắ𝑛𝑔. –
cho luật mọi con “chó sói phương bắc” đều có “4 chân” và “màu trắng”, hay 𝑐ó𝑐 ∶ −𝑚à𝑢_𝑥𝑎𝑛ℎ. –
cho luật mọi con “cóc” đều có “màu xanh”. Một mệnh đề có số lượng vị từ trong thân lớn hơn 1, hay
P > 1, thì được gọi là luật đệ quy.
• Một truy vấn / câu hỏi (query/question): ký hiệu: ? − … ., là một mệnh đề logic ở dạng câu hỏi cho



8

Phạm Thế Anh Phú / Báo Cáo Tiểu Luận Môn Học Cơ Sở Dữ Liệu Nâng Cao - UIT

một sự kiện nào đó trong chương trình, kết quả trả về sẽ ở dạng Boolean, tức là đúng hay sai, ví dụ:
cho câu hỏi ? −𝑐ℎó_𝑠ó𝑖(𝐵ấ𝑐)., thì câu trả lời sẽ là đúng “true”, và ngược lại ? −𝑐ℎó_𝑠ó𝑖(𝑇í𝑎)., sẽ
trả về kết quả sai hay “false” – vì Tía là một con cóc.
2.3. CSDL dựa trên logic với ngôn ngữ Datalog
Đươc phát triển trên ý tưởng của ngôn ngữ lập trình logic Prolog, Datalog là một ngôn ngữ lập trình dựa trên
logic vị từ nhằm hỗ trợ cho việc truy vấn và suy diễn trên dữ liệu. Tương tự như Prolog, tuy nhiên Datalog được
thiết kế để dành riêng cho các hệ quản trị CSDL suy diễn, đặc thì cho việc truy vấn và suy diễn dữ liệu. Trong
nền tảng CSDL suy diễn, Datalog không chỉ hỗ trợ để mô tả dữ liệu cũng như mới quan hệ giữa chúng mà còn
truy vấn cũng như suy diễn trên các mối quan hệ đó, nhằm mục đích sinh ra các quan hệ hay dữ liệu ở dạng tri
thức mới. Và hiển nhiên rằng nó được đánh giá tốt và mạnh mẽ hơn các ngôn ngữ truy vấn truyền thống, điển
hình như SQL. Ưu điểm vượt trội của Datalog trong CSDL là khả năng suy luận theo dạng các luật đệ quy mà
các ngôn ngữ truy vấn truyền thống không thể làm được.
Tương tự như Prolog, cú pháp của Datalog cũng được viết ở dạng các mệnh đề logic Horn để đặc tả cũng như
suy diễn dữ liệu. Một cú pháp của mệnh đề Horn, trong Datalog có dạng: 𝑄 ∶ −𝑃 = P5 ∧ P7 ∧ … ∧ P= , tương
tự như trong Prolog, với:
• (P) là tập các vị từ trong thân mệnh đề, P = P5 ∧ P7 ∧ … ∧ P= , vì các mệnh đề logic trong Datalog đều
theo chuẩn Horn, nên các phép liên kết các vị từ trong thân phải là phép hội, hay “∧” hoặc “AND”
• (Q) là vị từ đầu mệnh đề, nếu tập các vị từ trong thân không rỗng thì Q sẽ đại diện cho các kết luận
hay luật, còn ngược lại thì sẽ đại diện cho sự kiện. Trong trường hợp tập các vị từ trong thân có số
lượng nhiều hơn một thì luật được định nghĩa sẽ ở dạng đệ quy.
Các ký hiệu/cú pháp thường dùng trong lập trình Datalog (xem Bảng 2.1):
Bảng 2.1. Ký hiệu/cú pháp sử dụng trong Datalog
Ký hiệu trong lập trình Datalog
Các phép so sánh: <, >, <=, >=, =,

\=.
Phép kéo theo: “:-”, có thể đọc là
“nếu”.

Tương đương trong logic toán học
Các phép so sánh: <, >, ≤, ≥, =, ≠.

Phép hội: “,”

Phép hội: ∧ hoặc “AND”

Phép tuyển: “;”

Phép tuyển: ∨ hoặc “OR”

Phép kéo theo: “←”

Ý nghĩa
Đại diện cho các phép so sánh vị từ trong một mệnh
đề logic. Ví dụ: A > B, A == B, A<> B, v.v.
Phép kéo theo dùng để liên kết hai mệnh đề, ví dụ:
A ← B, đọc là B kéo theo A, mệnh đề vế B đúng sẽ
làm A đúng, điển hình như: 𝑐ó_4_𝑐ℎâ𝑛 ←
𝑐ℎó_𝑠ó𝑖 𝐵ấ𝑐 ., 𝑐ó_𝑚à𝑢_𝑥𝑎𝑛ℎ ← 𝑐𝑜𝑛_𝑐ó𝑐 𝑇í𝑎 .,
v.v.
Dùng để liên kết hai hay nhiều mệnh đề, và chỉ đúng
khi tất cả mệnh đề đều đúng. Ví dụ: A ← B ∧ C, A
chỉ đúng khi cả B và C cùng đúng.
Dùng để liên kết hai hay nhiều mệnh đề, trả về kết
quả đúng khi chỉ cần một mệnh đề là đúng. Ví dụ:

A ← B ∨ C, A đúng khi B hoặc C đúng.

2.3.1. Các hình thức của mệnh đề logic trong Datalog
Tương tự như trong lập trình Prolog, tùy thuộc vào tập vị từ (P) trong thân, mà một mệnh đề sẽ được hiểu theo
ba cách khác nhau, bao gồm sự kiện (fact), luật (rule) và câu hỏi (question), chi tiết như sau:
2.3.1.1. Một sự kiện (fact) mô tả cho dữ liệu hoặc quan hệ
Ký hiệu: … ., khi tập vị từ trong thân (P) rỗng, thì mệnh đề có tác dụng mô tả về một sự kiện (fact) của dữ liệu
hoặc mối quan hệ của dữ liệu, ví dụ như sau:


Phạm Thế Anh Phú / Báo Cáo Tiểu Luận Môn Học Cơ Sở Dữ Liệu Nâng Cao - UIT



(f1): 𝑐ℎ𝑎(𝑇𝑢ấ𝑛, 𝑁𝑎𝑚), (f2):𝑚ẹ(𝑁𝑔𝑎, 𝑁𝑎𝑚), (f3): 𝑐ℎ𝑎(𝑁𝑎𝑚, 𝐻ư𝑛𝑔) – mô tả cho mối quan hệ cha,
mẹ của Nam là lượt là Tuấn và Nga. Trong trường hợp này ta có thể thấy một sự kiện trong Datalog
()*



9

sẹ

()*

đặc tả cho mối quan hệ trực tiếp của dữ liệu ví dụ: 𝑇𝑢ấ𝑛
Nam, 𝑁𝑔𝑎 Nam, 𝑁𝑎𝑚
Hưng.
(f4): 𝑛ℎâ𝑛_𝑣𝑖ê𝑛(𝑇𝑢ấ𝑛, "𝑈𝐼𝑇", "𝐾𝐻&𝐾𝑇𝑇𝑇"), mô tả cho dữ liệu, Tuấn là một nhân viên làm việc tại

trường ĐH UIT thuộc bộ môn KH&KTTT. Ở đây ta có thể thấy, tương tự như trong CSDL quan hệ,
một sự kiện trong Datalog cũng có thể biểu diễn ở dạng một bộ dữ liệu (tuple), với các thuộc tính khác
nhau, điển hình trong trường hợp này ở dạng là: 𝑛ℎâ𝑛_𝑣𝑖ê𝑛 𝑡ê𝑛, đơ𝑛_𝑣ị_𝑐ô𝑛𝑔_𝑡á𝑐, 𝑝ℎò𝑛𝑔_𝑏𝑎𝑛 .

2.3.1.2. Một kết luận/luật (rule) suy diễn từ các sự kiện
Ký hiệu: … :- … ., mệnh đề được xem là một kết luận hay luật để suy ra các sự kiện mới (new facts) trên
tập sự kiện đã có sẵn, ta có hai dạng luật chính như sau, bao gồm:
Luật không đệ quy:




(r1): 𝑐ℎ𝑎_𝑚ẹ(𝑋, 𝑌) ← 𝑐ℎ𝑎(𝑋, 𝑌) ∨ 𝑚ẹ(𝑋, 𝑌) – từ sự kiện (f1): 𝑐ℎ𝑎(𝑇𝑢ấ𝑛, 𝑁𝑎𝑚) , (f2):
𝑚ẹ(𝑁𝑔𝑎, 𝑁𝑎𝑚), (f3): 𝑐ℎ𝑎(𝑁𝑎𝑚, 𝐻ư𝑛𝑔), ta có hai sự kiện mới là (nf1): 𝑐ℎ𝑎_𝑚ẹ(𝑇𝑢ấ𝑛, 𝑁𝑎𝑚), (nf2):
𝑐ℎ𝑎_𝑚ẹ(𝑁𝑔𝑎, 𝑁𝑎𝑚), (nf3): 𝑐ℎ𝑎_𝑚ẹ(𝑁𝑎𝑚, 𝐻ư𝑛𝑔). Luật này có thể hiểu theo cách khá đơn giản là:
“cha_mẹ” của một thực thể (X) nào đó là cấu thành của hai mệnh đề: “cha” của (X) và “mẹ” của (X),
dấu “∨” hoặc “OR”, trong trường hợp này để chỉ, chỉ cần quan hệ “cha” hoặc “mẹ” thì đều có quan hệ
là “cha_mẹ”. Trong Datalog ta có thể ghi đơn giản luật này như sau: 𝑐ℎ𝑎_𝑚ẹ(𝑋, 𝑌) ∶
−𝑐ℎ𝑎(𝑋, 𝑌); 𝑚ẹ(𝑋, 𝑌)., ký hiệu “;” tương đương cho phép tuyển hoặc “OR”.
(r2): ô𝑛𝑔_𝑏à(𝑋, 𝑌) ← 𝑐ℎ𝑎_𝑚ẹ(𝑋, 𝑍) ∧ 𝐜𝐡𝐚_𝐦ẹ(𝑍, 𝑌), tương tự như luật trên, ta có thể phát biểu
một cách vắn tắt như sau: cha mẹ (X) của một thực thể (Z) nào đó, mà (Z) lại là cha mẹ của một thực
thể (Y), thì mối quan hệ giữa (X) và (Y) là ông bà. Điều kiện liên kết của hai mệnh đề trên là phép hội,
đại diện cho dấu “∧” hoặc “AND”. Tức có nghĩa là cả hai mệnh đề: (X) là “cha_mẹ” của (Z( và (Z)
cũng phải là “cha_mẹ” của (Y), cả 2 đều phải cùng đúng – thì (X) mới được gọi là “ông_bà” của (Y).
Như vậy, với ví dụ trên ta có thể suy ra hai sự kiện mới là: (nf4) ô𝑛𝑔_𝑏à(𝑇𝑢ấ𝑛, 𝐻ư𝑛𝑔), (nf5)
ô𝑛𝑔_𝑏à(𝑁𝑔𝑎, 𝐻ư𝑛𝑔). Trong Datalog ta có thể ghi đơn giản lại luật này như sau: 𝑐ℎ𝑎_𝑚ẹ(𝑋, 𝑌) ∶
−𝑐ℎ𝑎(𝑋, 𝑌), 𝑚ẹ(𝑋, 𝑌)., ký hiệu “,” tương đương cho phép hội hoặc “AND”.

Luật đệ quy (recursion rule):
Tuấn


Nga
cha

Thanh



Nam

...
cha

b

quản_lý

mẹ

mẹ

Ngọc

c

quản_lý
Hưng

(A)


d

a

quản_lý

Tuấn

(B)

(C)

Hình 2.2. Minh họa một bài toán điển hình được giải quyết bằng đệ quy

Là các luật mà trong chính định nghĩa của nó có gọi lại chính nó, khả năng định nghĩa các luật đệ quy là một
điểm mạnh của Datalog, vì nó cho phép thực hiện các truy vấn phức tạp vét cạn theo chiều sâu của dữ liệu, điển
hình như các bài toán tìm nút gốc, tổ tiên trong cây gia phả gia đình, tìm tất cả các cấp quản lý mà một nhân


10

Phạm Thế Anh Phú / Báo Cáo Tiểu Luận Môn Học Cơ Sở Dữ Liệu Nâng Cao - UIT

viên trực thuộc trong một công ty, bài toán tìm đường đi giữa hai điểm trong đồ thị, v.v. Để hiểu rõ hơn vấn đề,
chúng ta sẽ đi qua các ví dụ với một số bài toán điển hình sau:
Bài toán tìm tổ tiên của một người. Đây là bài toán điển hình nhất trong các bài toán cần phải giải bằng đệ
quy, cho cây gia phả (như Hình 2.2-A), chúng ta có các luật và sự kiện sau:
• Các sự kiện đã biết:
§ (f1): 𝑐ℎ𝑎(𝑇𝑢ấ𝑛, 𝑁𝑎𝑚).
§ (f2):𝑚ẹ(𝑁𝑔𝑎, 𝑁𝑎𝑚).

§ (f3): 𝑐ℎ𝑎(𝑁𝑎𝑚, 𝐻ư𝑛𝑔).
• Các luật đã định nghĩa:
§ (r1): 𝑐ℎ𝑎_𝑚ẹ(𝑋, 𝑌) ← 𝑐ℎ𝑎(𝑋, 𝑌) ∨ 𝑚ẹ(𝑋, 𝑌).
Với luật (r1) thì chúng ta chỉ biết được “cha_mẹ” của một người (X) nào đó là sự kết hợp của 2 sự kiện “cha”
và “mẹ”. Tuy nhiên, bài toán đặt ra là làm thế nào để lấy được danh sách các tổ tiên của (X) thông qua tìm kiếm
cấp cao hơn là: “cha_mẹ” của “cha_mẹ” (X), rồi lên một cấp nữa là “cha_mẹ” của “cha_mẹ” của “cha_mẹ”,v.v.
là số lương cấp này chúng ta không biết trước. Do đó, để trả lời được câu hỏi này chúng ta phải định nghĩa một
luật ở dạng đệ quy như sau:
• (r3): 𝑡ổ_𝑡𝑖ê𝑛(𝑋, 𝑌) ← 𝑐ℎ𝑎_𝑚ẹ(𝑋, 𝑍), 𝑡ổ_𝑡𝑖ê𝑛(𝑍, 𝑌)
Luật này có thể diễn giải lại một cách đơn gian như sau, tìm kiếm cha mẹ (X) của một thực thể (Z) nào đó, với
(Z) là tổ tiên của (Y). Bản chất của luật này có tính đệ quy vì chúng ta thấy vị từ đại diện cho luật đề xuất hiện
trong đầu và thân của mệnh đề.
Bài toán tìm các cấp quản lý trực thuộc. Tương tự như bài toán tìm tổ tiên của một người dựa trên cây gia
phả, cho một cơ chế các cấp quản lý của một đơn vị như sau (Hình 2.2-B), ta cũng có một loạt các sự kiện
(facts) như sau:
• Các sự kiện (facts) đã biết:
§ (f5): 𝑞𝑢ả𝑛_𝑙ý(𝑁𝑔ọ𝑐, 𝑇𝑢ấ𝑛). (“Ngọc” là quản lý của “Tuấn”).
§ (f6): 𝑞𝑢ả𝑛_𝑙ý(𝐻à, 𝑁𝑔ọ𝑐).
§ (f7): 𝑞𝑢ả𝑛_𝑙ý(𝑇ℎ𝑎𝑛ℎ, 𝐻à).
Câu hỏi đạt ra là làm sao để tìm cấp quản lý cao nhất của một nhân viên (X) nào đó, bắt đầu từ cấp trực thuộc
của họ, và số lượng cấp là chúng ta không biết trước. Để làm được việc này chúng ta cũng sẽ thiết lập một luật
theo dạng đệ quy như sau:
• (r4): 𝑡ì𝑚_𝑞𝑢ả𝑛_𝑙ý(𝑋, 𝑌) ← 𝑞𝑢ả𝑛_𝑙ý(𝑋, 𝑍), 𝑡ì𝑚_𝑞𝑢ả𝑛_𝑙ý(𝑍, 𝑌).
Luật trên khi được thực thi, sẽ giúp chúng ta tìm tất cả các cấp quản lý của một thực thể nào đó, ví dụ:
𝑡ì𝑚_𝑞𝑢ả𝑛_𝑙ý(𝑋, 𝑇𝑢ấ𝑛), sẽ lần lượt là: “Ngọc”, “Hà”, “Thanh”, v.v. dựa trên tập sự kiện đã được định nghĩa.
Bài toán tìm đường đi giữa hai đỉnh của đồ thị. Đây cũng là một bài toán khá điển hình trong việc áp dụng
đệ quy để suy diễn. Cho một đồ thị có hướng, ký hiệu: G = (V, E), với (V) đại diện cho tập các đỉnh/nút (vertex)
của đồ thị, còn (E) đại diện cho tập các cạnh/cung (edge) của đồ thị. Tương tự vậy, dựa trên đồ thị như hình
minh họa (Hình 2.2-C), ta cũng có tập các sự kiện (facts) được biết trước, như sau:
• Các sự kiện (facts) đã biết:

§ (f8): 𝑐ạ𝑛ℎ(𝑎, 𝑏).
§ (f9): 𝑐ạ𝑛ℎ(𝑎, 𝑐).
§ (f10): 𝑐ạ𝑛ℎ(𝑐, 𝑏).
§ (f11): 𝑐ạ𝑛ℎ(𝑏, 𝑑).


Phạm Thế Anh Phú / Báo Cáo Tiểu Luận Môn Học Cơ Sở Dữ Liệu Nâng Cao - UIT

11

Bài toán đặt ra là tìm tất cả các cạnh nối giữa hai nút, ví dụ (a) và (d), bài toán này chúng ta sẽ thấy tương tự
như việc giải quyết bài toán tìm đường đi (path) và tìm đường đi ngắn nhất (shortest path) trong lý thuyết đồ
thị. Ở góc nhìn của lập trình logic Datalog thì chúng ta có thể giải quyết bài toán này rất đơn giản bằng một luật
đệ quy như sau:
• (r5): 𝑡ì𝑚_đườ𝑛𝑔_đ𝑖(𝑋, 𝑌) ← 𝑐ạ𝑛ℎ(𝑋, 𝑍), 𝑡ì𝑚_đườ𝑛𝑔_đ𝑖(𝑍, 𝑌).
Luật trên có thể diễn giải như sau, tìm cạnh nối (X) với một đỉnh (Z) nào đó, với (Z) là một đỉnh nối với (Y).
Ví dụ ta sẽ tìm đường đi, tập hợp các cạnh nối giữa hai đỉnh (a) và (d), 𝑡ì𝑚_đườ𝑛𝑔_đ𝑖(𝑎, 𝑑), bao gồm: [a → b,
b → d] và [a → c, c→ b, b → d], v.v.
2.3.2. Một câu hỏi (question/query) từ sự kiện và luật
Ký hiệu: ? − … ., về cơ bản thì một câu hỏi trong lập trình Datalog giống như một việc ta gọi một hàm với các
đối/tham số trong lập trình thủ tục, kết quả trả về có thể ở nhiều dạng khác nhau như ở dạng Boolean, hoặc các
sự kiện đã được mô tả, ví dụ:
• ? −𝑐ó_𝑝ℎả𝑖_𝑐ℎ𝑎_𝑚ẹ(𝑋, 𝑌), với (X) và (Y) là các tham số, câu hỏi này muốn hỏi có phải thực thể (X)
là “cha_mẹ” của thực thể (Y) hay không ?, là một dạng câu hỏi đúng/sai, do đó với một câu hỏi trên ta
sẽ có kết quả đúng (true) cho: 𝑐ó_𝑝ℎả𝑖_𝑐ℎ𝑎_𝑚ẹ(𝑇𝑢ấ𝑛, 𝑁𝑎𝑚) , và sai (false) cho
? −𝑐ó_𝑝ℎả𝑖_𝑐ℎ𝑎_𝑚ẹ(𝑇𝑢ấ𝑛, 𝐻ư𝑛𝑔), v.v.
• ? −𝑐ℎ𝑎_𝑚ẹ(𝑋, 𝑌), với (Y) là tham số đầu vào, dạng câu hỏi này là yêu cầu liệt kệt tất cả các thực thể
mà là “cha_mẹ” của (Y), là (X), câu trả lời hiển nhiên sẽ là một danh sách các thực thể mà có quan hệ
là “cha” hoặc “mẹ” của thực thể đầu vào (Y) ví dụ: 𝑐ℎ𝑎_𝑚ẹ(𝑌, 𝑁𝑎𝑚), với kết quả trả về sẽ là “Tuấn”
và “Nga”, v.v.

• Hoặc ? −𝑡ổ_𝑡𝑖ê𝑛(𝑋, 𝑌)., để liệt kê danh sách các tổ tiên của một thực thể (Y) nào đó, là (X), ví dụ với
câu hỏi: 𝑡ổ_𝑡𝑖ê𝑛(𝑋, 𝐻ư𝑛𝑔), câu trả lời lần lượt sẽ là “Nam’, “Tuấn” và “Nga”.
2.3.3. Đồ thị luật (rule graph) trong DataLog

cha(X,Y)

mẹ(X,Y)

Sự kiện(fact)
cha_mẹ(X,Y)
Luật(rule)

tổ_tiên(X,Y)

ông_bà(X,Y)

Hình 2.3. Ví dụ về đồ thị luật biểu diễn sự tương quan giữa các sự kiện và luật

Trong lập trình Datalog, để biểu diễn sự tương quan giữa các sự kiện và luật với nhau trong một chương trình,
ta dùng đồ thị luật để biểu diễn các mối tương quan này. Về bản chất, đồ thị luật là một đồ thị có hướng mà mỗi
nút trong đồ thị đại diện cho một sự kiện hay luật. Đối với một luật cụ thể (Q), đại diện bởi một nút, các cạnh
có hướng, liên kết các nút khác đến nút đó (in-coming degrees), chỉ số lượng các luật có trong thân (P, P = P5 ∧
P7 ∧ … ∧ P= ) của luật đó, ký hiệu: 𝑄: −𝑃.


12

Phạm Thế Anh Phú / Báo Cáo Tiểu Luận Môn Học Cơ Sở Dữ Liệu Nâng Cao - UIT

Trong lập trình Datalog, việc xây dựng đồ thị luật giúp chúng ta có cài nhìn tổng quan hơn về các luật được

định nghĩa cũng như sự phụ thuộc của chúng với nhau. Ngoài ra đồ thị luật cũng giúp chúng ta tránh được việc
định nghĩa các luật trùng lắp nhau hoặc dư thừa không cần thiết.
Ví dụ, với danh mục các sự kiện và như sau, ta sẽ xây dựng được một đồ thị luật như minh họa tại hình bên
dưới (xem Hình 2.3):
• (f1): 𝑐ℎ𝑎(𝑋, 𝑌).
• (f2):𝑚ẹ(𝑋, 𝑌).
• (r1): 𝑐ℎ𝑎_𝑚ẹ(𝑋, 𝑌) ∶ −𝑐ℎ𝑎(𝑋, 𝑌) ; 𝑚ẹ(𝑋, 𝑌).
• (r2): ô𝑛𝑔_𝑏à(𝑋, 𝑌): −𝑐ℎ𝑎_𝑚ẹ(𝑋, 𝑍), 𝑐ℎ𝑎_𝑚ẹ(𝑍, 𝑌).
• (r3): 𝑡ổ_𝑡𝑖ê𝑛(𝑋, 𝑌): −𝑐ℎ𝑎_𝑚ẹ(𝑋, 𝑍), 𝑡ổ_𝑡𝑖ê𝑛(𝑍, 𝑌).
Một phép toán cơ bản hỗ trợ trong lập trình Datalog
Trong lập trình Datalog, để đơn giản hơn cho quá trình lập trình cũng như biểu diễn các luật dễ dàng hơn.
Datalog hỗ trợ một số hàm tính toán tổ hợp cơ bản như sau (xem Bảng 2.2):
Bảng 2.2. Một số phép toán tổ hợp được hỗ trợ trong Datalog
Hàm (function)
Đếm (count): count

Tổng tích lũy (cumulative sum): sum

Tính trung bình (average): avg
Lấy giá trị nhỏ nhất (minimum): min

Lấy giá trị lớn nhất (maximum): max

Mô tả & ví dụ
Đếm số lượng các sự kiện có trong danh sách trả về, ví dụ:

𝑐𝑜𝑢𝑛𝑡(𝑛ℎâ𝑛_𝑣𝑖ê𝑛(_, "𝑈𝐼𝑇"), 𝑡ổ𝑛𝑔) – đếm tổng số lượng nhân viên hiện có
của trường đại học UIT.
Dùng để tính tổng giá trị các phần tử có trong danh sách sự kiện trả về, ví dụ:


𝑠𝑢𝑚(𝑛ℎâ𝑛_𝑣𝑖ê𝑛(_, "𝑈𝐼𝑇", 𝑙ươ𝑛𝑔), 𝑙ươ𝑛𝑔, 𝑡ổ𝑛𝑔_𝑙ươ𝑛𝑔) – tính tổng lương
tất cả giảng viên, nhân viên của trường đại học UIT.
Trả về giá trị trung bình của các phần tử có trong danh sách sự kiện trả về, ví dụ:

𝑎𝑣𝑔(𝑛ℎâ𝑛_𝑣𝑖ê𝑛(_, "𝑈𝐼𝑇", 𝑙ươ𝑛𝑔), 𝑙ươ𝑛𝑔, 𝑎𝑣𝑔_𝑙ươ𝑛𝑔) – tính trung bình
lương tất cả giảng viên, nhân viên của trường đại học UIT.
Trả về giá trị nhỏ nhất của các phần tử có trong danh sách sự kiện trả về, ví dụ:

𝑚𝑖𝑛(𝑛ℎâ𝑛_𝑣𝑖ê𝑛(_, "𝑈𝐼𝑇", 𝑙ươ𝑛𝑔), 𝑙ươ𝑛𝑔, 𝑚𝑖𝑛_𝑙ươ𝑛𝑔) – lấy giá trị lương
thấp nhất của giảng viên, nhân viên trường đại học UIT.
Trả về giá trị lớn nhất của các phần tử có trong danh sách sự kiện trả về, ví dụ:

𝑚𝑎𝑥(𝑛ℎâ𝑛_𝑣𝑖ê𝑛(_, "𝑈𝐼𝑇", 𝑙ươ𝑛𝑔), 𝑙ươ𝑛𝑔, 𝑚𝑎𝑥_𝑙ươ𝑛𝑔) – lấy giá trị lương
lớn nhất của giảng viên, nhân viên trường đại học UIT.

2.3.4. Sự tương quan giữa Datalog và đại số quan hệ (Relational Algebra)
Về mặt cơ bản và các tính chất trong logic toán học, thì với các luật hoặc câu hỏi trong Datalog mà không ở
dạng đệ quy được xem là tương đương với các phép toán trong đại số quan hệ. Điển hình như các phép toán hai
ngôi, như sau (xem Bảng 2.3):
Bảng 2.3. Mô tả một số phép toán quan hệ và sự tương quan với Datalog

Phép toán quan hệ
Phép hợp (Union): là tập hợp các luật có
cùng đầu luật (Q), để tạo thành một luật
tổng quát, có dạng:

𝑄 ∶ −𝑃5

𝑄 ∶ −𝑃7


𝑄 ∶ −𝑃5 ∨ 𝑃7

Mô tả
Luật (r1) là phép hợp của hai luật (r1-a) và (r1-b), như sau:

(r1-a): 𝑐ℎ𝑎_𝑚ẹ(𝑋, 𝑌) ∶ −𝑐ℎ𝑎(𝑋, 𝑌).

(r1-b): 𝑐ℎ𝑎_𝑚ẹ(𝑋, 𝑌) ∶ −𝑚ẹ(𝑋, 𝑌).

(r1): 𝑐ℎ𝑎_𝑚ẹ(𝑋, 𝑌) ∶ −𝑐ℎ𝑎(𝑋, 𝑌); 𝑚ẹ(𝑋, 𝑌).


Phạm Thế Anh Phú / Báo Cáo Tiểu Luận Môn Học Cơ Sở Dữ Liệu Nâng Cao - UIT

Phép kết nối (Join): là tập hợp các luật có
cùng đầu luật và có biến chung ở các vị từ
trong thân luật (P), có dạng:

𝑄 ∶ −𝑃5

𝑄 ∶ −𝑃7

𝑄 ∶ −𝑃5 ∧ 𝑃7

Luật (r2) là phép kết nối của luật (r1), như sau:

(r2): ô𝑛𝑔_𝑏à(𝑋, 𝑌): −𝑐ℎ𝑎_𝑚ẹ(𝑋, 𝑍), 𝑐ℎ𝑎_𝑚ẹ(𝑍, 𝑌).

Phép chọn (Selection): là các luật mà trong
thân luật có chứa vị từ so sánh.


Ví dụ, ta muốn tìm kiếm tổ tiên của một thực thể (Y) nào đó, trong đó (Y) được chọn
là “Hưng”, câu hỏi sẽ được định nghĩa theo dạng phép chọn, như sau:

𝑡ổ_𝑡𝑖ê𝑛(𝑋, 𝑌) :- 𝑡ổ_𝑡𝑖ê𝑛(𝑋, 𝑌), 𝑌 = "𝐻ư𝑛𝑔".
Hoặc, tìm kiếm danh sách các nhân viên làm việc tại bộ môn KH&KTTT, như sau:

𝑛ℎâ𝑛_𝑣𝑖ê𝑛(X, "UIT", Z), Z = “KH&KTTT”.
Ví dụ: tìm danh sách tất cả tổ tiên, nhưng không lấy ông bà (nội/ngoại):

𝑡ổ_𝑡𝑖ê𝑛(𝑋, 𝑌) :- 𝑡ổ_𝑡𝑖ê𝑛(𝑋, 𝑌) and NOT ô𝑛𝑔_𝑏à(𝑋, 𝑌).

Phép hiệu (Difference): là luật mà trong
thân có dùng điều kiện trừ, để lọc bỏ các giá
trị trả về thuộc một tập nào đó. Điều kiện
lọc ký hiệu bằng dấu “-”, và “NOT” trong
Datalog.

13

Như vậy chúng ta có thể thấy rằng ngôn ngữ lập trình Datalog có đầy đủ các yếu tố và các phép toán của đại số
quan hệ, hay nói cách khác hơn, nó là một dạng của đại số quan hệ và sử dụng logic để định nghĩa các luật theo
các phép toán trong đại số quan hệ. Tuy nhiên, Datalog có một tính năng mạnh mẽ hơn là có khả năng định
nghĩa các luật theo dạng đệ quy, đầu luật của mệnh đề có thể xuất hiện lại trong thân của luật.
2.4. Giới thiệu về ngôn ngữ SQL3 và truy vấn đệ quy
Được coi là một phần mở rộng của ngôn ngữ SQL truyền thống, SQL3 lần đầu được giới thiệu vào năm 1999,
hay còn được gọi là SQL-99. Tương tự như các phiên quản SQL1 (1989) và SQL2 (1992, phiên bản phổ biến
nhất), SQL3 có đầy đủ các tính năng về khai báo các loại kiểu dữ liệu cũng như hình thức truy vấn, ngoài ra
SQL3 còn được mở rộng thêm khả năng truy vấn hồi quy (recursion querying). Cách phổ biến nhất để khai báo
một truy vần hồi quy với SQL3, là chúng ta sẽ viết dưới dạng một thủ tục (view procedure) khởi tạo một view

trong CSDL kết hợp với thủ tục “WITH RECURSIVE” được hỗ trợ. Lấy ví dụ về bài toán tìm tổ tiên trong cây
gia phả, chúng ta có một bản để lưu trữ quan hệ [cha]-[con] và [mẹ]-[con], như sau (xem Bảng 2.4 và Bảng
2.5), câu hàm thủ tục tạo view truy vấn đệ quy nhằm mục đích liệt kê danh sách các tổ tiên của một người như
sau (xem Thuật toán 1):
Bảng 2.4. Ví dụ về một bảng chứa dữ liệu thể
hiện mối quan hệ [cha]-[con]
cha
Tuấn
Nam


con
Nam
Hưng


Bảng 2.5. Ví dụ về một bảng chứa dữ liệu thể
hiện mối quan hệ [mẹ]-[con]
mẹ
Nga


con
Nam


Thuật toán 1. Cú pháp thủ tục SQL3 để tạo view liệt kê danh sách các tổ tiên của
một người
1:
2:

3:
4:
5:
6:
7:
8:
9:
10:
11:
12:

create view cha_mẹ(cha_mẹ, con) as
select * from “cha”
union
select * from “mẹ”;
create view tổ_tiên(tổ_tiên, hậu_duệ) as
with recursive rec_tổ_tiên(tổ_tiên, hậu_duệ) as
select * from cha_mẹ
union
select cha_mẹ, hậu_duệ
from cha_mẹ, rec_tổ_tiên
where cha_mẹ.con = rec_tổ_tiên. tổ_tiên
select * from rec_tổ_tiên;


14

Phạm Thế Anh Phú / Báo Cáo Tiểu Luận Môn Học Cơ Sở Dữ Liệu Nâng Cao - UIT

Về mặt mục đích đạ được, thì truy vấn đệ quy trong SQL3 vẫn có thể hỗ trợ chúng ta tìm kiếm và rút trích dữ

liệu theo chiều sâu một cách hiệu quả. Tuy nhiên, vì cấu trúc syntax quá phức tạp khi khai báo một thủ tục đệ
quy, do đó ngôn ngữ SQL3 hầu như không được phổ biến rộng rãi.
3. CÀI ĐẶT VÀ LẬP TRÌNH DATALOG VỚI CÔNG CỤ DES (DEDUCTIVE EDUCATIONAL
SYSTEM)
DES (Datalog Educational System)[*] là một phần mềm mã nguồn mở được phát triển bởi P. Julián-Iranzo và
F. Sáenz-Pérez, đại học UCM. Phần mềm DES được xây dựng dành cho mục đích giáo dục và thực hành ngôn
ngữ Datalog, nó cung cấp một môi trường tương tác và lập trình Datalog, SQL mạnh mẽ.
3.1. Hướng dẫn cài đặt và chạy phần mềm DES.
Được phát triển dựa trên ngôn ngữ lập trình Prolog và Java, do đó DES có thể tương thích với nhiều nền tảng
khác nhau bao gồm Windows, Linux và MacOS. Để cài đặt phần mềm DES trên máy tính, chúng ta tiến hành
download phần mềm này tại địa chỉ chính thức sau: Tùy theo,
hệ điều hành của máy tính mà chúng ta sẽ lựa chon phiên bản cho phù hợp. Sau khi tải hoàn tất về máy tính,
phần mềm sẽ được đóng gói dạng file nén “.zip”, chúng ta bung nén và chạy file “des_acide.jar” để chạy phiên
bản có giao diện của phần mềm.

Hình 3.1. Giao diện chính của phần mềm DES

Lưu ý vì phần giao diện của phần mềm chạy trên nền tảng Java nên chúng ta cũng cần lưu ý cài Java trên máy.
Giao diện chính của DES, bao gồm:
• Project explorer: quản lý các file và project đã được tạo.
• File/code editor: trình hỗ trợ soạn thảo file/code.
• Console: hỗ trợ tương tác bằng dòng lệnh (command) với thư viện của DES.

* Phần mềm DES: />

Phạm Thế Anh Phú / Báo Cáo Tiểu Luận Môn Học Cơ Sở Dữ Liệu Nâng Cao - UIT





15

Database: quản lý cấu trúc của CSDL, các bảng (table), các view, v.v.
PDG: hỗ trợ trực quan hóa đồ thị luật phụ thuộc (dependency graph) trong Datalog.

3.2. Tương tác với DES thông qua Console
Hầu hết các tương tác với DES để chạy các đoạn code Datalog sẽ thông qua các tập lệnh của console. Do đó,
chúng ta cần làm quen với một số lệnh cơ bản sau, bao gồm (xem Bảng 3.1):
Bảng 3.1. Một số câu lệnh console phổ biến cần sử dụng khi làm việc với DES
Lệnh
/pwd
/ls
/cd
/rm
/cp
/datalog
/prolog
/ra
/sql
/consult
/reconsult
/listing
/assert
/abolish
/save_ddb
/restore_ddb

Mô tả tính năng
Các lệnh làm việc với file và folder (giống với các lệnh trên Linux)
Xem vị trí của thư mục đang đứng.

Liệt kê danh sách các file va folder trong thu mục đang đứng.
Di chuyển đến một thư mục khác.
Xóa file hoặc thư mục
Sao chép một file hay thư mục
Các lệnh chuyển thư viện
Chuyển sang chế độ thực thi lệnh trong thư viện Datalog.
Chuyển sang chế độ thực thi các lệnh trong thư viện của Prolog.
Chuyển sang chế độ thực thi lệnh trong thư viện đại số quan hệ (relational algebra).
Chuyển sang chế độ thực thi các lệnh trong thư viện SQL, ở đây là SQL3 có hỗ trợ đệ quy.
Các lệnh làm việc với thư viện Datalog
Tiến xóa CSDL hiện tại và nạp một CSDL ở dạng cú pháp Datalog vào hệ thống.
Sau khi thay đổi lại file chứa code Datalog, chúng ta cần nạp lại file này mà không muốn xóa toàn
bộ CSDL cũ thì dùng lệnh này.
Liệt kệ tất cả luật và sự kiện trong CSDL hiện đang có.
Chèn thêm một luật hay một sự kiện vào CSDL đang được nạp.
Xóa toàn bộ, làm sạch CSDL Datalog đang làm việc.
Lưu CSDL Datalog hiện tại đang làm việc vào file nào đó.
Phục hồi/restore lại CSDL Datalog đang làm việc từ một file nào đó.

3.3. Thực hành Datalog với một số ví dụ có sẵn của DES
Ngoài cung cấp một môi trường tương tác và làm việc khá thuận tiện, DES còn cung cấp cho người dùng một
số ví dụ đã được viết sẵn ở cả ba dạng, bao gồm:
• CSDL dạng Datalog (các file *.dl).
• CSDL dạng SQL (các file dạng *.sql)
• CSDL dạng đại số quan hệ (relational algebra) (các file dạng *.ra)
Chúng ta cùng đi sơ lược qua một số ví dụ điển hình để làm quen với ngôn ngữ lập trình Datalog trên môi
trường của DES.
Thực hành với bài tập với cây gia phả gia đình (family): đầu tiên chúng ta chuyển folder hiện đang đứng
sang folder “examples” – nơi chưa các file CSDL mẫu dành cho thử nghiệm. Để xem vị trí hiện tại đang đứng,
chúng ta gõ lệnh “/pwd” trên console, mặc định thì folder chúng ta đang đứng sẽ là folder cài đặt phần mềm

DES, do đó để di chuyển sang folder “examples” chúng ta dùng lệnh: “/cd examples”, minh họa Hình 3.2. Để
liệt kê danh sách các folders/files có trong thư mục đang đứng, chúng ta dùng lệnh “/ls”, minh họa Hình 3.3.


16

Phạm Thế Anh Phú / Báo Cáo Tiểu Luận Môn Học Cơ Sở Dữ Liệu Nâng Cao - UIT

Hình 3.2. Minh họa các bước di chuyển đến folder “examples” trên DES

Hình 3.3. Minh họa dùng lệnh “/ls” liệt kê danh sách các folders/files trong thư mục đang đứng trên DES

Trong bài tập này, chúng ta sẽ thực nghiệm với CSDL chứa dữ liệu về một cây giai phả gia đình có sẵn của
DES, bao gồm 3 files: “family.dl”, “family.sql” va “family.ra”. Để nạp CSDL Datalog với file “family.dl” – ta
dùng lệnh “/consult family.dl” minh họa Hình 3.5, ở đây chúng ta sẽ thấy tổng cộng có 11 sự kiện/luật đã được
nạp để liệt kê danh sách các sự liện và luật này ta dùng lệnh “/listing” minh họa Hình 3.6.
tom

grace

cha

carol
I

tony
cha

jack


mẹ

cha

carol
II

mẹ

amy
mẹ

fred

mẹ

cha

carol
III
Hình 3.4. Minh họa cây gia phả trong CSDL family của DES


Phạm Thế Anh Phú / Báo Cáo Tiểu Luận Môn Học Cơ Sở Dữ Liệu Nâng Cao - UIT

17

Hình 3.5. Minh họa nạp CSDL Datalog family với lệnh “/consult”

Hình 3.6. Minh họa liệt kê danh sách các sự kiện và luật trong CSDL Datalog đã nạp


Dữ liệu cây gia phả trong CSDL family của DES được minh họa tronh Hình 3.4, trong CSDL này tác giả cũng
đã cung cấp cho chúng ta hai luật được định nghĩa sẵn, bao gồm:
• (r1): parent(X,Y) :- father(X,Y) ; mother(X,Y)., nhằm phục vụ cho việc tìm kiếm cha mẹ của một
người nào đó.
• (r2): ancestor(X,Y) :- parent(X,Z), ancestor(Z,Y)., nhằm phục vụ cho việc tìm kiếm tổ tiên của
một người nào đó.
Chúng ta có thể thấy được sự phụ thuộc của các luật/sự kiện này thông qua đồ thị phụ thuộc luật được trực
quan hóa trong cửa sổ PDG, đồ thị phụ thuộc cho CSDL family được minh họa thông qua DES tại Hình 3.7.

Hình 3.7. Minh họa đồ thị phụ thuộc luật được xây dựng ứng với CSDL được nạp trong DES


18

Phạm Thế Anh Phú / Báo Cáo Tiểu Luận Môn Học Cơ Sở Dữ Liệu Nâng Cao - UIT

Chúng ta sẽ thử đựa ra một số truy vấn vấn dạng câu hỏi của Datalog để lấy dữ liệu thông qua console của DES
như sau:
• Tìm kiếm cha mẹ của “amy” với lệnh parent(X, amy), kết quả trả về từ console của DES minh họa
trong Hình 3.8
• Tìm kiếm tất cả tổ tiên của “carolIII”, với lệnh ancestor(X, carolIII), kết quả trả về từ console của
DES minh họa trong Hình 3.9.

Hình 3.8. Minh họa cho kết quả trả về của câu hỏi: tìm cha mẹ
của “amy” trên DES

Hình 3.9. Minh họa cho kết quả trả về của câu hỏi: tìm tất cả tổ
tiên của “carolIII” trên DES


Chúng ta sẽ thử viết thêm hai luật dùng để tìm kiếm ông bà của một người và vợ/chồng của một người, vào
CSDL family có sẵn của DES. Để tìm kiếm ông bà thì quá đơn giản, chúng ta chỉ cần tìm cha mẹ của cha mẹ
người đó sẽ ra kết quả, còn vợ/chồng thì theo logic, nếu hai người có chung con thì đồng nghĩa là quan hệ
vợ/chồng. Hai luật sẽ có cấu trúc như sau:
• (r3): grand_parent(X,Y) :- parent(X,Z) , parent(Z,Y).
• (r4): spouse(X,Y): parent(X,Z) , parent(Y,Z), X \= Y.
Để hoàn tất, chúng ta lưu các luật mới định nghĩa lại và tiến hành nạp lại CSDL với lệnh “/reconsult family.dl”,
minh họa Hình 3.10, hoặc chúng ta có thể chèn thêm từng luật vào CSDL đang được nạp với lệnh: “/assert [nội
dung luật]”, tuy nhiên lưu ý là khi chúng ta tắt phần mềm thì các luật này sẽ không được lưu ngược lại vào file,
do đó cách tốt nhất là ta nên viết trực tiếp vào file sau đó nạp ngược lại vào CSDL. Sau khi nạp lại CSDL hoàn
tất, ta sẽ thấy cấu trúc của đồ thị luật phụ thuộc đã được thay đổi lại như minh họa tại Hình 3.11.

Hình 3.10. Nạp lại CSDL Datalog với các luật mới bằng lệnh
“/reconsult”

Hình 3.11. Cấu trúc đồ thị luật phụ thuộc đã được cập nhật với
2 luật mới

Và cuối cùng chúng ta kiểm thử lại hai luật đã thêm vào, với các câu hỏi đơn giản như: tìm ông bà của “fred”,
và liệt kê danh sách tất cả các cặp vợ chồng có trong CSDL (minh họa Hình 3.12 và Hình 3.13).


Phạm Thế Anh Phú / Báo Cáo Tiểu Luận Môn Học Cơ Sở Dữ Liệu Nâng Cao - UIT

Hình 3.12. Truy vấn tìm ông bà của một người thông qua luật (r3)

19

Hình 3.13. Truy vấn liệt kê tất cả các cặp vợ chồng trong
CSDL qua luật (r4)


Ngoài ra, phần mềm DES còn hỗ trợ chúng ta chạy các file script SQL, bao gồm các tác vụ như: tạo các bảng,
view, lập trình các thủ tục, v.v. Ở trong bài thực hành về cây gia phả gia đình (family) này, DES cũng cung cấp
một CSDL dạng SQL tương đương với Datalog tại file “family.sql”, để nạp file này vào DES chúng ta dùng
lệnh “/process family.sql”.
Lưu ý trước khi thực hiện nạp CSDL SQL vào DES, chúng ta cần xóa toán bộ CSDL Datalog đã nạp từ trước
bằng lệnh “/abolish” (minh họa Hình 3.14). Sau khi hoàn tất quá trình nạp CSQL SQL vào DES, ở màn hình
“Database” chúng ta có thể xem được các bảng cũng như view đã được tạo trong CSDL vừa được nạp (minh
họa Hình 3.15).

Hình 3.14. Minh họa nạp CSDL dạng SQL vào phần mềm DES

Hình 3.15. DES hỗ trợ hiển thị trực quan các bảng và views của
CSDL SQL được nạp

Trong CSDL SQL được cung cấp sẵn bởi DES, đã được viết sẵn hai thủ tục tạo 2 views là “parent” và
“ancestor” dùng để liệt kê danh sách cha mẹ và tổ tiên của một người nào đó. Ví dụ để liệt kê danh sách tổ tiên
của “fred” ta sẽ gọi view “ancestor” với truy vấn sau:
SELECT *
FROM ancestor
WHERE descendant='fred';
Lưu ý trước khi nhập truy vấn SQL vào console của DES chúng ta cần chuyển chế độ tương tác thư viện sang
dạng SQL bằng lệnh “/sql”, kết quả truy vấn trả về minh họa tại Hình 3.16.


20

Phạm Thế Anh Phú / Báo Cáo Tiểu Luận Môn Học Cơ Sở Dữ Liệu Nâng Cao - UIT

Hình 3.16. Minh họa câu truy vấn SQL liệt kê danh sách các tổ tiên của một người trong DES


4. ÁP DỤNG MÔ HÌNH CSDL SUY DIỄN TRONG KHAI THÁC MẠNG THÔNG TIN KHÔNG ĐỒNG
NHẤT HỌC THUẬT DBLP
Trong phần này, chúng tôi áp dụng nền tảng và khả năng truy vấn đệ quy của CSDL suy diễn để giải quyết một
số bài toán chính yếu trong việc khai thác mạng thông tin không đồng nhất, lĩnh vực học thuật, cụ thể là mạng
thông tin DBLP[†].
4.1. Sơ lược về mạng thông tin không đồng nhất
Mạng thông tin không đồng nhất (heterogeneous information network) là một lý thuyết được Sun Y. và J. Han
(2011) đưa ra nhằm để phân biệt với các mạng thông tin đồng nhất (homogeneous information network), vì
mức độ phức tạp trong cấu trúc cũng như hình thức tiếp cận để khai thác tri thức từ chúng hoàn toàn khác nhau.
Định nghĩa mạng thông tin (information network): là hình thức tổ chức dữ liệu dưới dạng một mạng đồ thị
có hướng: G = (V, E), trong đó: (V) là tập đại diện cho tập các thực thể (𝑣) trong mạng thông tin và (E) là tập
các quan hệ/cung (𝑒), liên kết các thực thể lại với nhau. Một mạng thông tin sẽ có hai tập (A) và (R), với (A)
đại diện cho tập các loại của thực thể và tập (R) đại diện cho tập các loại quan hệ, từ đó chúng ta có hai hàm
ánh xạ, như sau:
• 𝜙 𝑉 = 𝐴 và, 𝜙 𝑣 ∈ 𝐴 = {𝐴5 , 𝐴7 … 𝐴. }.
• 𝜓 𝐸 = 𝑅 và, 𝜓 𝑒 ∈ 𝑅 = {𝑅5 , 𝑅7 … 𝑅. }.
Như vậy, tùy thuộc vào hai tập (A) và (R) mà chúng ta sẽ phân biệt hai loại mạng thông tin như sau, bao gồm:
• Mạng thông tin đồng nhất (homogeneous): chỉ bao gồm duy nhất một loại thực thể và một loạt
liên kết, hay ( 𝐴 = 1 và 𝑅 = 1) (minh họa Hình 4.1).
• Mạng thông tin đa tạp/không đồng nhất (heterogeneous): có số lượng thực thể và loại quan hệ
giữa các thực thể lớn hơn 1, hay ( 𝐴 > 1 và 𝑅 > 1) (minh họa Hình 4.2).



Mạng học thuật DBLP: />

Phạm Thế Anh Phú / Báo Cáo Tiểu Luận Môn Học Cơ Sở Dữ Liệu Nâng Cao - UIT

KDD

...

tham_khảo
(reference_to)
tham_khảo
(reference_to)

Bài báo B

tham_khảo
(reference_to)

đăng_tại
(published_at)

ACM
Bào bái n

Bào bái ...

Hình 4.1. Minh họa một mạng thông tin đồng nhất
(homogeneous)

Bài báo B

...

...

Bài báo A tham_khảo


(reference_to)

tác_giả
(author_of)

đăng_tại
tham_khảo
(published_at) (reference_to)
đăng_tại
(published_at)
...

...

tham_khảo
(reference_to)

đăng_tại
(published_at)

21

tác_giả
(author_of)
J. Han

tác_giả
(author_of)


...

tác_giả
(author_of)

...

đăng_tại
Bài báo A
(published_at)

R. Agrawal

tác_giả
(author_of)

tác_giả
(author_of)

SUN,
Yizhou

Hình 4.2. Minh họa một mạng thông tin không đồng nhất
(heterogeneous)

Đa số các hình thức khai thác tri thức từ mạng thông tin đã được phát triển hầu hết chỉ có thể áp dụng cho mạng
thông tin đồng nhất, điển hình như: PageRank, SimRank, SCAN, v.v. các phương pháp này hầu như chỉ áp
dụng được cho mạng thông tin có một loại thực thể và một loại liên kết duy nhất. Nhưng hiển nhiên rằng đa số
các mạng thông tin phổ biến hiện nay đều tồn tại ở hình thức không đồng nhất, với cấu tạo của đa loại thực thể
liên và đa loại liên kết, ví dụ như các mạng học thuật (DBLP, DBIS) với nhiều loại thực thể: “tác giả”, “hội

nghị”, “bài báo”,v.v liên kết với nhau bằng nhiều hình thức khác nhau, như: “tác giả”
báo”

đă./

¥¦ế¨

“bài báo”, “bài

“hội nghị”,v.v. Hay các mạng xã hội (Facebook, Twitter) với nhiều loại thực thể “người dùng”,

“nhóm”, “bình luận”, “bài viết”,v.v. liên kết với nhau bằng vô vàn loại kết nối: “người dùng”
¨#í"#

¥¦ế¨

“bình luận”,

“người dùng”
“bình luận”,v.v.
Do đó, cần một hình thức mới để có thể khai thác tri thức hiệu quả hơn từ các mạng thông tin không đồng nhất
này. Trong thời gian gần đây, thì đã có một số công trình công bố liên quan đến khai thác tri thức từ mạng thông
tin không đồng nhất, nổi tiếng như thuật toán: RankClus, NetClus, PathSim, HeteSim, HeteRecom, v.v. nhằm
hỗ trợ cho các bài toán tính toán độ tương đồng, gom cụm, tư vấn khuyến nghị, v.v. cho các thực thể trong mạng
thông tin đa tạp. Đối với các mô hình khai thác mạng đa tạp, thì có hai vấn đề quan trọng nhất, đó là:
4.1.1. Vấn đề 1: suy luận ngữ nghĩa của các loại liên kết
Có thể nói rằng các hình thức liên kết giữa các thực thể trong mạng thông tin không đồng nhất là vô cùng phức
tạp, ngoài ý nghĩa trực tiếp của loại liên kết, thì tập hợp của các loại liên kết này cũng hàm chứa các ý nghĩa
mới, ví dụ: chúng ta biết quan hệ:
¥¦ế¨


• “tác giả” “bài báo” (chỉ mối quan hệ một tác giả của một bài báo nào đó)
Nnhưng với một chuỗi quan hệ dạng như sau:
¥¦ế¨

¥¦ế¨

• “tác giả” “bài báo” “tác giả” (chỉ mối quan hệ hai tác giả cùng viết chung một bài báo).
Thì đây có thể suy diễn đơn giản là một dạng quan hệ “đồng tác giả” – có nghĩa là 2 tác giả cùng viết chung
một bài báo nào đó. Tuy nhiên, trên mặt lưu trữ, quan hệ này là hoàn toàn ẩn và cần phải suy diễn bởi con người
mới có thể nhận biết được. Các chuỗi liên kết này còn được gọi là siêu liên kết (meta-path).
Do đó, bài toán đặt ra là làm thế nào có thể thiết lập các tập luật cũng như lưu trữ một các hiệu quả các loại
quan hệ cần phả suy diễn trên à áp dụng CSDL suy diễn là một trong các hướng giải pháp tiềm năng.


22

Phạm Thế Anh Phú / Báo Cáo Tiểu Luận Môn Học Cơ Sở Dữ Liệu Nâng Cao - UIT

4.1.2. Vấn đề 2: tìm đường đi theo siêu liên kết (meta-path) đã được định nghĩa.
Bản chất của mọi mô hình khai thác mạng thông tin không đồng nhất là hướng tiếp cận dựa dựa trên siêu liên
kết đã được định nghĩa (meta-path-based mining approach). Về cơ bản thì meta-path là một dạng chuỗi liên kết
dùng để chỉ một mối quan hệ ngữ nghĩa nào đó được suy diễn bởi con người, lấy lại ví dụ trong mạng thông tin
không đồng nhất học thuật DBLP, chúng ta có hàng loạt meta-path được định nghĩa với ngữ nghĩa tương ứng
như sau (xem Bảng 4.1):
Bảng 4.1. Một số meta-path phổ biến trong mạng học thuật DBLP
Meta-path
A-P-A
(author-paper-author)
A-Aff.-A

(author-affiliation-author)
A-P-V-P-A
(author-paper-venue-paper-author)


Ngữ nghĩa
Quan hệ đồng tác giả, hai tác giả cùng viết chung một bài báo.
Quan hệ đồng nghiệp, hai tác giả cùng làm việc tại một cơ quan, trường đại học.
Quan hệ hai tác giả cùng nộp chung các bài viết của họ ở cùng một hội nghị khoa học.


Tùy theo mục đích tìm kiếm mà meta-path được lựa chọn khác nhau, sự khác nhau của meta-path được sử dụng
cho các mô hình khai thác tri thức trong mạng thông tin, sẽ có kết quả trả về khác nhau. Ví dụ, ta muốn tìm
kiếm các tác giả tương đồng với “Jiawei Han” mà họ hay nộp chung bài báo ở một số hội nghị nào đó, thì ta
chọn meta-path: A-P-V-P-A. Trong ý tưởng của mô hình khai thác mạng thông tin theo meta-path, thì bài toán
tìm tổng số đường đi giữa hai thực thể theo một meta-path nhất định nào đó là quan trọng nhất, có thể coi là
một dạng của bài toán tìm tất cả đường đi giữa hai đỉnh cho trước của đồ thị. Và hiển nhiên rằng, bài toán này
có thể áp dụng đệ quy để giải quyết do đó à áp dụng CSDL suy diễn cũng là một trong các hướng giải pháp
tiềm năng cho bài toán này.
4.2. Áp dụng CSDL suy diễn trong khai thác mạng thông tin không đồng nhất
4.2.1. Mô hình lưu trữ mạng thông tin
Có hai hình thức lưu trữ mạng thông tin là áp dụng CSDL dạng bảng quan hệ truyền thống và CSDL đồ thị để
lưu trữ, đối với mỗi hình thức ta sẽ có các cách thức lưu trữ khác nhau, bao gồm:
• CSDL bảng quan hệ (RDBMS): mỗi loại thực thể và loại quan hệ sẽ được lưu trữ trong một bảng
riêng biệt, do vậy đối với một mạng thông tin có (A) loại thực thể và (R) loại quan hệ thì ta sẽ có số
lượng bảng là A + |R|. Ngôn ngữ truy vấn chính là SQL (minh họa database table schema tại Hình
4.3).
• CSDL đồ thị (Graph database): đây là một hình thức lưu trữ khá phổ biến của các loại mạng thông
tin, đặc biệt là mạng xã hội. Mỗi thực thể sẽ được lưu trữ tại một nút của đồ thị và các quan hệ giữa
các nút sẽ được biểu diễn bằng các cung. Số lượng nút sẽ bằng với số lượng của thực thể |V|, và số

lượng cung sẽ bằng với số lượng quan hệ |E|. Ngôn ngữ truy vấn chính là Cypher (minh họa Hình 4.4).
Trong giới hạn của bài toán, thì cả hai hình thức lưu trữ này đều có mặt hạn chế là không thể suy diễn được các
quan hệ tìm ẩn giữa các thực thể cũng như thiệt lập các thủ tục đệ quy để giải quyết các bài toán liên quan đến
tìm tất cả đường đi giữa các nút trong mạng thông tin. Trong hướng tiếp cận của bài luận này, ta chỉ xử dụng
các hệ quản trị CSDL đóng vai trò làm nền tảng lưu trữ các sự kiện (fact), một dạng của hình thức CSDL mở
rộng (extensional database ED). Còn các cơ chế suy diễn và truy vấn dữ liệu cũng như mối quan hệ giữa chúng
sẽ được giao lại cho Datalog, đóng vai trò là CSDL theo mục đích (intentional database).


Phạm Thế Anh Phú / Báo Cáo Tiểu Luận Môn Học Cơ Sở Dữ Liệu Nâng Cao - UIT

23

Hình 4.3. Mạng thông tin DBLP được lưu trữ dưới nền tảng CSDL bảng quan hệ

Hình 4.4. Mạng thông tin DBLP được lưu trữ dưới nền tảng CSDL đồ thị Neo4J

4.2.2. Mô tả, chuyển đổi dữ liệu mạng thông tin thành các sự kiện
Để suy diễn các mối quan hệ được lưu trữ trong nền tảng CSDL mở rộng, bước đầu ta phải định nghĩa và chuyển
đổi toàn bộ dữ liệu và quan hệ sang dạng các tập sự kiện của Datalog. Điển hình trong mạng thông tin DBLP
ta có tất cả 5 loại thực thể, là: “author”, “paper”, “venue”, “topic”, “affiliation”, và 5 loại quan hệ, bao gồm:
“author”-“paper”, “author”-“affiliation”, “paper”-“paper”, “paper”-“topic”, “paper”-“venue”. Chúng ta sẽ mô
tác các thực thể và quan hệ này này dưới dạng 8 loại sự kiện, ở dạng các khối dữ liệu (tuple), như sau:
Các tuple mô tả thực thể (entity), bao gồm:
• paper(paper_id, paper_title,…).: mô tả một thực thể paper – bài báo khoa học, với các thuộc tính đi


24

Phạm Thế Anh Phú / Báo Cáo Tiểu Luận Môn Học Cơ Sở Dữ Liệu Nâng Cao - UIT







kèm như: tiêu đề, abstract, năm xuất bản,v.v.
author(author_id, author_name,…).: mô tả một thực thể author – tác giả, với các thuộc tính đi kèm
như: tên, cơ quan công tác,v.v.
venue(venue_id, venue_name,…).: mô tả thực thể venue – các hội nghị khoa học, với các thuộc tính
đi kèm như: tên hội nghị, v.v.
affiliation(aff_id, aff_name,…).: mô tả thực thể cơ quan công tác/trường đai học nơi làm việc của
các tác giả, với các thuộc tính đi kèm như tên cơ quan, quốc gia,v.v.
topic(topic_id, topic_name,…).: mô tả thực thể topic – chủ đề của bài báo, với các thuộc tính đi kèm
như: tên chủ đề, các chủ đề con, v.v.

Các tuple mô tả mối quan hệ (relation), bao gồm:
• author_of(author_id, paper_id).: mô tả mối quan hệ tác giả (author) - bài báo (paper).
• work_at(author_id, affiliation_id).: mô tả mối quan hệ làm việc của tác giả (author) - tại một cơ quan
công tác, trường ĐH nào đó (affiliation).
• cite(paper_id, paper_id).: mô tả mối quan hệ trích dẫn (citations/references) giữa các bài báo với
nhau.
• submit_at(paper_id, venue_id).: mô tả mối quan hệ giữa bài báo (paper) – và hội nghị (venue), bài
báo được nộp và đăng tại một hội nghị nào đó.
• belong_to(paper_id, topic_id).: mô tả mối quan hệ giữa bài báo (paper) – và chủ đề (topic), bài báo
thuộc về một chủ đề nào đó.
4.2.3. Bài toán 1: Áp dụng CSDL suy diễn trong suy luận ngữ nghĩa giữa các liên kết trong mạng thông tin
DBLP
4.2.3.1. Suy diễn mối quan hệ đồng tác giả (co-author relationship)
Đây là một mối quan hệ khá phổ biến trong một mạng học thuật, có nghĩa hai tác giả cùng chia viết chung một

bài báo, trong mạng thông tin thì quan hệ này là ẩn vì nó là sự hợp thành của một chuỗi liên kết theo dạng: “tác
¥¦ế¨

¥¦ế¨

giả” “bài báo”
thêm vào luật sau:

“tác giả” (minh họa Hình 4.5), để hiện suy diễn được mối quan hệ này trên Datalog, ta

Hình 4.5. Minh họa một quan hệ đồng tác giả - hai tác giả cùng viết chung một bài báo trong DBLP



(r1): co_author(X,Y) :- author_of(X,Z) , author_of(Y,Z), X\=Y.


Phạm Thế Anh Phú / Báo Cáo Tiểu Luận Môn Học Cơ Sở Dữ Liệu Nâng Cao - UIT

25

4.2.3.2. Suy diễn mối quan hệ đồng nghiệp (co-worker relationship)
Tương tự như quan hệ đồng tác giả - giữa các thực thể “tác giả” cũng sẽ có thêm các quan hệ là “đồng nghiệp”,
-à®_¥¦ệ"_¨ạ¦

-à®_¥¦ệ"_¨ạ¦

liên kết có dạng: “tác giả”
“cơ quan”
“tác giả” – được suy diễn từ mối quan hệ trực tiếp là

hai tác giả cùng công tác tại một cơ quan hay trường đại học nào đó. Luật được diễn giải như sau:



(r2): co_worker(X,Y) :- work_at(X,Z) , work_at(Y,Z), X\=Y.

Hình 4.6. Minh họa một quan hệ đồng nghiệp giữa các tác giả - cùng làm chung tại một cơ quan hay trường đại hịa trong DBLP

4.2.3.3. Suy diễn mối quan hệ đồng trích dẫn của các bài báo (co-citation relationship)
Luật này dùng để suy diễn các mối quan hệ giữa các bài báo có chung danh sách các tài liệu tham khảo, liên kết
¨°í"#_±ẫ.

¨°í"#_±ẫ.

có dạng: : “bài báo”
“bài báo”
“bài báo” – có nghĩa hai bài báo cùng tham khảo về một bài
báo nào đó (minh họa Hình 4.7). Việc tìm kiếm quan hệ đồng trích dẫn giữa các bài báo phục vụ cho việc đánh
giá sự liên quan giữa các thực thể trong mạng thông tin, cụ thể ở đây là bài báo. Luật này được diễn giải như
sau:



(r3): paper_same_citation_set(X,Y) :- cite(X,Z) , cite(Y,Z), X\=Y.

Hình 4.7. Mô tả qua hệ trích dẫn giữa các bài báo trong mạng DBLP

4.2.3.4. Suy diễn mối quan hệ đồng chủ đề giữa các bài báo (same-topic relationship)
Tương tự như quan hệ suy diễn đồng trích dẫn, mỗi bài báo trong DBLP được phân loại để thuộc về một hay
nhiều chủ đề khác nhau, do đó để xác định được tập các bài báo có chung chủ đề ta cần phải áp dụng luật suy



×