什么是關(guān)系運(yùn)算
關(guān)系的基本運(yùn)算有兩類:一類是傳統(tǒng)的集合運(yùn)算(并、差、交等),另一類是專門的關(guān)系運(yùn)算(選擇、投影、聯(lián)接等),有些查詢需要幾個(gè)基本運(yùn)算的組合,要經(jīng)過若干步驟才能完成。
一、傳統(tǒng)的集合運(yùn)算
1、并(UNION) 設(shè)有兩個(gè)關(guān)系R和S,它們具有相同的結(jié)構(gòu)。R和S的并是由屬于R或?qū)儆赟的元組組成的集合,運(yùn)算符為∪。記為T=R∪S。
2、差(DIFFERENCE) R和S的差是由屬于R但不屬于S的元組組成的集合,運(yùn)算符為-。記為T=R-S。
3、交(INTERSCTION) R和S的交是由既屬于R又屬于S的元組組成的集合,運(yùn)算符為∩。記為T=R∩S。 R∩S=R-(R-S)。
二、選擇運(yùn)算
從關(guān)系中找出滿足給定條件的那些元組稱為選擇。其中的條件是以邏輯表達(dá)式給出的,值為真的元組將被選取。這種運(yùn)算是從水平方向抽取元組。 在FOXPRO中的短語FOR<條件>和WHILE<條件>均相當(dāng)于選擇運(yùn)算。
如:LIST FOR 出版單位='高等教育出版社' AND 單價(jià)<=20
三、投影運(yùn)算
從關(guān)系模式中挑選若干屬性組成新的關(guān)系稱為投影。這是從列的角度進(jìn)行的運(yùn)算,相當(dāng)于對(duì)關(guān)系進(jìn)行垂直分解。在FOXPRO中短語FIELDS<字段1,字段2,…>相當(dāng)于投影運(yùn)算。 如: LIST FIELDS 單位,姓名
四、聯(lián)接運(yùn)算
選擇和投影運(yùn)算都是屬于一目運(yùn)算,它們的操作對(duì)象只是一個(gè)關(guān)系。聯(lián)接運(yùn)算是二目運(yùn)算,需要兩個(gè)關(guān)系作為操作對(duì)象。
1、聯(lián)接 聯(lián)接是將兩個(gè)關(guān)系模式通過公共的屬性名拼接成一個(gè)更寬的關(guān)系模式,生成的新關(guān)系中包含滿足聯(lián)接條件的元組。運(yùn)算過程是通過聯(lián)接條件來控制的,聯(lián)接條件中將出現(xiàn)兩個(gè)關(guān)系中的公共屬性名,或者具有相同語義、可比的屬性。聯(lián)接是對(duì)關(guān)系的結(jié)合。在FOXPRO中有單獨(dú)一條命令JOIN實(shí)現(xiàn)兩個(gè)關(guān)系的聯(lián)接運(yùn)算。如:
SELE 1
USE 定單
SELE 2
USE 商品
JOIN WITH A TO XGX FOR A->貨號(hào)=貨號(hào) AND 庫存量>=A->定購量
設(shè)關(guān)系R和S分別有m和n個(gè)元組,則R與S的聯(lián)接過程要訪問m×n個(gè)元組。由此可見,涉及到聯(lián)接的查詢應(yīng)當(dāng)考慮優(yōu)化,以便提高查詢效率。
2、自然聯(lián)接 自然聯(lián)接是去掉重復(fù)屬性的等值聯(lián)接。它屬于聯(lián)接運(yùn)算的一個(gè)特例,是最常用的聯(lián)接運(yùn)算,在關(guān)系運(yùn)算中起著重要作用。
如果需要兩個(gè)以上的關(guān)系進(jìn)行聯(lián)接,應(yīng)當(dāng)兩兩進(jìn)行。利用關(guān)系的這三種專門運(yùn)算可以方便地構(gòu)造新的關(guān)系。
五、外關(guān)鍵字
如果一個(gè)關(guān)系中的屬性或?qū)傩越M并非該關(guān)系的關(guān)鍵字,但它們是另外一個(gè)關(guān)系的關(guān)鍵字,則稱為該關(guān)系的外關(guān)鍵字。
綜上所述,關(guān)系數(shù)據(jù)庫系統(tǒng)有如下特點(diǎn):
(1)數(shù)據(jù)庫中的全部數(shù)據(jù)及其相互聯(lián)系都被組織成關(guān)系,即二維表的形式。
(2)關(guān)系數(shù)據(jù)庫系統(tǒng)提供一種完備的高級(jí)關(guān)系運(yùn)算,支持對(duì)數(shù)據(jù)庫的各種操作。
(3)關(guān)系模型有嚴(yán)格的數(shù)學(xué)理論,使數(shù)據(jù)庫的研究建立在比較堅(jiān)實(shí)的數(shù)學(xué)基礎(chǔ)上。
什么是關(guān)系完整性約束?其主要包括那些內(nèi)容?
關(guān)系完整性是為保證數(shù)據(jù)庫中數(shù)據(jù)的正確性和相容性:對(duì)關(guān)系模型提出的某種約束條件或規(guī)則,完整性通常包括實(shí)體完整性,參照完整性和用戶定義完整性(又稱域完整性其中實(shí)體完整性和參照完整性,是關(guān)系模型必須滿足的完整性約束條件。
1.實(shí)體完整性 實(shí)體完整性是指關(guān)系的主關(guān)鍵字不能取“空值\。
一個(gè)關(guān)系對(duì)應(yīng)現(xiàn)實(shí)世界中一個(gè)實(shí)體集。現(xiàn)實(shí)世界中的實(shí)體是可以相互區(qū)分、識(shí)別的,也即它們應(yīng)具有某種惟一性標(biāo)識(shí)。在關(guān)系模式中,以主關(guān)鍵字作為惟一性標(biāo)識(shí),而主關(guān)鍵字中的屬性(稱為主屬性)不能取空值,否則,表明關(guān)系模式中存在著不可標(biāo)識(shí)的實(shí)體(因空值是“不確定\的),這與現(xiàn)實(shí)世界的實(shí)際情況相矛盾,這樣的實(shí)體就不是一個(gè)完整實(shí)體。按實(shí)體完整性規(guī)則要求,主屬性不得取空值,如主關(guān)鍵字是多個(gè)屬性的組合,則所有主屬性均不得取空值。
如表1.1將編號(hào)作為主關(guān)鍵字,那么,該列不得有空值,否則無法對(duì)應(yīng)某個(gè)具體的職工,這樣的表格不完整,對(duì)應(yīng)關(guān)系不符合實(shí)體完整性規(guī)則的約束條件。
2.參照完整性
參照完整性是定義建立關(guān)系之間聯(lián)系的主關(guān)鍵字與外部關(guān)鍵字引用的約束條件。
關(guān)系數(shù)據(jù)庫中通常都包含多個(gè)存在相互聯(lián)系的關(guān)系,關(guān)系與關(guān)系之間的聯(lián)系是通過公共屬性來實(shí)現(xiàn)的。所謂公共屬性,它是一個(gè)關(guān)系R(稱為被參照關(guān)系或目標(biāo)關(guān)系)的主關(guān)鍵字,同時(shí)又是另一關(guān)系K(稱為參照關(guān)系)的外部關(guān)鍵字。如果參照關(guān)系K中外部關(guān)鍵字的取值,要么與被參照關(guān)系R中某元組主關(guān)鍵字的值相同,要么取空值,那么,在這兩個(gè)關(guān)系間建立關(guān)聯(lián)的主關(guān)鍵字和外部關(guān)鍵字引用,符合參照完整性規(guī)則要求。如果參照關(guān)系K的外部關(guān)鍵字也是其主關(guān)鍵字,根據(jù)實(shí)體完整性要求,主關(guān)鍵字不得取空值,因此,參照關(guān)系K外部關(guān)鍵字的取值實(shí)際上只能取相應(yīng)被參照關(guān)系R中已經(jīng)存在的主關(guān)鍵字值。
在學(xué)生管理數(shù)據(jù)庫中,如果將選課表作為參照關(guān)系,學(xué)生表作為被參照關(guān)系,以“學(xué)號(hào)\作為兩個(gè)關(guān)系進(jìn)行關(guān)聯(lián)的屬性,則“學(xué)號(hào)\是學(xué)生關(guān)系的主關(guān)鍵字,是選課關(guān)系的外部關(guān)鍵字。選課關(guān)系通過外部關(guān)鍵字“學(xué)號(hào)’’參照學(xué)生關(guān)系。
3.用戶定義完整性
實(shí)體完整性和參照完整性適用于任何關(guān)系型數(shù)據(jù)庫系統(tǒng),它主要是針對(duì)關(guān)系的主關(guān)鍵字和外部關(guān)鍵字取值必須有效而做出的約束。用戶定義完整性則是根據(jù)應(yīng)用環(huán)境的要求和實(shí)際的需要,對(duì)某一具體應(yīng)用所涉及的數(shù)據(jù)提出約束性條件。這一約束機(jī)制一般不應(yīng)由應(yīng)用程序提供,而應(yīng)有由關(guān)系模型提供定義并檢驗(yàn),用戶定義完整性主要包括字段有效性約束和記錄有效性。
