MOOC 數據庫筆記(五):關係演算

關係演算

概述

(這部分的內容大多與離散數學有關,我沒有相關基礎,所以現在只是簡單看一下)
關係演算是以數理邏輯中的謂詞演算爲基礎的。
關係演算是描述關係運算的另一種思維方式。
SQL語言是繼承了關係代數和關係演算各自的優點所形成的。
按照謂詞變量的不同,可分爲關係元組演算和關係域演算:
關係元組演算是以元組變量作爲謂詞變量的基本對象。
關係域演算是以域變量作爲謂詞變量的基本對象。

關係元組演算

基本形式

關係元組演算公式的基本形式:
{t|P(t)}
上式表示:所有使謂詞P爲真的元組t的集合
t是元組變量
t∈r表示元組t在關係r中
t[A]表示元組t的分量,即t在屬性A上的值
P是與謂詞邏輯相似的公式,P(t)表示以元組t爲變量的公式

定義

P(t)遞歸定義:
關係元組演算的基本形式:{t|P(t)}
其中公式P(t)可以遞歸地進行構造:
三種形式的原子公式是公式:
s∈R、s[A]θc、s[A]θu[B]
如果P是公式,那麼┐P也是公式
如果P1,P2是公式,則P1∨P2,P1∧P2也是公式。
如果P(t)是公式,R是關係,則∃(t∈R)(P(t))和∀(t∈R)(P(t))也是公式。
需要時可加括弧
上述運算符的優先次序自高至底爲:括弧;θ;∀;∃;┐;∧;∨
公式只限於以上形式

存在量詞和全稱量詞∃∀

運算符∃∀,又稱爲量詞,前者稱“存在量詞”,後者稱“全稱量詞”
而被∃或∀限定的元組變量t,或者說,元組變量t前有存在量詞或全稱量詞,則該變量被稱爲“約束變量”,否則被稱爲“自由變量”。
例如:“檢索出年齡不是最小的所有同學”
{t|t∈Student∧∃(u∈Student)(t[Sage]>u[Sage])}

等價變換

P(t)公式,如謂詞演算一樣,也有一系列演算的等價性

關係域演算

基本形式

關係域演算公式的基本形式:{<x1,x2,...,xn>|P(x1,x2,...,xn)}
其中xi代表域變量或常量,P爲以xi爲變量的公式。

遞歸定義

公式P可以遞歸地進行構造:
·<x1, x2, …, xn>∈r,其中r爲n個屬性上的關係,x1, x2, …, xn爲域變量或域常量;
·x𝚯y,其中x和y爲域變量,𝚯爲比較運算符(要求屬性x和y所屬域可用𝚯比較);
·x𝚯c,其中x爲域變量,c是x作爲域變量的那個屬性域中的常量。
根據如下規則用原子構造公式:
·原子是公式;
·如果P1是公式,則¬P1和(P1)也都是公式;
·如果P1和P2是公式,則P1∨P2、P1∧P2和P1⇒P2也都是公式;
·如果P1(x)是包含自由域變量x的公式,則∃x(P1(x))和∀x(P1(x))也都是公式。

關係運算之安全性

"不產生無限關係和無窮驗證的運算被稱爲是安全的"
1.關係代數是一種集合運算,是安全的
集合本身是有限的,有限元素集合的有限次運算仍舊是有限的。
2.關係演算不一定是安全的
例如:{t|┐(R(t))},{t|R(t)∨t[2]>3}可能表示無限關係
再例如:(∃u)(P(u)),(∀u)(P(u))
前者稱爲“假驗證”,因爲其要驗證所有元素是否爲假,後者稱爲“真驗證”,因爲其要驗證所有元素是否爲真。這樣可能就存在了無窮驗證。

安全約束有限集合

需要對關係演算施加約束條件,即任何公式都在一個集合範圍內操作,而不是無限範圍內操作,才能保證其安全性。
DOM(ρ)是一個有限集合,其中每個符號要麼是ρ明顯出現的符號,要麼是出現在ρ中的某個關係R的某元組的分量。
DOM主要用於約束ρ中一些謂詞的計算範圍,它不必是最小集合。

關於三種關係運算的一些觀點

關係運算有三種:關係代數、關係元組演算和關係域演算

三種關係運算都是抽象的數學運算,體現了三種不同的思維
關係代數--以集合爲對象的操作思維,由集合到集合的變換。
元組演算--以元組爲對象的操作思維,取出關係的每一個元組進行驗證,有一個元組變量則可能需要一個循環,多個元組變量則需要多個循環。
域演算--以域變量爲對象的操作思維,取出域的每一個變量進行驗證看其是否滿足條件。

三種運算之間是等價的

關係代數與安全的元組演算表達式與安全的域演算表達式是等價的。即一種形式的表達式可以被等價地轉換爲另一種形式。

三種關係運算都可說是非過程性的

相比之下:域演算的非過程性最好,元組演算次之,關係代數最差。

三種關係運算雖然是抽象的,但卻是衡量數據庫語言完備性的基礎:

一個數據庫語言如果能夠等價地實現這三種運算的操作,則說該語言是完備的。
目前多數數據庫語言都能夠實現這三種運算的操作,在此基礎上還增加了許多其他的操作,如賦值操作、聚集操作等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章