在關係數據庫語言sql
和邏輯編程語言(如prolog
和clojure的core.logic
)之間的基本概念和實現方面有什麼相似之處和不同之處?這兩個是可以互換的嗎?關係數據庫語言和邏輯編程有多類似?
回答
相似之處由Datalog查詢語言捕獲。 Here是邏輯和數據庫之間連接的動機和更好的解釋。這段摘錄應該解決你的問題:
儘管如此,耦合Prolog和關係數據庫顯示了一些 的不和諧。 Prolog中的事實和規則總共以 的順序排列,Prolog程序的語義依賴於此順序。相比之下,數據庫中的關係被認爲是元組的無序集合,並且查詢的結果與任何物理的 的順序無關。 Prolog程序的處理是以元組爲導向的,而關係數據庫則是以導向的。 Prolog提供程序 功能,如切斷謂詞,允許程序員控制推理過程。 Prolog程序的評估順序爲 預定義,而關係演算中的表達式純粹爲 聲明式,並且實際評估留給查詢處理器 ,查詢處理器可重新排列查詢以用於優化目的。查詢的優化 對於關係數據庫的成功至關重要。 Prolog引擎的程序性質使得編程人員最優化的負擔爲 。
一個重要的區別是SQL is only Turing complete帶有一些非常瘋狂的技巧,直到ANSI SQL 99. Prolog is Turing complete才成爲可能,因此它是通用編程語言。
儘管SQL和Prolog都展示了一階邏輯概念,但predicate calculus的完整實現都不是。
Prolog和其他邏輯編程語言在很大程度上依賴於遞歸,既用於定義數據結構,也用於謂詞。
SQL本身不允許遞歸,並且存儲過程的引入已經在這種調用的嵌套深度方面進行了限制。例如。 SQL Server 2000到2012允許at most 32 nested calls。
在關係數據庫中,「關係」被表示爲表格(或者更靈活地表示爲視圖)。 Prolog的最相似的方面是dynamic factbases,在一些實現(SWI,Amzi)中允許索引性能,這與在SQL中執行關係表的索引非常相似。
儘管SQL RDBMS被設計爲能夠比Prolog實現通常需要的大量數據集高效地工作,但Prolog至少可以用於原型系統設計的數據庫和過程方面。
請參閱here for a 2005 thesis,其中探討了使用Prolog推斷擴展關係數據庫。
- 1. 關於我的C語言編程邏輯等式
- 2. 多頁形式和數據庫邏輯?
- 3. 邏輯在序言語言
- 4. 與語言無關的邏輯問題
- 5. Flashcard語言項目的數據庫模式/邏輯
- 6. 正在學習來自關係數據庫和麪向對象編程語言Delphi的Caché數據庫嗎?
- 7. 編輯多語言頁面
- 8. CodeIgniter多語言數據庫
- 9. 關係型數據庫的服務器輔助的編程語言支持
- 10. 差異的邏輯編號讀取組類似的數據
- 11. JPA類別和語言的關係
- 12. Bash語言變量邏輯
- 13. 表關係邏輯
- 14. 數據庫交叉表關聯邏輯
- 15. 以多種語言預先編寫變量的速記邏輯
- 16. 數據庫關係 - 語法
- 17. SQLite數據庫和語言
- 18. 編輯核心數據關係數據
- 19. Delta編碼 - 字符串(編程邏輯 - 沒有特定的語言)
- 20. 低級邏輯門,多路複用器和解碼器在高級語言中有什麼關係?
- 21. 關係數據庫 - 多種類型
- 22. 使用邏輯編程優化的語言
- 23. 系統編程語言和應用程序編程語言之間的區別
- 24. 業務邏輯層,多個表,關係
- 25. C語言和多線程編程
- 26. 彙編語言中有多少種數據類型?
- 27. UltraEdit具有類似UltraEdit的文本解析功能的編程語言或庫
- 28. 程序邏輯是否應該強化數據庫邏輯?
- 29. 測試類似的邏輯
- 30. 關係數據庫一對多關係