關(guān)系模型和關(guān)系運(yùn)算
3.1 關(guān)系模型的基本概念
關(guān)系模型:用稱為關(guān)系的二維表來表示數(shù)據(jù),其數(shù)據(jù)模型就稱為關(guān)系模型。二維表的行稱為元組,列以屬性開頭,對(duì)于每個(gè)屬性,都有元組的一個(gè)分量與之對(duì)應(yīng)。(例如P39圖3.1)
3.1.1 屬性:屬性就是關(guān)系的標(biāo)題欄中各列的名字,描述了該列各數(shù)據(jù)項(xiàng)的含義。
3.1.2 模式:關(guān)系的名稱和關(guān)系的屬性集稱為關(guān)系的模式。
例:stud--ent(StudentNo,StudentName,Age,Dept)
3.1.3 元組:除了關(guān)系的標(biāo)題欄外,其他各行統(tǒng)稱為“元組”。
元組和對(duì)象的聯(lián)系和區(qū)別:可以認(rèn)為一個(gè)元組就表示一個(gè)對(duì)象,而元組所屬的關(guān)系就表示對(duì)象所屬的類。對(duì)象具有同一性,而元組沒有。
3.1.4 域:
關(guān)系模型要求每個(gè)元組的每個(gè)分量都是原子的,即必須屬于某種基本類型,假設(shè)與關(guān)系的每個(gè)屬性相關(guān)的特定基本類型稱為“域”,那么關(guān)系的任何元組的每個(gè)分量都必須在對(duì)應(yīng)列的域中取值。
3.1.5 關(guān)系的等價(jià)表示法
我們可以重新排和列,而關(guān)系并不改變。
3.1.6 關(guān)系的實(shí)例
給定關(guān)系中元組的集合稱為該關(guān)系的“實(shí)例”。
3.2 從ODL設(shè)計(jì)到關(guān)系設(shè)計(jì)
先用ODL或者E/R圖來進(jìn)行數(shù)據(jù)庫(kù)設(shè)計(jì),再將該設(shè)計(jì)轉(zhuǎn)換成關(guān)系模型。為什么非要把一步能完成的事情轉(zhuǎn)換成兩步?(P41)
3.2.1 從ODL屬性到關(guān)系屬性
若類的所有特性都是屬性,而不是聯(lián)系或者方法,并且屬性都是原子類型。在這種情況下,對(duì)類建立對(duì)應(yīng)的關(guān)系,類的第個(gè)屬性對(duì)應(yīng)于該關(guān)系的一個(gè)屬性。而要把類中的對(duì)轉(zhuǎn)換成元組,只需把該對(duì)象在類的四個(gè)屬性上的取值作為元組的分量即可。
3.2.2 類中的非原子屬性
1) 如果某屬性是多個(gè)值的集合,則針對(duì)每個(gè)值建立一個(gè)元組。(例P42圖3.4)
2) 如果某屬性的類型是定長(zhǎng)的數(shù)組,則在關(guān)系中用帶有數(shù)組和下標(biāo)的屬性來表示類中的數(shù)組類型的屬性。(例P43圖3.5)
3.2.3 單值聯(lián)系的表示
方法:只需要建立相關(guān)類中構(gòu)成鍵碼的屬性集就可以表示相關(guān)類的對(duì)象。(例P44圖3.6)
3.2.4 多值聯(lián)系的表示
方法:首先,和單值聯(lián)系一樣,要找出表示每個(gè)相關(guān)對(duì)象的鍵碼;其次,和表示集合類型的屬性一樣,為相關(guān)對(duì)象集合的每個(gè)元素建立一個(gè)元組。(例P44圖3.7)
缺點(diǎn):數(shù)據(jù)冗余大。
3.2.5 聯(lián)系與反向聯(lián)系的表示
同一樣聯(lián)系,無(wú)須兩者都表示出來,只要在其中一個(gè)地方表示就可以了。
3.2.6 ODL子類的表示
原則:1)每個(gè)子類都對(duì)應(yīng)于一個(gè)關(guān)系;
2) 這個(gè)關(guān)系用相應(yīng)子類的所有特性(包括從超類繼承下來的全部特性)來表示。
3.3 從E/R圖到關(guān)系設(shè)計(jì)

E/R與ODL主要有以下區(qū)別:
1) 在E/RL圖中,聯(lián)系作為獨(dú)立的概念存在,而不是像ODL那樣作為特性嵌套在類定義中,這有助于避免數(shù)據(jù)冗余。
2) 在ODL中,屬性可能是任意的聚集類型,比如集合;而在E/R圖中,雖然并沒有嚴(yán)格規(guī)定允許使用的數(shù)據(jù)類型,但通常都認(rèn)為允許使用結(jié)構(gòu)化的數(shù)據(jù),而不允許使用集合或者其他聚集類型的數(shù)據(jù)。
3) 在E/R圖中,聯(lián)系可以具有屬性,而ODL中沒有相應(yīng)的概念。
3.3.1 實(shí)體集到關(guān)系的轉(zhuǎn)換
直接把E/R圖中的屬性對(duì)應(yīng)成相應(yīng)的屬性。(例P46圖3.8、圖3.9)
3.3.2 E/R聯(lián)系到關(guān)系的轉(zhuǎn)換
對(duì)于一個(gè)聯(lián)系R,它所對(duì)應(yīng)的關(guān)系應(yīng)該具有如下屬性:一是聯(lián)系R所涉及到的每個(gè)實(shí)體集的鍵碼屬性(集),二是R本身的屬性。
從E/R圖轉(zhuǎn)換到關(guān)系模式比從ODL轉(zhuǎn)換到關(guān)系模式的優(yōu)點(diǎn):在ODL中,雙向ODL聯(lián)系會(huì)帶來大量數(shù)據(jù)冗余;而從E/R圖出發(fā),用單個(gè)的關(guān)系就可以表示雙向的聯(lián)系。
3.3.3 “屬于”聯(lián)系到關(guān)系的轉(zhuǎn)換
新建立的關(guān)系的屬性包括被屬于的實(shí)體集的鍵碼及相應(yīng)實(shí)體集的屬性。
3.4 關(guān)系代數(shù)(p47—p54)
關(guān)系代數(shù):是以代數(shù)的形式對(duì)關(guān)系模式進(jìn)行查詢的一種語(yǔ)方,其中要運(yùn)算并、交、差、選擇、投影、笛卡兒積、自然連接、θ連接和改名。綜合使用這些運(yùn)算可以表達(dá)各種各樣的查詢要求。
3.4.1 關(guān)系的集合運(yùn)算:并、交、差
關(guān)系R和S必須滿足條件:1)兩者的模式具有相同的屬性集;
2) 對(duì)兩者進(jìn)行集合運(yùn)算之前,要對(duì)兩者的屬性列進(jìn)行排序,保證兩個(gè)關(guān)系的屬性順序相同。
運(yùn)算定義如下:
1) R∪S,是R中的元素和S中的元素共同組成的集合。
2) R∩S,是既出現(xiàn)在R中又出現(xiàn)在S中的元素組成的集合。
3) R—S,是只在R中出現(xiàn),不在S中出現(xiàn)的元素組成的集合。
3.4.2投影
該運(yùn)算作用于關(guān)系R將產(chǎn)生一個(gè)新關(guān)系S,S只具有R的某幾個(gè)屬性列。
3.4.3 選擇
該運(yùn)算作用于關(guān)系R也將產(chǎn)生一個(gè)新關(guān)系S,S的元組集合是R的一個(gè)滿足某條件C的子集。
3.4.4 笛卡兒積
R X S,其關(guān)系模式是R和S的模式的并集,是R和S的元組以所有可能的方式組合起來。當(dāng)R和S有同名的屬性,至少要為其中一個(gè)屬性重新命名。
3.4.5 自然連接
其關(guān)系模式是R和S模式的并集。假設(shè)A1、A2、……An是R和S的模式中的公共屬性,那么如果R的元組r和S的元組s在這些屬性上取值都相同,r和s組合而成的元組就歸入該自然連接中。
3.4.6 θ連接
先將R和S笛卡兒積,然后從R XS的元組中選擇滿足條件C的元組集合。
3.4.7 改名
1)只改關(guān)系名
2)不僅該關(guān)系名,且改屬性名
3.4.8 復(fù)合運(yùn)算
3.4.9 基本運(yùn)算和導(dǎo)出運(yùn)算
除了交、θ連接、自然連接這三種運(yùn)算可由其他運(yùn)算導(dǎo)出外,另外六種運(yùn)算——并、選擇、投影、笛卡兒積和改名都是基本運(yùn)算,每一種都不能由另外五種運(yùn)算導(dǎo)出。
3.5關(guān)系演算
關(guān)系演算:把數(shù)理邏輯中的謂詞演算應(yīng)用到關(guān)系中,就是所謂的關(guān)系演算。在關(guān)系演算中,以元組為變量稱為元組關(guān)系演算,而以域?yàn)樽兞?,則稱為域關(guān)系演算。關(guān)系代數(shù)中的8種運(yùn)算都可用元組關(guān)系演算表達(dá)式來表達(dá),用關(guān)系演算表達(dá)查詢時(shí),還常用到存在量詞不達(dá)意和全稱量詞。
3.5.1 元組關(guān)系演算
什么是原子公式?公式是定義?運(yùn)算符的優(yōu)先級(jí)?
1、 交
2、 并
3、 差
4、 選擇
5、 投影
6、 笛卡兒積
7、 自然連接
8、 θ連接
9、 復(fù)雜的關(guān)系代數(shù)表達(dá)式
3.5.2 域關(guān)系演算
元組關(guān)系演算的表達(dá)式中用的是元組變量,而域關(guān)系演算表達(dá)式中用的是元組分量的變量,簡(jiǎn)稱為域變量。
3.6 關(guān)系邏輯
關(guān)系邏輯:是以邏輯的形式對(duì)關(guān)系模型進(jìn)行查詢的一種語(yǔ)言,具體用的查詢語(yǔ)言稱為數(shù)據(jù)邏輯。在數(shù)據(jù)邏輯中,用規(guī)則來表達(dá)查詢。規(guī)則主要由稱為部關(guān)系原子和含有一個(gè)或多個(gè)原子的體組成。體中的原子稱為子目標(biāo),既可以是關(guān)系原子,也可以是算術(shù)原子。關(guān)系代數(shù)中的8種運(yùn)算也都能用數(shù)據(jù)邏輯規(guī)則來表達(dá)。總之,關(guān)系代數(shù)、關(guān)系演算和關(guān)系邏輯完全等價(jià)。
3.6.1 謂詞和原子
3.6.2 規(guī)則和查詢
3.6.3 從關(guān)系代數(shù)到數(shù)據(jù)邏輯
1、交
2、并
3、差
4、選擇
5、投影
6、笛卡兒積
7、自然連接
8、θ連接
10、 復(fù)雜的關(guān)系代數(shù)表達(dá)式
愛華網(wǎng)

