Formal RQL

Relational Algebra

關系代數 是一種 過程化查詢語言,它以 關系 作為輸入,同時輸出 關系

關系 是定義在一組 上的 笛卡爾積

Basic Relational-Algebra

Select Operation

選擇 (Select) 選出 滿足給定謂詞的元組

Project Operation

投影 (Project) 選出 指定的屬性

由於 關系 不允許 重復元組,所以 投影 運算之後需要再次 對元組進行去重

Set-Union Operation

參與 集合運算兩個關系 必須是 相容的 (Compatible)

  • 同元的,即 屬性數量 相同
  • 對所有的 ir的第i個屬性的域s的第i個屬性的域 要相同。

Set-Difference Operation

 

Cartesian Product Operation

笛卡爾積 用於 組合/串接 兩個 關系

參與 笛卡爾積 的兩個 關系屬性名 必須 不同,當存在 同名屬性 (Common Attribute) 時,需要添加 關系名前綴 用於 區分

n.b. ,即 笛卡爾積 保留了 關系r的元組關系s元組所有可能的串接方式

所得的 結果關系 可能有 某些元組不符合 關系r關系s 所提供的 信息 的。

可以使用下列的 選擇運算過濾掉 這些不符合事實的元組

Renaming Operation

更名 (Rename) 用於為 關系代數表達式 提供 可供後續進行引用的標識符


考慮 查詢最高工資 的例子。


任何 更名運算 都是 可替代的。可以使用 位置標記隱含地 引用 關系的屬性。如 $1 = 第1個屬性

前面的例子可以 改寫

Additional Relational-Algebra

所有的 附加關系代數運算 都可以用 基本關系運算描述

Set-Intersection Operation


Natural-Join Operation

自然連接 笛卡爾積選擇 的一種 合並

兩個關系 不存在 相同屬性 時,

自然連接 只不過是 Theta連接 的一個 特例

我們經常需要 笛卡爾積選擇 一起使用,那麽可以轉而使用 Theta連接簡化書寫


自然連接 滿足 結合律

Assignment Operation

賦值運算 用於將 關系代數表達式 存儲為 常量,以便後續的 引用

這非常類似於 PL的賦值

n.b. 賦值運算 必須 賦值臨時變量,而不能直接 賦值永久關系,否則將造成對 數據庫的修改

Outer-Join Operation

外連接運算 可以處理 缺失的信息

共有3種類型:

Extended Relational-Algebra

不同於 附加關系代數拓展關系代數 不能用 基本關系代數描述

Generalized-Project

廣義投影 (Generalized Project):可以對 投影的屬性 進行 常量運算

Aggregate

聚集運算 (Aggregate Operation) 的輸入是 值的集合,輸出 單個值


上面例子給出 查詢所有系的教師的平局工資查詢每個系的教師的平均工資 的例子。

省略左側分組 時,默認為:將 輸入關系的所有元組 分組唯一的一組

Tuple Relational Calculus

Definition

元組關系演算形式 如下:

其中 公式公式 中出現的 變量 分為 自由變量受限變量

公式 由 如下的 原子 構成

 

公式 可以由 如下的 規則構造

 

Example

n.b. 紅色部分 可以正確處理 當生物系沒有開設任何課程 的情況

 

Expression Security

考慮如下的 元組關系表達式

我們稱 該表達式不安全的表達式。原因在於:neg 會產生 無限的結果

進一步地,這是因為我們並沒有事先定義 取值範圍


為了解決上述問題,我們引入 域 (Domain) 的概念:

公式 用於描述 所引用的所有值的集合

即:P的域 = P中顯式出現的值 +名稱出現在P中的那些關系的所有值


如果 元組關系表達式 結果中的所有值 均來自 ,則稱該表達式是 安全的

安全的表達式 必定包含 有限個結果

Domain Relational Calculus

Definition

域關系演算形式 如下:

域關系演算 由 如下的 原子 構成

公式構造規則 類比 元組關系演算

Example

Expression Security

我們使用與 元組關系演算 同樣的策略來解決 表達式安全性問題:引入 的概念

下面幾種 語言表達能力 上是 等價的

  • 基本關系代數
  • 安全的元組關系演算
  • 安全的域關系演算