第二部分 - 關(guān)系模型與語(yǔ)言 - 5 - 關(guān)系演算

在關(guān)系代數(shù)表達(dá)式中,一般都顯式指定一個(gè)計(jì)值順序岁忘,它隱含著執(zhí)行查詢的策略。在關(guān)系演算中区匠,不描述查詢執(zhí)行策略干像,即關(guān)系演算表達(dá)查詢只說(shuō)明要什么,不說(shuō)明如何得到它驰弄。

關(guān)系演算跟數(shù)學(xué)中的微積分無(wú)關(guān)麻汰,而是根據(jù)符號(hào)邏輯中的一個(gè)分支—— 謂詞演算 命名的。在數(shù)據(jù)庫(kù)中戚篙,它有兩種形式:由 Codd(1972a)首先提出的元組關(guān)系演算五鲫,由 Lacroix 和 Pirotte(1977)提出的 關(guān)系演算。

在一階邏輯或謂詞演算中岔擂,謂詞是一個(gè)帶參數(shù)的真值函數(shù)位喂。如果把參數(shù)值帶入,這個(gè)函數(shù)就會(huì)變成一個(gè)表達(dá)式乱灵,稱(chēng)為 命題塑崖,它非真即假。例如痛倚,“John White 是一名員工” 和 “John White 的收入高于 Ann Beech” 這兩個(gè)語(yǔ)句都是命題规婆,因此可以確定他們是真還是假。在第一個(gè)例子里蝉稳,函數(shù)為 “是一名員工”抒蚜,帶有一個(gè)參數(shù)(John White);在第二個(gè)例子中耘戚,函數(shù)為 “收入高于”削锰,它有兩個(gè)參數(shù)(John White 和 Ann Beech)。

如果某個(gè)謂詞包含一個(gè)變量毕莱,比如,“x 是一名員工”,那么就一定有一個(gè)與 x 相關(guān)聯(lián)的 論域(range)朋截。當(dāng)我們把該論域中的某些值賦給 x 時(shí)蛹稍,命題可能為真;而對(duì)于另一些值部服,命題則可能為假唆姐。例如,論域是所有人的集合廓八,若將 John White 帶入 x奉芦,則命題 “John White 是一名員工” 為真。若將某個(gè)非員工的人名帶入剧蹂,則命題為假声功。

假設(shè) P 是一個(gè)謂詞,那么所有使 P 為真得 x 的集合就可以表示成:


可以用邏輯連詞與宠叼,或先巴,非連接謂詞形成符合謂詞。

1. 元組關(guān)系演算

在元組關(guān)系演算中冒冬,我們感興趣的是找出所有使謂詞為真得元組伸蚯。這種演算是基于 元組變量 的。元組變量是 “定義于” 某個(gè)命名關(guān)系上的變量简烤,即該變量的論域僅限于這個(gè)關(guān)系中的元組(“論域” 這個(gè)詞在這里不是指數(shù)學(xué)中的值域剂邮,而是定義域)。例如横侦,指定元組變量 S 的范圍為關(guān)系 Staff挥萌,就寫(xiě)成:

要表示 “找出所有使 F(S) 為真得元組 S 構(gòu)成的集合” 這樣一個(gè)查詢,可以表示為:

F 稱(chēng)為 公式(在數(shù)理邏輯中稱(chēng)為 合式公式wff)丈咐。例如瑞眼,要表示查詢 “列出收入高于 10000 英鎊的所有員工的 staffNo、fName棵逊、lName伤疙、position、sex辆影、DOB徒像、salary 及 branchNo”,可以寫(xiě)成:

S.salary 代表元組變量 S 在 salary 屬性上的取值蛙讥。如果想獲取某個(gè)特定的屬性锯蛀,如 salary,就可以寫(xiě)成:

存在量詞與全稱(chēng)量詞

可以在公式中使用兩個(gè)量詞來(lái)說(shuō)明謂詞將作用在多少個(gè)實(shí)例上次慢。

存在量詞 “?”(表 “存在”)在公式中說(shuō)明至少有一個(gè)實(shí)例使謂詞為真旁涤,例如:

表示 “在 Branch 中存在一個(gè)元組翔曲,它在 branchNo 上的取值與 Staff 的元組 S 在 branchNo 上的取值相同而且對(duì)應(yīng)的分公司位于倫敦”。

全稱(chēng)量詞 “?”(表示 “對(duì)于所有的”)在公示中說(shuō)明每個(gè)實(shí)例都必須滿足這個(gè)謂詞劈愚,例如:

表示 “Branch 中的所有分公司都不再巴黎”瞳遍。可以將德·摩根定律推廣到存在量詞和全稱(chēng)量詞菌羽。例如:





利用這些等價(jià)規(guī)則掠械,可以把前面的公式寫(xiě)成:


表示 “巴黎沒(méi)有分公司”。

受 “?” 或 “?” 約束的元組變量稱(chēng)為 約束變量注祖,反之猾蒂,其他的元組變量則成為 自由變量。在關(guān)系演算表達(dá)式中是晨,只有那些在豎線(|)左邊出現(xiàn)的變量是自由變量肚菠。

表達(dá)式和公式

正如并不是任意排列的英文字母序列都可以構(gòu)成一個(gè)結(jié)構(gòu)正確的詞語(yǔ)一樣,也不是每一個(gè)演算公式序列都可以被接受署鸡。公式序列必須是無(wú)歧義且有意義的案糙。元組關(guān)系演算中的一個(gè)表達(dá)式必須具有下面所示的一般形式:

其中,S1靴庆,S2时捌,...,Sn炉抒,...奢讨,Sm 代表元組變量,每個(gè) ai 是元組變量 Si的論域關(guān)系的一個(gè)屬性焰薄,F(xiàn) 為公式拿诸。一個(gè)(合式)公式包括一個(gè)或多個(gè)原子公式,原子公式可以有下面幾種形式:

  • R(Si)塞茅,其中 Si 是一個(gè)元組變量亩码,R 是一個(gè)關(guān)系。
  • Si.a1 θ Sj.a2野瘦,其中 Si 和 Sj 為元組變量描沟,a1 是元組變量 Si 的論域關(guān)系的一個(gè)屬性,a2 是元組變量 Sj 的論域關(guān)系的一個(gè)屬性鞭光,θ 是比較運(yùn)算符中的一個(gè)吏廉。屬性 a1 和 a2 的值必須可進(jìn)行 θ 比較。
  • Si.a1 θ c惰许,其中 Si 是一個(gè)元組變量席覆,a1 是元組變量 Si 論域關(guān)系的一個(gè)屬性,c 是屬性 a1 對(duì)應(yīng)域內(nèi)的一個(gè)常數(shù)汹买,θ 是一個(gè)比較運(yùn)算符佩伤。

可以根據(jù)下面的規(guī)則聊倔,遞歸的構(gòu)造出公式:

  • 原子公式是公式。
  • 如果 F1 和 F2 是公式畦戒,則它們的合取 F1 ∧ F2 方库、析取 F1 ∨ F2,以及取非 ~ F1 也是公式障斋。
  • 如果 F 是帶自由變量 X 的公式,則(?X)(F) 和 (?X)(F) 也是公式徐鹤。

表達(dá)式的安全性

另外還需要說(shuō)明的是垃环,演算表達(dá)式可以生成一個(gè)無(wú)窮集。例如:

表示不在 Staff 關(guān)系中的所有元組返敬。將這樣的表達(dá)式稱(chēng)為 不安全表達(dá)式遂庄。為了避免這種情況的出現(xiàn),必須加一個(gè)約束劲赠,在結(jié)果中出現(xiàn)的所有值必須在表達(dá)式 E 的域內(nèi)涛目,表示成 dom(E)。換句話說(shuō)凛澎,E 的域包括所有顯式出現(xiàn)在 E 中的值和所有在 E 中出現(xiàn)的關(guān)系中的值霹肝。上例中,表達(dá)式的域就是所有出現(xiàn)在關(guān)系 Staff 中的值塑煎。

當(dāng)結(jié)果中出現(xiàn)的所有值都在表達(dá)式的域內(nèi)時(shí)沫换,這個(gè)表達(dá)式就是 安全 的。上面的表達(dá)式是不安全的最铁,原因就在于它包括了 Staff 關(guān)系之外的元組(因此超出了表達(dá)式的域)讯赏。本文中所給出的其他元組演算表達(dá)式都是安全的。一些人用獨(dú)立的 RANGE 語(yǔ)句來(lái)定義變量的論域冷尉,以避免這個(gè)問(wèn)題的出現(xiàn)漱挎。

2. 域關(guān)系演算

在元組關(guān)系演算中,使用了定義在關(guān)系上的元組變量雀哨。在域關(guān)系演算中磕谅,同樣也要用到變量,但它的論域不再是關(guān)系中的元組震束,而是屬性的域怜庸。域關(guān)系演算中的表達(dá)式具有下面的一般形式:


其中,d1垢村,d2割疾,...,dn嘉栓,...宏榕,dm代表域變量拓诸,F(xiàn)(d1,d2麻昼,...奠支,dm) 代表由某些原子公式組成的公式,原子公式可以有以下幾種形式:

  • R(d1抚芦,d2倍谜,...,dn)叉抡,其中 R 是維數(shù)為 n 的關(guān)系尔崔,di 為域變量。
  • di θ dj褥民,其中 di 和 dj 代表域變量季春,θ 是比較運(yùn)算符中的一個(gè)。di 和 dj 對(duì)應(yīng)域的值必須可進(jìn)行 θ 比較消返。
  • di θ c载弄,其中 di 是域變量,c 是 di 對(duì)應(yīng)域中的一個(gè)常數(shù)撵颊,θ 是某個(gè)比較運(yùn)算符宇攻。

可以根據(jù)下面的規(guī)則,用原子公式遞歸的構(gòu)造出公式:

  • 原子公式是公式秦驯。
  • 如果 F1 和 F2 是公式尺碰,則它們的合取 F1 ∧ F2 、析取 F1 ∨ F2译隘,以及取非 ~ F1 也是公式亲桥。
  • 如果 F 是帶自由變量 X 的公式,則(?X)(F) 和 (?X)(F) 也是公式固耘。

當(dāng)把域關(guān)系演算限制為安全表達(dá)式時(shí)题篷,它就等價(jià)于安全的元組關(guān)系演算,而這種元組關(guān)系演算又等價(jià)于關(guān)系代數(shù)厅目。這就意味著番枚,每個(gè)關(guān)系代數(shù)表達(dá)式都存在一個(gè)與之等價(jià)的關(guān)系演算表達(dá)式,反過(guò)來(lái)损敷,每個(gè)元組或者域關(guān)系演算表達(dá)式都存在一個(gè)與之等價(jià)的關(guān)系代數(shù)表達(dá)式葫笼。

3. 其他語(yǔ)言

雖然關(guān)系演算難于理解與使用,但其非過(guò)程性令人滿意拗馒,因此人們開(kāi)始尋求更易于使用的非過(guò)程化技術(shù)路星。這導(dǎo)致了另外兩類(lèi)關(guān)系語(yǔ)言的出現(xiàn):面向轉(zhuǎn)換的語(yǔ)言和圖形化語(yǔ)言。

面向轉(zhuǎn)換的語(yǔ)言(transform-oriented language):是一種非過(guò)程語(yǔ)言 诱桂,它利用關(guān)系將輸入數(shù)據(jù)轉(zhuǎn)換成期望的輸出洋丐。這種語(yǔ)言提供了一種易于使用的結(jié)構(gòu)呈昔,可以很容易的根據(jù)已知的內(nèi)容表述出所期望的結(jié)果。SQUARE(Boyce et al.友绝,1975)堤尾、SEQUEL(Chamberin et al.,1976)以及 SEQUEL 的后繼產(chǎn)品 SQL 語(yǔ)言都是面向轉(zhuǎn)換的語(yǔ)言迁客。

圖形化語(yǔ)言(graphical language):給用戶提供了關(guān)系結(jié)構(gòu)的一種圖解說(shuō)明郭宝。用戶在一個(gè)實(shí)例中填入想要的輸出,系統(tǒng)則以這種格式返回所需的數(shù)據(jù)哲泊。QBE(舉例查詢)就是圖形化語(yǔ)言(Zloof剩蟀,1977)的一個(gè)范例。

還有一類(lèi)稱(chēng)為 第四代語(yǔ)言(4GL)切威,它允許用戶使用一個(gè)受限的命令集來(lái)創(chuàng)建完整的用戶應(yīng)用,這個(gè)命令集對(duì)用戶十分友好丙号,通常為菜單驅(qū)動(dòng)的環(huán)境先朦。某些系統(tǒng)還能接受自然語(yǔ)言,比如受限的英語(yǔ)犬缨。這類(lèi)語(yǔ)言常稱(chēng)為 第五代語(yǔ)言(5GL)喳魏,它們的發(fā)展仍處于起步階段。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末怀薛,一起剝皮案震驚了整個(gè)濱河市刺彩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌枝恋,老刑警劉巖创倔,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異焚碌,居然都是意外死亡畦攘,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)十电,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)知押,“玉大人,你說(shuō)我怎么就攤上這事鹃骂√ǘⅲ” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵畏线,是天一觀的道長(zhǎng)静盅。 經(jīng)常有香客問(wèn)我,道長(zhǎng)象踊,這世上最難降的妖魔是什么温亲? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任棚壁,我火速辦了婚禮,結(jié)果婚禮上栈虚,老公的妹妹穿的比我還像新娘袖外。我一直安慰自己,他們只是感情好魂务,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布曼验。 她就那樣靜靜地躺著,像睡著了一般粘姜。 火紅的嫁衣襯著肌膚如雪鬓照。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,301評(píng)論 1 301
  • 那天孤紧,我揣著相機(jī)與錄音豺裆,去河邊找鬼。 笑死号显,一個(gè)胖子當(dāng)著我的面吹牛臭猜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播押蚤,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼蔑歌,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了揽碘?” 一聲冷哼從身側(cè)響起次屠,我...
    開(kāi)封第一講書(shū)人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎雳刺,沒(méi)想到半個(gè)月后劫灶,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡煞烫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年浑此,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滞详。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡凛俱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出料饥,到底是詐尸還是另有隱情蒲犬,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布岸啡,位于F島的核電站原叮,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜奋隶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一擂送、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧唯欣,春花似錦嘹吨、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至萍聊,卻和暖如春问芬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背寿桨。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工此衅, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人亭螟。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓炕柔,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親媒佣。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容