Query
聲明式和過程式查詢語言
在《數據庫系統概念》第 6 版第 2 章(關係代數)一書中,它指出存在三種形式查詢語言,關係代數、元組關係演算和域關係演算,它們是基於數理邏輯的聲明式查詢語言。但是,在另一頁上,它指出關係代數是過程的,而元組關係演算和域關係演算是非過程的。以下哪一個是正確的說法?你能提供簡單的例子來說明差異嗎?
文筆很差。“聲明性”是非正式的,他們以兩種方式使用它。一般含義是,“描述一個結果(而不是一個過程)”。但是許多對結果的描述都有一個明顯的過程解釋。所以那些“描述一個結果和一個過程”,不管他們是否打算這樣做。第一個說“符號可用於描述結果,而無需任何特定過程”。第二個說“代數有程序解釋而微積分沒有”。
但後一種說法是一個神話。它被鸚鵡學舌接收
$$ pseudo- $$智慧。代數有一個明顯的程序解釋——我們在參數上呼叫運算符。但微積分也是如此。就標準關係運算符而言,演算沒有明顯的程序解釋。 但這個想法是,微積分不用於請求此類程序。
演算在標準關係運算符方面具有直接的程序解釋,您可以將它們機械地轉換為“prenex 範式”,然後機械地將它們轉換為標準關係代數。(Codd 的歸約算法。)此外,在嘗試每個可能的元組作為結果的成員資格方面,它們有一個明顯的程序解釋(而不是關係代數)。(就像謂詞演算的標準 Tarskian 語義。)此外,它們在代數方面有一個明顯的過程解釋,添加了兩個簡單但不切實際的運算符 - UNION 的泛化(對應於 OR)和返回不在 a 中的元組的運算符關係(對應於 NOT)。(已經 NATURAL JOIN 對應於 AND & PROJECTing out 對應於 EXISTS。