官术网_书友最值得收藏!

3.2 關系演算

除了用關系代數表示關系運算外,還可以用謂詞演算來表達關系的運算,這稱為關系演算(relational calculus)。用關系代數表示關系的運算,須標明關系運算的序列,因而以關系代數為基礎的數據庫語言是過程語言。用關系演算表達關系的運算,只要說明所要得到的結果,而不必標明運算的過程,因而以關系演算為基礎的數據庫語言是非過程語言。目前,面向用戶的關系數據庫語言基本上都是以關系演算為基礎的。隨著所用變量不同,關系演算又可分為元組關系演算和域關系演算。

3.2.1 元組關系演算

元組關系演算(tuple relational calculus)是以元組為變量,其一般形式為:{t[〈屬性表〉]P(t)},其中:t是元組變量,即用整個t作為查詢對象,也可查詢t中的某些屬性。如查詢整個t,則可省去<屬性表>。P(t)是t應滿足的謂詞。

【例3-13】假設有關系STUDENT(學號,姓名,性別,出生年月,籍貫,地址,……)。要求用元組關系演算表達式查詢北京籍女大學生的姓名。

解:{t[姓名]|t∈STUDENT AND t. 性別=‘女’AND t. 籍貫=‘江蘇’}

另外,利用元組關系演算,還可以表達關系代數運算。關系代數的幾種運算可以用元組表達式表示如下。

1.投影

∏:設有關系模式R(ABC),r為R的一個值,則:∏AB(r)={t[AB]|t∈r}

2.選擇

仍用上述的關系,則:σF(r)={t|t∈r and F}

F是以t為變量的布爾表達式。其中,屬性變量以t.A形式表示。

3.并

設r、s是R(A,B,C)的兩個值,則:R∪S:可用{t|R(t)∨ S(t)}表示;

或{t|t∈R ORt∈S}

4.差

R-S:可用表示;或

5.連接

設有兩個關系模式R(A,B,C)和S(C,D,E),r、s分別為兩個關系中某個時刻的值,則:

r∞s={t(A,B,C,D,E)|t [A,B,C]∈ r AND t [C,D,E]∈s}

注意:謂詞中兩個t[C]同值,隱含等連接。

元組關系演算與關系代數具有同等表達能力,也是關系完備的。用謂詞演算表示關系操作時,只有結果是有限集才有意義。一個表達式的結果如果是有限的,則稱此表達式是安全的,否則是不安全的。否定常常會導致不安全的表達式,例如的結果不是有限的,是不安全的,因為現實世界中不屬于STUDENT的元組是無限多的。實際上,在計算上述表達式時,所感興趣的范圍既不是整個現實世界,也不是整個數據庫,而僅僅是關系STUDENT。若限制t取值的域,使t∈DOM(P),可將上式改寫成:{t|t∈ DOM(P)and}=DOM(P)-STUDENT,成為安全表達式。

3.2.2 域關系演算

域關系演算(domain relational calculus)是以域為變量,其一般形式為:

{〈X1,X2,……,Xn>|P(X1,X2,……,Xn,Xn+1,……,Xn+m)}

其中:X1,X2,……,Xn,Xn+1,……,Xn+m為域變量。且X1,X2,……,Xn出現在結果中,其他m個域變量不出現在結果中,但出現在謂詞P中。

域關系演算是QBE語言的理論基礎。

對關系GRADE(學號,課程號,成績),如果要查詢需補考的學生的學號和補考的課程號,此時查詢表達式:{<x,y>|(?z)(GRADE(x,y,z)AND z<60)}

GRADE(x,y,z)是一個謂詞,如果<x,y,z>是GRADE中的一個元組,則該謂詞為真。

注意:元組變量的變化范圍是一個關系;域變量的變化范圍是某個值域。

主站蜘蛛池模板: 资源县| 井陉县| 称多县| 鄂伦春自治旗| 恩施市| 宁都县| 边坝县| 台中县| 淳安县| 涪陵区| 平远县| 茂名市| 新巴尔虎左旗| 临武县| 日照市| 孟津县| 湘阴县| 四平市| 丘北县| 唐河县| 浦江县| 蒙自县| 云安县| 梅河口市| 乌鲁木齐市| 眉山市| 威海市| 岑溪市| 涟源市| 仙桃市| 安多县| 陆丰市| 威远县| 汶上县| 东光县| 祥云县| 定兴县| 山东| 香港| 金川县| 云南省|