Datalog

Định nghĩa

Datalog là declarative logic query language biểu diễn dữ liệu bằng facts/predicates và suy ra quan hệ mới bằng rules.

Thành phần

  • Fact: dữ liệu đã biết, ví dụ within(idaho, usa).
  • Predicate: tên một quan hệ, chẳng hạn within hoặc born_in.
  • Rule: điều kiện để suy ra predicate mới.
  • Variable: giá trị cần hệ thống tìm bằng pattern matching.

Recursion

within_recursive(Location, Name) :- name(Location, Name).
within_recursive(Location, Name) :- within(Location, Via),
                                    within_recursive(Via, Name).

Rule thứ hai gọi lại chính predicate đang định nghĩa, cho phép suy ra containment qua số hop không cố định.

Cách rule được áp dụng

Một rule match khi mọi predicate bên phải :- đều tìm được binding. Khi đó, predicate bên trái được suy ra như một fact mới.

name(namerica, 'North America')
-> within_recursive(namerica, 'North America')
 
within(usa, namerica)
+ fact vừa suy ra
-> within_recursive(usa, 'North America')

Áp dụng rules lặp lại tạo ra transitive relationship qua số hop không cố định.

Derived predicate

Derived predicate không phải dữ liệu gốc được lưu trong database. Nó là quan hệ được suy ra từ facts hoặc rules khác. Nhờ đó query phức tạp có thể được chia thành building blocks, kết hợp và tái sử dụng.

Khi phù hợp

Datalog kém tiện cho query một lần đơn giản, nhưng mạnh khi logic phức tạp cần chia thành rules nhỏ, kết hợp, recursion và tái sử dụng trong nhiều query.

Liên kết