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