Sự giống nhau và khác biệt về khái niệm cơ bản và triển khai giữa ngôn ngữ cơ sở dữ liệu quan hệ sql
và ngôn ngữ lập trình logic như prolog
và clojure là core.logic
? Hai cái có thể hoán đổi cho nhau không?Làm thế nào tương tự như ngôn ngữ cơ sở dữ liệu quan hệ và lập trình logic?
Trả lời
Điểm tương đồng được chụp bởi Datalog ngôn ngữ truy vấn. Here là động lực và giải thích tốt hơn về kết nối giữa logic và cơ sở dữ liệu. Đoạn trích này sẽ giải quyết câu hỏi của bạn:
Tuy nhiên, ghép nối Cơ sở dữ liệu quan hệ và cơ sở dữ liệu quan hệ hiển thị một số sự chênh lệch . Sự kiện và quy tắc trong Prolog được tổ chức theo thứ tự tổng số và ngữ nghĩa của chương trình Prolog tùy thuộc vào thứ tự này. Trong tương phản , các mối quan hệ trong cơ sở dữ liệu được coi là bộ không theo thứ tự của bộ dữ liệu và kết quả của truy vấn độc lập với bất kỳ thứ tự vật lý nào. Việc xử lý các chương trình Prolog là định hướng tuple trong khi cơ sở dữ liệu quan hệ được thiết lập theo định hướng. Prolog cung cấp các thủ tục các tính năng như biến vị ngữ để cho phép lập trình viên kiểm soát quy trình suy luận . Thứ tự đánh giá chương trình Prolog là được xác định trước, trong khi các biểu thức trong phép tính quan hệ hoàn toàn là khai báo và đánh giá thực tế được để lại cho bộ xử lý truy vấn . Tối ưu hóa các truy vấn là rất quan trọng cho sự thành công của cơ sở dữ liệu quan hệ. tính chất thủ tục của động cơ Prolog để lại gánh nặng của việc tối ưu hóa với lập trình viên.
Một khác biệt quan trọng là SQL is only Turing complete với một số thủ thuật khá điên rồ mà không thể cho đến khi ANSI SQL 99. Prolog is Turing complete và do đó là ngôn ngữ lập trình đa năng.
Mặc dù SQL và Prolog đều thể hiện các khái niệm logic bậc nhất, cũng không phải là triển khai hoàn chỉnh predicate calculus.
Ngôn ngữ lập trình Prolog và các ngôn ngữ lập trình logic khác phụ thuộc nhiều vào đệ quy, cả về định nghĩa cấu trúc dữ liệu cũng như cho các biến vị ngữ.
SQL mỗi lần không cho phép đệ quy và việc giới thiệu các thủ tục được lưu trữ đã được thực hiện với các giới hạn về độ sâu lồng của các cuộc gọi đó. Ví dụ. SQL Server 2000 đến 2012 cho phép at most 32 nested calls.
Trong cơ sở dữ liệu quan hệ, "quan hệ" được thống nhất dưới dạng bảng (hoặc linh hoạt hơn, dưới dạng lượt xem). Khía cạnh tương tự nhất của Prolog là dynamic factbases, trong một số triển khai (SWI, Amzi) cho phép lập chỉ mục cho hiệu suất, rất giống với việc lập chỉ mục các bảng quan hệ để thực hiện trong SQL.
Mặc dù SQL RDBMS được thiết kế để làm việc hiệu quả với nhiều bộ dữ liệu lớn hơn so với triển khai Prolog thường cần, Prolog ít nhất có thể được sử dụng để thử nghiệm cả cơ sở dữ liệu và các khía cạnh quy trình của thiết kế hệ thống.
Xem here for a 2005 thesis khám phá các cơ sở dữ liệu quan hệ mở rộng với suy luận Prolog.