1. 程式人生 > >數據庫 元組關系演算

數據庫 元組關系演算

width 無限 每一個 邏輯 n) 變量 分享圖片 現在 謂詞

元組關系演算

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


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


在元組關系演算系統中,稱 {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 。

在關系演算中定義了 “ 自由元組變量 ” 和 “ 約束元組變量 ” 的概念。這些概念和謂詞演算中的概念完全一樣。若公式中的一個元組變量前有 “ 全稱量詞 ” 或 “ 存在量詞 ” ,則稱該變量為約束元組變量,否則稱自由元組變量。

公式可以遞歸定義如下:

(l) 每個原子公式是公式。
(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 (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) 投影

π t1,t2,...,tk (R)={t (k) |( ? u )(R(u) ∧ t[1]=u[i1] ∧ ...t[k]=u[ik] )}

(5) 選擇

σ F (R)={t|R(t) ∧ F}

註: F 是公式。 F 用 t[i] 代替 運 算 對 象 i 得到的等價公式。

例 1 查詢信息系 (IS 系 ) 全體學生:
S IS ={Student(t) ∧ t[5]=‘IS‘}
例 2 查詢年齡小於 20 歲的學生。
S 20 ={Student(t) ∧ t[4]<20}

例 3 查詢學生的姓名和所在系。
S={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) 為真。

例 4 設有關系 R 如圖 2.8(a) , S={t| ﹁ R(t)} ,若不進行安全限制,則可能是一個無限關系。所以定義

dom(Φ)= π A (R) ∪ π B (R) ∪ π C (R)

={{a1,a2},{b1,b2},{c1,c2}}


則 S 是 dom(Φ) 中各域值中元素的笛卡兒積與 R 的差集。結果如圖 2.8(b) 。註意,在做笛卡兒積時各個域中的元素不能搞混。

技術分享圖片

附:其他類型舉例:

-----------------------------------------------------------------------------------------

1 、下列等式中恒等的是:

① π A1,A2 ( σ F (E))≡ σ F ( π A1,A2 (E))

② σ F (E 1 × E 2 )≡ σ F (E 1 ) ×σ F (E 2 )

③ σ F (E 1 -E 2 )≡ σ F (E 1 )- σ F (E 2 )

④ π A1,A2,B1,B2 (E技術分享圖片E)≡ π A1,A2 (E) 技術分享圖片π B1,B2 (E)

① 當 F 包含 A1,A2 以外的限制 時 ,不恒等

② 當 F 包含大於 E1( 或 E2) 個數 的限制 時 ,不恒等

③ 恒等

④ 等式不可能成立,右 邊沒 有相同 屬 性

2 、以下元 組 的意 義 :

{t|( ? u)((R(u) ∨ S(u)) ∧ ( ? v)(T(v)→( ? w)((R(w) ∨ S(w)) ∧ w[1]=u[1] ∧ w[2]=v[1] ∧ w[3]=v[2])) ∧ t[1]=u[1]}

據 說 是表示 R ∪ S ÷ T 的意思,但是我 實 在是看不 懂 。

3 、以下元 組 表 達 式 轉換為關 系代 數 表 達 式

{t| ? u ? v(R(u) ∧ S(v) ∧ u[3]=v[1] ∧ u[4]=v[2] ∧ u[1]>v[3] ∧ t[1]=u[2])}

其中 R(A,B,C,D) S(C,D,E)

關 系代 數 表 達 式 為 : π B ( σ A>E (R技術分享圖片S))

4 、把下列 關 系代 數 表 達 式 轉換為 元 組 表 達 式

π 1,4 (R技術分享圖片S)

其中 R(A,B,C) S(B,D)

元 組 演算表 達 式 為 : {t| ? u ? v(R(u) ∧ S(v) ∧ u[2]=v[1] ∧ t[1]=u[1] ∧ t[2]=v[2])}

5 、 關 系代 數 表 達 式 → 元 組 演算表 達 式

π 1,5,6 ( σ 1>5 (R×S)) -- 註意中 間 是乘法不是自然 連 接

其中 R(A,B,C) S(A,B,C)

{t| ? u ? v(R(u) ∧ S(v) ∧ u[1]>v[2] ∧ t[1]=u[1] ∧ t[2]=v[2] ∧ t[3]=v[3])}

6 、下列 查詢 效率最高的一 組 是:

① E1= π A,D ( σ B<‘2007‘ ∧ R.C=S.C ∧ E=‘80‘ (R × S))

② E2= π A,D ( σ R.C=S.C ( σ B<‘2007‘ (R) ×σ E=‘80‘ (S)))

③ E3= π A,D ( σ B<‘2007‘ (R) 技術分享圖片σ E=‘80‘ (S))

④ E4= π A,D ( σ B<‘2007‘ ∧ E=‘80‘ (R技術分享圖片S))

答案是 ③ ,很明 顯 自然 連 接要 優 於笛卡爾 積 ,先 運 算再投影 優 於 先投影再 計 算

再分享一下我老師大神的人工智能教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智能的隊伍中來!https://blog.csdn.net/jiangjunshow

數據庫 元組關系演算