數據庫 元組演算表達式

元組關係演算

  • 之前學習了一下關係代數表達式,現在再學習一下元組關係的演算,這樣就全了。這篇東西的符號打出來費了好多時間,比較麻煩,還好看着還能看懂,關鍵是全文本的,好下面開始正文。

  • 爲了討論方便,先允許關係的基數是無限的。然後再對這種情況下定義的演算作適當的修改,保證關係演算中的每一個公式表示的是有限關係。

  • 在元組關係演算系統中,稱 {t|Φ(t)} 爲元組演算表達式。其中 t 是元組變量, Φ(t) 爲元組關係演算公式,簡稱公式
    它由原子公式和運算符組成。

原子公式有三類:

(1) R(t)

  • R 是關係名, t 是元組變量。 R(t) 表示 t 是 R 中的元組。於是,關係 R 可表示爲: {t|R(t)}

(2) t[i] θ u[j]

  • t 和 u 是元組變量, θ 是算術比較運算符。 t[i] θ u[j] 表示斷言 “ 元組 t 的第 i 個分量與元組 u 的第 j 個分量滿足比較關係 θ ” 。例如, t[2] < u[3] 表示元組 t 的第 2 個分量小於元組 u 的第 3 個分量。

(3) t[i] θ c 或 c θ t[i]

  • 這裏 c 是常量,該公式表示 “t 的第 i 個分量與常量 C 滿足比較關係 θ” 。例如: t[4]=3 表示元組 t 的第 4 個分量等於 3 。
  • 在關係演算中定義了 “ 自由元組變量 ” 和 “ 約束元組變量 ” 的概念。這些概念和謂詞演算中的概念完全一樣。若公式中的一個元組變量前有 “ 全稱量詞 ” 或 “ 存在量詞 ” ,則稱該變量爲約束元組變量,否則稱自由元組變量。

公式可以遞歸定義如下:

  1. 每個原子公式是公式。

  2. 如果 Φ 1 和 Φ 2 是公式,則 Φ 1 ∧ Φ 2 、 Φ 1 ∨ Φ 2 、 ﹁ Φ1 也是公式。分別表示:
    ① 如果 Φ 1 和 Φ 2 同時爲真。則 Φ 1 ∧ Φ 2 才爲真,否則爲假;
    ② 如果 Φ 1 和 Φ 2 中一個或同時爲真,則 Φ 1 ∨ Φ 2 爲真,僅 Φ 1 和 Φ 2 同時爲假時, Φ 1 ∨ Φ 2 才爲假;
    ③ 如果 Φ 1 真,則 ﹁ Φ 1 爲假。

  3. 若 Φ 是公式,則 ∃ t(Φ) 也是公式。其中符號 ∃ 是存在量詞符號, ∃ t(Φ) 表示:
    若有一個 t 使 Φ 爲真,則 ∃ t(Φ) 爲真,否則 ∃ t(Φ) 爲假。

  4. 若 Φ 是公式,則 ∀ t( Φ ) 也是公式。其中符號 ∀ 是全稱量詞符號, ∀ t( Φ ) 表示:
    如果對所有 t ,都使 Φ 爲真,則 ∀ t( Φ ) 必爲真,否則 ∀ t( Φ ) 爲假。

  5. 在元組演算公式中,各種運算符的優先次序爲:
    ① 算術比較運算符最高;
    ② 量詞次之,且 ∃ 的優先級高於 ∀ 的優先級;
    ③ 邏輯運算符最低,且 ﹁ 的優先級高於 ∧ 的優先級, ∧ 的優先級高於 ∨ 的優先級;
    ④ 加括號時,括號中運算符優先,同一括號內的運算符之優先級遵循 ①②③ 各項。

  6. 有限次地使用上述五條規則得到的公式是元組關係演算公式,其他公式不是元組關係演算公式。
    一個元組演算表達式 {t|Φ(t)} 表示了使 Φ(t) 爲真的元組集合。
    關係代數的運算均可以用關係演算表達式來表示 ( 反之亦然 ) 。下面用關係演算表達式來表示五種基本運算:
    (1) 並

    R ∪ S = { t | R(t) ∨ S(t) }

    (2) 差

    R - S = { t | R(t) ∧ ﹁ S(t) }

    (3) 笛卡爾積

    R × S = { t (n+m) | ( ∃ u(n) )( ∃ v(n+m) )(R(u) ∧ S(v) ∧ t[1]=u[1] ∧ … ∧ t[n]=u[n] ∧ t[n+1]=v[1] ∧ … ∧ t[n+m]=v[m])}
    注: t (n+m) 表示 t 有目數 (n+m)

    (4) 投影

    π i1,i2,……,ik( R ) = {t(k) | ( ∃u )( R(u) ∧ t[1] = u[ i1 ] ∧ …… ∧ t[k] = u[ ik ] )}

    (5) 選擇

    σ F ®={ t | R(t) ∧ F }
    注: F 是公式。 F 用 t[i] 代替運算對象 i 得到的等價公式。

例子

圖2.4

  • 下面用關係演算來對圖2.4 學生-課程數據庫進行查詢。
    【例2.35】 查詢信息系 (IS 系 ) 全體學生:
    SIS ={Student(t) ∧ t[5]=‘IS’}
    【例2.36】 查詢年齡小於 20 歲的學生。
    S20 ={Student(t) ∧ t[4]<20}
    【例2.37】 查詢學生的姓名和所在系。
    S1={ t(2) | ( ∃u )( Student(u) ∧ t[1]=u[2] ∧ t[2]=u[5] ) }

  • 上面定義的關係演算允許出現無限關係。例如 { t | ﹁ R(t)} 表示所有不屬於 R 的元組 ( 元組的目數等於 R 的目數 ) 。要求出這些可能的元組是做不到的,所以必須排除這類無意義的表達式。把不產生無限關係的表達式稱爲安全表達式,所採取的措施稱爲安全限制。安全限制通常是定義一個有限的符號集 dom(Φ) , dom(Φ) 一定包括出現在 Φ 以及中間結果和最後結果的關係中的所有符號 ( 實際上是各列中值的彙集 ) 。 dom(Φ) 不必是最小集。

  • 當滿足下列條件時,元組演算表達式 {t|Φ(t)} 是安全的:
    ( 1 )如果 t 使 Φ(t) 爲真,則 t 的每個分量是 dom(Φ) 中的元素。
    ( 2 )對於 Φ 中每一個形如 ( ∃ t)(W(u)) 的子表達式,若 u 使 W(u) 爲真,則 u 的每個分量是 dom(Φ) 中的元素。
    ( 3 )對於 Φ 中每一個形如 ( ∀ t)(W(u)) 的子表達式,若 u 使 W(u) 爲假,則 u 的每個分量必屬於 dom(Φ) 。換言之,若 u 某一分量不屬於 dom(Φ) ,則 W(u) 爲真。

全文摘自《數據庫系統概論》2.5.2 元組關係演算;
爲了更好的對例題進行解釋,所以幾乎原汁原味的複製全文;
本文在原文的基礎上進行了一部分的格式修改,以便閱讀;

資料參考

  • 《數據庫系統概論》(第5版 編著:王珊 薩師煊)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章