《數(shù)據(jù)庫系統(tǒng)-基礎(chǔ)、設(shè)計(jì)及應(yīng)用》課件第2章_第1頁
《數(shù)據(jù)庫系統(tǒng)-基礎(chǔ)、設(shè)計(jì)及應(yīng)用》課件第2章_第2頁
《數(shù)據(jù)庫系統(tǒng)-基礎(chǔ)、設(shè)計(jì)及應(yīng)用》課件第2章_第3頁
《數(shù)據(jù)庫系統(tǒng)-基礎(chǔ)、設(shè)計(jì)及應(yīng)用》課件第2章_第4頁
《數(shù)據(jù)庫系統(tǒng)-基礎(chǔ)、設(shè)計(jì)及應(yīng)用》課件第2章_第5頁
已閱讀5頁,還剩153頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

2.1數(shù)據(jù)模型的概念

2.2概念模型

2.3邏輯數(shù)據(jù)模型

2.4關(guān)系及關(guān)系約束

2.5關(guān)系運(yùn)算

2.6數(shù)據(jù)依賴與關(guān)系規(guī)范化

實(shí)驗(yàn)2關(guān)系規(guī)范化

第2章關(guān)系數(shù)據(jù)模型

2.1.1實(shí)體與數(shù)據(jù)

現(xiàn)實(shí)世界中的事物是由其所具有的各種不同的性質(zhì)來互相區(qū)分的。關(guān)于事物的信息稱為實(shí)體,實(shí)體是彼此可以識(shí)別的對(duì)象。實(shí)體既可指具體的事物,如一個(gè)職工、一個(gè)部門、一個(gè)產(chǎn)品等,也可以指抽象的概念或聯(lián)系,如客戶的一次訂貨、職工與部門的工作關(guān)系等。2.1數(shù)據(jù)模型的概念一個(gè)實(shí)體可以由若干個(gè)屬性來表征,實(shí)體的屬性是事物性質(zhì)的抽象。例如,職工實(shí)體可以表征為:

職工(職工號(hào),姓名,職務(wù),基本工資,出生年月,性別)

而下面兩組屬性分別表征了兩個(gè)職工實(shí)體:

(00010,楊換章,廠長,523.00,10/10/56,男)

(00019,劉瑞萍,出納,456.00,05/13/57,女)

關(guān)于所有事物的信息形成了信息世界。信息的編碼具體體現(xiàn)在對(duì)屬性的編碼上,稱為數(shù)據(jù)。表示同一信息的所有屬性的數(shù)據(jù)組合成記錄。記錄作為一種數(shù)據(jù)單位處于數(shù)據(jù)世界中。因此,現(xiàn)實(shí)世界、信息世界和數(shù)據(jù)世界之間具有如圖2-1所示的關(guān)系。圖2-1三個(gè)世界之間的轉(zhuǎn)換關(guān)系對(duì)于同一個(gè)事物,不同的用戶可以根據(jù)自己的需求和興趣從不同的角度去分析和描述,從而形成具有不同的形式和結(jié)構(gòu)的數(shù)據(jù)。例如,對(duì)于同一個(gè)職工來說,財(cái)務(wù)部門可能需要了解他的工資方面的數(shù)據(jù),人事部門可能需要了解他的工作經(jīng)歷與工作業(yè)績(jī)方面的數(shù)據(jù),這兩種用戶對(duì)事物的了解都是片面的、局部的。但是,在數(shù)據(jù)庫系統(tǒng)中存儲(chǔ)和處理這個(gè)職工的數(shù)據(jù)時(shí),應(yīng)該考慮到所有可能用到這些數(shù)據(jù)的用戶的實(shí)際需求,盡可能完整地收集這個(gè)職工的相關(guān)信息,并將其保存到數(shù)據(jù)庫系統(tǒng)中。其方法往往是將多方面用戶的需求信息綜合在一起,剔除冗余數(shù)據(jù),在考慮應(yīng)用系統(tǒng)發(fā)展的情況下,使之形成一個(gè)整體存儲(chǔ)在數(shù)據(jù)庫中。這種消除多個(gè)用戶之間的數(shù)據(jù)冗余的處理稱為“集成”(如圖2-2所示)。集成是以數(shù)據(jù)共享為前提的。圖2-2數(shù)據(jù)的集成2.1.2數(shù)據(jù)之間的聯(lián)系

現(xiàn)實(shí)世界中的事物是相互有聯(lián)系的。由于各種聯(lián)系的發(fā)生,使得現(xiàn)實(shí)世界中一定范圍內(nèi)的若干事物構(gòu)成一個(gè)有機(jī)的整體。事物之間的聯(lián)系在信息世界里反映為實(shí)體(型)內(nèi)部的聯(lián)系和實(shí)體(型)之間的聯(lián)系。實(shí)體之間的聯(lián)系通常指的是不同實(shí)體集之間的聯(lián)系。例如,假定有人、書和汽車三個(gè)實(shí)體集,如圖2-3所示,三者之間可能的聯(lián)系有:

●人和汽車之間有制造、駕駛和乘坐的聯(lián)系;

●人和書之間有作者、管理員和讀者的聯(lián)系;

●書和汽車之間有使用說明書或其他聯(lián)系。圖2-3事物之間的聯(lián)系在同一個(gè)實(shí)體集的各個(gè)實(shí)體之間,也可能有各種各樣的聯(lián)系。例如:

●人中的某一個(gè)是另一些人的領(lǐng)導(dǎo);

●書中的某一本是另一些書的參考書;

●汽車中的某一輛是另一些的循回檢修車。

下面以兩個(gè)實(shí)體之間的聯(lián)系為例,說明實(shí)體之間聯(lián)系的類型。假定有兩個(gè)實(shí)體集A和B,則它們之間可能的聯(lián)系有三種情況,如圖2-4所示。圖2-4兩個(gè)實(shí)體之間的聯(lián)系

1)一對(duì)一聯(lián)系

如果實(shí)體集A中的每個(gè)實(shí)體至多和實(shí)體集B中的一個(gè)實(shí)體有聯(lián)系,反過來,B中的每個(gè)實(shí)體至多和A中的一個(gè)實(shí)體有聯(lián)系,則為一對(duì)一聯(lián)系(如圖2-4(a)所示),記作1?:?1。例如,如果一個(gè)班級(jí)配備一個(gè)班主任,且規(guī)定一個(gè)班主任只能管理一個(gè)班級(jí),則班級(jí)和班主任這兩個(gè)實(shí)體之間就是一對(duì)一的聯(lián)系。

2)一對(duì)多聯(lián)系

如果A中的每個(gè)實(shí)體可以和B中的幾個(gè)實(shí)體有聯(lián)系,而B中的每個(gè)實(shí)體至多和A中的一個(gè)實(shí)體有聯(lián)系,則為一對(duì)多聯(lián)系(如圖2-4(b)所示),記作1?:?n。例如,一個(gè)班級(jí)有幾十個(gè)學(xué)生,一個(gè)學(xué)生只屬于一個(gè)班級(jí),則班級(jí)和學(xué)生之間是一對(duì)多聯(lián)系。

3)多對(duì)多聯(lián)系

如果A中的每個(gè)實(shí)體可以和B中的多個(gè)實(shí)體有聯(lián)系,反過來,B中的每個(gè)實(shí)體也可以和A中的多個(gè)實(shí)體有聯(lián)系,則為多對(duì)多聯(lián)系(如圖2-4(c)所示),記作m?:?n。例如,一個(gè)學(xué)生可以選幾門課程,一門課程可供幾十個(gè)學(xué)生選擇,則學(xué)生和課程之間是多對(duì)多聯(lián)系。

實(shí)際上,可將一對(duì)一聯(lián)系看成一對(duì)多聯(lián)系的特例,也可將一對(duì)多聯(lián)系看成多對(duì)多聯(lián)系的特例。有些數(shù)據(jù)庫系統(tǒng)不能直接表示多對(duì)多聯(lián)系,就需要將它們拆成兩個(gè)一對(duì)多的聯(lián)系。同一實(shí)體集內(nèi)部的兩個(gè)實(shí)體之間也存在一對(duì)一、一對(duì)多或多對(duì)多聯(lián)系。例如,如果一門課程是另外幾門的先修課程,則這門課程和其他課程之間就是一對(duì)多聯(lián)系。

三個(gè)或更多個(gè)實(shí)體型之間也存在一對(duì)一、一對(duì)多或多對(duì)多聯(lián)系。例如,考慮課程、教師和參考書三個(gè)實(shí)體型:一門課通常由幾個(gè)教師教授,如果規(guī)定每個(gè)教師只能教授一門課,每本參考書只供一門課使用,則課程與教師、參考書之間是一對(duì)多聯(lián)系。

現(xiàn)實(shí)世界中事物之間的聯(lián)系,在信息世界中表現(xiàn)為實(shí)體之間的聯(lián)系,將其數(shù)據(jù)化得到的結(jié)果就是數(shù)據(jù)世界中的數(shù)據(jù)模型。2.1.3數(shù)據(jù)模型的構(gòu)造與分類

數(shù)據(jù)模型有兩個(gè)重要任務(wù):一是用適當(dāng)?shù)臄?shù)據(jù)形式來描述客觀事物;二是用合理的關(guān)聯(lián)方式來描述事物與事物之間的聯(lián)系。

對(duì)于客觀事物的描述通過實(shí)體(由客觀事物抽象而成)及其屬性的數(shù)據(jù)化來實(shí)現(xiàn)。方法是:定義實(shí)體中所有相關(guān)屬性的名稱、數(shù)據(jù)類型以及必要的約束條件。例如,可將“職工”實(shí)體集定義為:這些屬性排列成:職工情況

1.?dāng)?shù)據(jù)模型的構(gòu)造

數(shù)據(jù)是現(xiàn)實(shí)世界符號(hào)的抽象,而數(shù)據(jù)模型則是數(shù)據(jù)特征的抽象。數(shù)據(jù)模型從抽象層次上描述了系統(tǒng)的靜態(tài)特征、動(dòng)態(tài)行為和約束條件,為數(shù)據(jù)庫系統(tǒng)的信息表示與操作提供一個(gè)抽象的框架。數(shù)據(jù)模型所描述的內(nèi)容可分為三部分:數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)操作及數(shù)據(jù)約束。

(1)數(shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)模型中的數(shù)據(jù)結(jié)構(gòu)主要描述數(shù)據(jù)的類型、內(nèi)容、性質(zhì)以及數(shù)據(jù)之間的聯(lián)系。數(shù)據(jù)結(jié)構(gòu)是數(shù)據(jù)模型的基礎(chǔ),數(shù)據(jù)操作與數(shù)據(jù)約束建立在數(shù)據(jù)結(jié)構(gòu)之上。不同的數(shù)據(jù)結(jié)構(gòu)有不同的操作和約束。因此,數(shù)據(jù)模型常按數(shù)據(jù)結(jié)構(gòu)的不同來分類。

(2)數(shù)據(jù)操作。數(shù)據(jù)模型中的數(shù)據(jù)操作主要描述施加于相應(yīng)數(shù)據(jù)結(jié)構(gòu)之上的數(shù)據(jù)的操作類型與操作方式。

(3)數(shù)據(jù)約束。數(shù)據(jù)模型中的數(shù)據(jù)約束主要描述數(shù)據(jù)結(jié)構(gòu)內(nèi)部的數(shù)據(jù)之間的語法、語義聯(lián)系,它們之間的制約與依存關(guān)系,以及數(shù)據(jù)動(dòng)態(tài)變化的規(guī)則,以保證數(shù)據(jù)的正確、有效和相容。

2.?dāng)?shù)據(jù)模型的分類

數(shù)據(jù)模型既要盡可能自然地反映客觀事實(shí),又要便于具體的數(shù)據(jù)庫管理系統(tǒng)的實(shí)現(xiàn),還要照顧到數(shù)據(jù)在計(jì)算機(jī)中的物理表示。這幾方面的要求往往是互相矛盾的。在數(shù)據(jù)庫技術(shù)的發(fā)展歷程中,先后出現(xiàn)過層次模型、網(wǎng)狀模型和關(guān)系模型,目前流行的DBMS采用的主要是關(guān)系模型。另外,在數(shù)據(jù)庫的設(shè)計(jì)階段,往往采用主要考慮數(shù)據(jù)結(jié)構(gòu)而忽略數(shù)據(jù)操作和約束的“概念模型”。數(shù)據(jù)模型按不同的應(yīng)用層次分為三種類型。

(1)概念數(shù)據(jù)模型。概念數(shù)據(jù)模型(簡(jiǎn)稱為概念模型)是一種面向客觀世界、面向用戶的模型。概念模型與具體的數(shù)據(jù)庫管理系統(tǒng)無關(guān),也與具體的計(jì)算機(jī)平臺(tái)無關(guān)。概念模型著力于客觀世界的結(jié)構(gòu)描述以及它們之間的內(nèi)在聯(lián)系的刻畫。概念模型是所有數(shù)據(jù)模型的基礎(chǔ)。目前,較為有名的概念模型有E-R模型、擴(kuò)充的E-R模型、面向?qū)ο竽P团c謂詞模

型等。

(2)邏輯數(shù)據(jù)模型。邏輯數(shù)據(jù)模型又稱為數(shù)據(jù)模型,它是一種面向數(shù)據(jù)庫系統(tǒng)的模型。邏輯模型著力于數(shù)據(jù)庫系統(tǒng)一級(jí)的實(shí)現(xiàn)。概念模型只有在轉(zhuǎn)換成邏輯數(shù)據(jù)模型之后才能在數(shù)據(jù)庫中表示出來。邏輯數(shù)據(jù)模型有多種,較為成熟且先后流行的有層次模型、網(wǎng)狀模型、關(guān)系模型和面向?qū)ο竽P偷?。目前,絕大多數(shù)數(shù)據(jù)庫產(chǎn)品都是基于關(guān)系模型來構(gòu)建的。

(3)物理數(shù)據(jù)模型。物理數(shù)據(jù)模型又稱為物理模型,它是一種面向計(jì)算機(jī)的物理表示的模型。物理模型給出了數(shù)據(jù)模型在計(jì)算機(jī)上的物理結(jié)構(gòu)的描述。概念模型是為了將現(xiàn)實(shí)世界中的事物以及事物之間的聯(lián)系在數(shù)據(jù)世界里表現(xiàn)出來而構(gòu)建的一個(gè)中間層次,是現(xiàn)實(shí)世界到信息世界的第一層抽象。概念模型是數(shù)據(jù)庫設(shè)計(jì)人員用于信息世界建模的工具,也是數(shù)據(jù)庫設(shè)計(jì)人員和用戶之間進(jìn)行交流的語言。

概念模型是對(duì)信息世界建模的,故應(yīng)能完整、準(zhǔn)確地表示實(shí)體及實(shí)體之間的聯(lián)系。概念模型的表示方法很多,其中以P.P.S.Chen于1976年提出的E-R方法(Entity-RelationshipApproach,實(shí)體-聯(lián)系方法)最為著名。該方法用E-R圖來描述現(xiàn)實(shí)世界的概念模型,也稱為E-R數(shù)據(jù)模型。2.2概念模型

E-R數(shù)據(jù)模型提供了實(shí)體、屬性和聯(lián)系這三個(gè)簡(jiǎn)潔直觀的抽象概念,可以比較自然地模擬現(xiàn)實(shí)世界,并且可以方便地轉(zhuǎn)換成DBMS支持的數(shù)據(jù)模型(關(guān)系模型、層次模型或網(wǎng)狀模型)。用E-R圖來表示實(shí)體(型)、屬性和聯(lián)系的方法如下:

(1)實(shí)體(型)——用矩形框表示,框內(nèi)寫實(shí)體名稱。

(2)屬性——用橢圓形框表示,并用線(無向邊)連接到相應(yīng)的實(shí)體。屬性較多時(shí)也可以將實(shí)體及其屬性單獨(dú)列表。

例如,學(xué)生實(shí)體具有學(xué)號(hào)、姓名、性別、出生年月、入學(xué)時(shí)間、班級(jí)等屬性,可以用如圖2-5所示的E-R圖來表示。圖2-5學(xué)生實(shí)體及其屬性的E-R圖

(3)實(shí)體之間的聯(lián)系——用菱形框表示,框內(nèi)填寫聯(lián)系的名稱。用線(無向邊)將菱形框分別連接到有關(guān)的實(shí)體,并在線上標(biāo)注聯(lián)系的類型(1?:?1、1?:?n或m?:?n)。

例如,班級(jí)與班主任兩個(gè)實(shí)體型之間的一對(duì)一聯(lián)系、班級(jí)與學(xué)生兩個(gè)實(shí)體型之間的一對(duì)多聯(lián)系的表示方法如圖2-6所示。圖2-6實(shí)體之間聯(lián)系的表示圖2-7表示實(shí)體及實(shí)體間聯(lián)系的E-R圖值得注意的是,實(shí)體之間的聯(lián)系也可以具有屬性。例如,學(xué)生和課程兩個(gè)實(shí)體之間是多對(duì)多的聯(lián)系,因?yàn)閷W(xué)生選修了課程而產(chǎn)生了“成績(jī)”,故“成績(jī)”屬性是屬于“選修”聯(lián)系的。表示學(xué)生和課程兩個(gè)實(shí)體及其間聯(lián)系的E-R圖如圖2-7所示。

“課程”實(shí)體集內(nèi)部的課程和先修課程之間聯(lián)系的表示方法如圖2-8所示。

“課程”、“教師”、“參考書”三個(gè)實(shí)體型之間聯(lián)系的表示方法如圖2-9所示。圖2-8實(shí)體集內(nèi)部聯(lián)系的表示圖2-9三個(gè)實(shí)體及實(shí)體間聯(lián)系的E-R圖2.3.1關(guān)系數(shù)據(jù)模型

【例2-1】選課系統(tǒng)的關(guān)系模型。

設(shè)有三個(gè)關(guān)系,分別為學(xué)生表、課程表和選課表,分別描述了三個(gè)不同的實(shí)體集。如圖2-10所示。2.3邏輯數(shù)據(jù)模型圖2-10三個(gè)關(guān)系這三個(gè)關(guān)系的定義構(gòu)成了選課系統(tǒng)的關(guān)系模型。從中可以看出關(guān)系模型的一般形式:

(1)關(guān)系中每一行稱為一條記錄,一條記錄描述一個(gè)實(shí)體。每條記錄由若干字段組成,各字段表示的是實(shí)體的各種屬性。所有記錄的結(jié)構(gòu)都是相同的,也就是說,每條記錄所包含的字段、每個(gè)字段的寬度和數(shù)據(jù)類型等都是相同的。

(2)不同的關(guān)系可以有相同的屬性,各關(guān)系之間的聯(lián)系通過它們之間的共有屬性表現(xiàn)出來。例如,關(guān)系S(學(xué)生表)和SC(選課表)共有一個(gè)屬性——學(xué)號(hào);關(guān)系C(課程表)和SC共有一個(gè)屬性——課程號(hào)??梢钥闯?,關(guān)系SC將關(guān)系S和關(guān)系C聯(lián)系在了一起。

(3)在關(guān)系數(shù)據(jù)庫中,可以方便地進(jìn)行查詢、添加、刪除和修改記錄等操作。

例如,找出選修了050516號(hào)課程的學(xué)生的學(xué)號(hào)的方法是:確定應(yīng)在SC上進(jìn)行操作;在SC上找出相應(yīng)的學(xué)號(hào)04011001、04011012。

又如,將新開設(shè)的203001號(hào)課程的信息插入到數(shù)據(jù)庫中的方法是:確定應(yīng)在S上進(jìn)行操作;將203001號(hào)課程的記錄按課程號(hào)升冪的次序排在C關(guān)系的050516號(hào)課程的前面;將插入后的關(guān)系保存到數(shù)據(jù)庫中。

注:一個(gè)系統(tǒng)中的所有關(guān)系的集合構(gòu)成關(guān)系數(shù)據(jù)庫。2.3.2層次數(shù)據(jù)模型

用樹型結(jié)構(gòu)來表示實(shí)體及實(shí)體之間聯(lián)系的模型稱為層次模型。它是由若干個(gè)基本層次聯(lián)系組成的一棵倒放的樹,樹的每個(gè)結(jié)點(diǎn)代表一個(gè)記錄型。例如,一個(gè)學(xué)校的行政組織可以用如圖2-11所示的層次模型表示。

注:層次模型實(shí)際存儲(chǔ)的數(shù)據(jù)由鏈接指針來體現(xiàn)聯(lián)系。圖2-11學(xué)校行政組織的層次結(jié)構(gòu)層次模型的兩個(gè)限制條件:

(1)有且僅有一個(gè)結(jié)點(diǎn)無父結(jié)點(diǎn),稱為樹的根結(jié)點(diǎn)。

(2)其他結(jié)點(diǎn)有且僅有一個(gè)父結(jié)點(diǎn)。

這使得用層次模型表示1?:?n聯(lián)系變得容易,但不能直接表示m?:?n聯(lián)系,須轉(zhuǎn)換成1?:?n聯(lián)系才可。

在層次模型中,兩個(gè)實(shí)體間的聯(lián)系總是唯一的而且是向下的。對(duì)于層次模型定義的數(shù)據(jù)庫,只能按照層次路徑存取數(shù)據(jù)。

【例2-2】選課系統(tǒng)的層次模型。

將上例中的選課系統(tǒng)用層次數(shù)據(jù)模型表示出來,表示的方法是:將課程記錄作為根,一條課程記錄連接選修了這門課程的幾條學(xué)生的記錄。共有四棵獨(dú)立的樹,如圖2-12所示。從中可以看出層次模型的一般形式:

(1)每門課程構(gòu)成一棵樹,每棵樹由這門課程的記錄及從屬于它的具體的學(xué)生記錄組成。一個(gè)根可以有若干從屬,如課程號(hào)為050516的“數(shù)據(jù)庫”有3條從屬的學(xué)生記錄;也可以沒有從屬,如課程號(hào)為101208的“經(jīng)濟(jì)法”課程;還可以有低一級(jí)的從屬。從根開始按主從關(guān)系的連接形成了樹的一枝,稱為層次路徑。對(duì)于以層次模型定義的數(shù)據(jù)庫,只能按照層次路徑存取數(shù)據(jù)。

(2)在層次模型中,查詢子結(jié)點(diǎn)必須經(jīng)過父結(jié)點(diǎn),例如,找出選修了050516號(hào)(數(shù)據(jù)庫)課程的學(xué)生的操作步驟為:找到根為050516號(hào)(數(shù)據(jù)庫)課程的那棵樹;找出050516號(hào)課程的記錄所對(duì)應(yīng)的04021033號(hào)學(xué)生記錄、04011012號(hào)學(xué)生記錄和04011001號(hào)學(xué)生記錄。圖2-12層次數(shù)據(jù)模型示例2.3.3網(wǎng)狀數(shù)據(jù)模型

【例2-3】選課系統(tǒng)的網(wǎng)狀模型。

將上例中的選課系統(tǒng)用網(wǎng)狀數(shù)據(jù)模型表示出來,如圖2-13所示。

從圖中可以看出,這個(gè)模型有三種記錄:學(xué)生記錄、課程記錄和成績(jī)記錄,其中成績(jī)記錄叫做連接記錄。通過連接記錄將學(xué)生記錄和課程記錄連接起來,從而使記錄的組織成為網(wǎng)狀結(jié)構(gòu)。圖2-13網(wǎng)狀數(shù)據(jù)模型示例2.4.1關(guān)系

關(guān)系的一般形式如圖2-14所示。

一個(gè)關(guān)系可以看做一個(gè)行列結(jié)構(gòu)的二維表。每個(gè)表有唯一的名字,由給定數(shù)目的列組成。每列也有一個(gè)唯一的名字,表中第一行標(biāo)示列名。

每列稱為一個(gè)屬性,屬性的個(gè)數(shù)即關(guān)系的度。每行稱為一個(gè)元組,一個(gè)元組是由一組具體的屬性值構(gòu)成的,表示一個(gè)實(shí)體。可根據(jù)屬性的多少將元組稱為一元組、二元組……、n元組。2.4關(guān)系及關(guān)系約束圖2-14關(guān)系的一般形式

1.域

屬性所取值的變化范圍稱為屬性的域。域約束規(guī)定屬性的值必須是來自域中的原子值,即那些就關(guān)系模型而言已不可再分的數(shù)據(jù),如整數(shù)、字符串等,而不應(yīng)包括集合、記錄、數(shù)組這樣的組合數(shù)據(jù)。

域有理論和實(shí)際之分,后者是前者的子集。例如,假定在記載了學(xué)生基本信息的“學(xué)生”關(guān)系中,包含了“年齡”、“姓名”和“籍貫”屬性,則“年齡”的值域是自然數(shù)的一個(gè)子集(如1~100),“姓名”和“籍貫”的值域是漢字的某個(gè)子集??梢姡瑢傩允且环N變量,屬性值是變量所取的值,而域是變量的變化范圍。

2.笛卡爾積

給定一組域D1,D2,…,Dn(這些域中可以有相同的),則

D1×D2×…×Dn={(d1,d2,…,dn)|di∈Di,i=1,2,…,n}

稱為D1,D2,…,Dn的笛卡爾積,其中每個(gè)元素(d1,d2,…,dn)稱為一個(gè)n元組,元組中的每個(gè)di是Di域中的一個(gè)值,稱為一個(gè)分量。當(dāng)n=1時(shí),稱為單元組,當(dāng)n?=?2時(shí),稱為二元組,以此類推。

【例2-4】

設(shè)有三個(gè)域:

D1={張京,王瑩,李玉},D2={男,女},D3={21,22}則笛卡爾積

D1×D2×D3={

(張京,男,21),(張京,男,22),(張京,女,21),(張京,女,22),

(王瑩,男,21),(王瑩,男,22),(王瑩,女,21),(王瑩,女,22),

(李玉,男,21),(李玉,男,22),(李玉,女,21),(李玉,女,22)

}

其中,(張京,男,21)、(張京,男,22)等都是元組,張京、王銀、男、21等都是分量。這個(gè)笛卡爾積的基數(shù)為3×2×2=12,可列成一個(gè)二維表,如圖2-15(a)所示。圖2-15笛卡爾積的二維表形式及關(guān)系實(shí)例

3.關(guān)系

笛卡爾積的一個(gè)子集稱為關(guān)系,記為

R(D1,D2,…,Di,…,Dn),R∈D1×D2×…×Dn

其中,R為關(guān)系名,n為關(guān)系R的度(目)。

在笛卡爾積中,域的元素是任意排列的,一般來說,取其一個(gè)子集作為關(guān)系才有意義,例如,在圖2-15(a)所示的笛卡爾積中,只有三個(gè)元組是有實(shí)際意義的。雖然關(guān)系數(shù)據(jù)模型借用了數(shù)學(xué)中關(guān)系的概念,但兩者還是有差別的。當(dāng)關(guān)系作為關(guān)系數(shù)據(jù)模型的數(shù)據(jù)結(jié)構(gòu)時(shí),需要加以限定與擴(kuò)充。

(1)無限關(guān)系在數(shù)據(jù)庫系統(tǒng)中沒有意義,故關(guān)系數(shù)據(jù)模型中的關(guān)系必須是有限集合。

(2)數(shù)學(xué)中元組的值是有序的,而在關(guān)系數(shù)據(jù)模型中對(duì)屬性的次序不作規(guī)定,故需要為關(guān)系的各列加上屬性名來取消關(guān)系元組的有序性。例如,圖2-15(b)所示為從笛卡爾積中抽取一個(gè)有意義的子集并為各列加上屬性名而形成的關(guān)系。2.4.2關(guān)系的性質(zhì)

按照關(guān)系的定義,關(guān)系應(yīng)具有以下六個(gè)性質(zhì):

(1)列(字段)是同質(zhì)的,即同一列中的所有數(shù)據(jù)都屬于同一種數(shù)據(jù)類型且取自同一個(gè)域。在關(guān)系數(shù)據(jù)庫中創(chuàng)建表(關(guān)系)時(shí),需要定義每一列的名稱、數(shù)據(jù)類型、寬度(最多字符數(shù))以及域(取值范圍)等各種約束條件。

如果某列中包含空值(表示為NULL),則表示相應(yīng)記錄中的值未知或不存在。例如,如果形如

(2)不同的列可以取值自同一個(gè)域。一列也可以稱為一個(gè)屬性。不同的屬性應(yīng)該有不同的名字,不允許重名。例如,如果一個(gè)學(xué)校的所有老師和學(xué)生的名字構(gòu)成一個(gè)域,則“姓名”屬性和“導(dǎo)師”屬性取值自同一個(gè)域。

(3)列的次序可以任意交換,不影響關(guān)系的實(shí)際意義。基于這一點(diǎn),不少關(guān)系型DBMS中,都是將新添加的屬性追加到最末一列。

(4)不允許有完全相同的元組。因?yàn)殛P(guān)系定義為元組的集合,而集合中的所有元素都是不相同的。

(5)行的次序可以任意交換,不影響關(guān)系的實(shí)際意義。基于這一點(diǎn),在輸入表中數(shù)據(jù)時(shí),可以先一行一行地輸入手頭已有的數(shù)據(jù),然后再搜集其他數(shù)據(jù)并按行追加進(jìn)去,不必顧及先后順序。必要時(shí),按某個(gè)字段或某幾個(gè)字段排序就可以了。

(6)分量必須取原子值,即每個(gè)分量都是不可拆分的數(shù)據(jù)項(xiàng)。在如圖2-16所示的Stu1表和Stu2表中,分別包含了多值字段和復(fù)合字段(表中有表),就不具有這個(gè)性質(zhì)。圖2-16包含多值字段或復(fù)合字段的表2.4.3主鍵和外鍵

1.候選鍵

如果關(guān)系的某個(gè)屬性或?qū)傩越M的值唯一地決定其他所有屬性的值,即唯一地決定一個(gè)元組,而其任何真子集無此性質(zhì),則稱這個(gè)屬性或?qū)傩越M為該關(guān)系的候選鍵(簡(jiǎn)稱為鍵)或候選碼。例如,在如圖2-17(a)所示的“課程”關(guān)系中,“課程號(hào)”是候選鍵,在如圖2-17(b)所示的“選課”關(guān)系中,屬性組(學(xué)號(hào),課程號(hào))是候選鍵。

(a)(b)圖2-17數(shù)據(jù)庫中的兩個(gè)表

2.主鍵

一個(gè)關(guān)系至少有一個(gè)候選鍵。如果關(guān)系中有多個(gè)候選鍵,選定其中一個(gè)作為主鍵,其他的就是備用鍵。例如,在形如

的“研究生”表中,“學(xué)號(hào)”屬性可以作為主鍵。但有時(shí)候?yàn)榱吮阌诤推渌斫⒙?lián)系或者減少修改表的結(jié)構(gòu)的可能性,專門添加一個(gè)以行號(hào)為值的“ID”字段作為主鍵。

主鍵的值可用于識(shí)別元組,它應(yīng)該是唯一的,即每個(gè)元組的主鍵的值都不能為空,也不能與其他元組的主鍵相同。

3.外鍵

在一個(gè)關(guān)系數(shù)據(jù)庫的兩個(gè)(或兩個(gè)以上)關(guān)系中,常包含來自同一個(gè)域的列,可以通過它們將兩個(gè)關(guān)系連接起來,這需要用到外鍵。

設(shè)X是關(guān)系R的一個(gè)屬性組,它并非R的主鍵(或備用鍵),但卻是另一個(gè)關(guān)系S的鍵或引用了本關(guān)系的鍵,則稱X為R關(guān)于S(可為R本身)的外鍵。

例如,在如圖2-17(b)所示的“選課”關(guān)系中,“課程號(hào)”并非當(dāng)前關(guān)系的主鍵,但卻是另一個(gè)關(guān)系“課程”的主鍵,故“課程號(hào)”是“選課”關(guān)系的外鍵。

又如,“課程”關(guān)系的“先修課”屬性引用同一關(guān)系的主鍵(課程號(hào))作為其值,故“先修課”是“課程”關(guān)系的外鍵。2.4.4關(guān)系模式

1.關(guān)系模式

關(guān)系模式可簡(jiǎn)單地以關(guān)系名及其屬性列表來表示,關(guān)系的一般形式為

R(A1,A2,…,An)或R(U)

其中,R為關(guān)系名,A1、A2、…、An為屬性名(度為n),U為組成關(guān)系的屬性名集合。每個(gè)屬性都有一個(gè)域(屬性的值取自該域),如果屬性Ai的域?yàn)镈,則可記作

dom(Ai)?=?D

完整的關(guān)系模式可表示為

R(U,D,dom,F)

2.常用記號(hào)

設(shè)關(guān)系模式為R(A1,A2,…,An),R是它的一個(gè)值(關(guān)系),t是R的一個(gè)元組,表示為t

R。在下面的敘述中,將使用以下記號(hào):

(1)分量記號(hào)。t[Ai]表示元組t中對(duì)應(yīng)于屬性Ai的一個(gè)分量(值),也可記作t.Ai。

(2)屬性列記號(hào)。如果A={Ai1,Ai2,…,Aik},其中Ai1,Ai2,…,Aik是A1,A2,…,An中的一部分,則A稱為屬性列或域列。t[A]?=?t[Ai1],t[Ai2],…,t[Aik]?表示元組t在屬性列A上各分量的集合。A表示?{A1,A2,…,An}?中去掉{Ai1,Ai2,…,Aik}后剩余的屬性組。

(3)連接記號(hào)。設(shè)R為n目關(guān)系,S為m目關(guān)系,tr

R,ts

S,稱為元組的連接。它是一個(gè)n?+?m列元組,前n個(gè)分量為R中一個(gè)n元組,后m個(gè)分量為S中一個(gè)m元組。

3.關(guān)系數(shù)據(jù)庫模式

一個(gè)關(guān)系數(shù)據(jù)庫通常包括多個(gè)關(guān)系,而且這些關(guān)系中的元組也以不同的形式相互關(guān)聯(lián)。

關(guān)系數(shù)據(jù)庫也有“型”和“值”之分,關(guān)系數(shù)據(jù)庫的型也稱為關(guān)系數(shù)據(jù)庫模式,它包括若干域的定義以及在這些域上定義的若干關(guān)系模式。關(guān)系數(shù)據(jù)庫的值是這些關(guān)系模式在某個(gè)時(shí)刻的相應(yīng)的關(guān)系的集合,通常就稱為關(guān)系數(shù)據(jù)庫。2.4.5關(guān)系完整性約束

關(guān)系模式R(A1,A2,…,An)僅僅說明了關(guān)系的語法,實(shí)質(zhì)上說明了關(guān)系R中每個(gè)元組t應(yīng)該滿足的條件是:

t∈D1×D2×…×Dn

但關(guān)系中的元組不但要合乎語法,還要受語義的限制。例如,假定關(guān)系模式為

GradeStu(學(xué)號(hào),姓名,年齡,成績(jī))則下面兩個(gè)元組都合乎語法:

(12001010,張林,200,90)

(12001010,王君,20,900)

但前一個(gè)元組中“年齡”屬性的值不合理,后一個(gè)元組中“成績(jī)”屬性的值在以“百分制”登記的成績(jī)中也是不合理的。故都因語義的限制而不宜稱為關(guān)系GradeStu中的元組。數(shù)據(jù)的語義不但會(huì)限制屬性的值,還會(huì)制約屬性之間的聯(lián)系。例如,因?yàn)殛P(guān)系中主鍵的值決定其他屬性的值,故主鍵的值既不能為空也不能重復(fù),而一組屬性能否成為一個(gè)關(guān)系的主鍵,完全取決于數(shù)據(jù)的語義而不是語法。例如,取關(guān)系模式

SC(學(xué)號(hào),課程號(hào),成績(jī))

中屬性組(學(xué)號(hào),課程號(hào))作為主鍵,就是按語義而不是按語法來確定的。

語義還對(duì)不同關(guān)系中的數(shù)據(jù)帶來一定的限制。例如,如果本學(xué)期開設(shè)的課程門數(shù)增多,則SC關(guān)系中的元組也會(huì)有相應(yīng)的變化。以上所舉的例子都是語義施加于數(shù)據(jù)上的限制,統(tǒng)稱為完整性約束。設(shè)r為關(guān)系R在給定時(shí)間的元組的集合(R的值),r'為所有滿足完整性約束的元組的集合,則有:

r

r'

D1×D2×…×Dn

語義完整性約束可以由用戶來檢查,也可以由系統(tǒng)來檢查。完整性檢查是在數(shù)據(jù)庫更新時(shí)進(jìn)行的,其實(shí)現(xiàn)的程度因DBMS的不同而不同。

關(guān)系模型允許定義三種完整性約束:實(shí)體完整性、引用完整性和用戶定義的完整性。其中前兩種是關(guān)系模型必須滿足的完整性約束條件,應(yīng)該由關(guān)系系統(tǒng)自動(dòng)支持。用戶定義的完整性是應(yīng)用領(lǐng)域需要遵循的約束條件,體現(xiàn)了具體領(lǐng)域中的語義約束。

1.實(shí)體完整性規(guī)則

每個(gè)關(guān)系都有一個(gè)主鍵,每個(gè)元組(表示一個(gè)實(shí)體)的主鍵的值應(yīng)是唯一的。主鍵的值不能為空值,否則無從識(shí)別元組,這就是實(shí)體完整性約束。

實(shí)際上,不僅主鍵本身,組成主鍵的所有屬性都不能取空值。例如,在上述的SC關(guān)系中,作為主鍵的屬性組(學(xué)號(hào),課程號(hào))中的“學(xué)號(hào)”和“課程號(hào)”兩個(gè)屬性都不能為空。

多數(shù)DBMS都支持實(shí)體完整性檢查,但不一定是強(qiáng)制的。如果關(guān)系中定義了主鍵,則DBMS可以檢查,但有些DBMS并不強(qiáng)制用戶在關(guān)系中定義主鍵,因此就無法檢查了。

2.引用完整性規(guī)則

在關(guān)系模型中,實(shí)體之間的聯(lián)系是用關(guān)系來描述的,因而存在關(guān)系與關(guān)系之間的引用。這種引用可通過外鍵來實(shí)現(xiàn)。

設(shè)關(guān)系R有一外鍵X,則R中某一元組t的外鍵值為t[X],X引用另一關(guān)系S(可以是R本身)的主鍵K,引用完整性約束要求:

3.用戶定義的完整性規(guī)則

用戶定義的完整性是針對(duì)某個(gè)具體的關(guān)系數(shù)據(jù)庫的約束條件,反映的是具體應(yīng)用涉及到的數(shù)據(jù)所應(yīng)滿足的語義要求。例如,將學(xué)生的“年齡”限制在10~30之間,規(guī)定某些屬性值之間必須滿足一定的函數(shù)關(guān)系等。關(guān)系模型應(yīng)提供定義和檢驗(yàn)這種完整性約束的機(jī)制,以便用統(tǒng)一的方法進(jìn)行處理(不要由應(yīng)用程序承擔(dān)這一功能)。2.5.1傳統(tǒng)的集合運(yùn)算

1.并

關(guān)系R和關(guān)系S的“并”是將兩個(gè)關(guān)系中所有元組合并,刪去重復(fù)元組,組成一個(gè)新關(guān)系(度仍為n)。新關(guān)系中的元組t或?qū)儆赗,或?qū)儆赟。記作

R∪S?=?{t?|?t?

?R?

?t?

?S}2.5關(guān)系運(yùn)算

2.差

關(guān)系R和關(guān)系S的“差”是從R中刪去與S中相同的元組,組成一個(gè)新關(guān)系(度仍為n)。新關(guān)系中的元組t屬于R而不屬于S。記作

R?-?S?=?{t?|?t?

?R?

?t?

?S}

3.交

關(guān)系R和關(guān)系S的“交”是從R和S中取相同的元組,組成一個(gè)新關(guān)系(度仍為n)。新關(guān)系中的元組t既屬于R又屬于S。記作

R∩S?=?{t?|?t?

?R?

?t?

vS}

4.廣義笛卡爾積

設(shè)關(guān)系R和關(guān)系S分別為n目和m目關(guān)系,R和S的廣義笛卡爾積(叉積)是一個(gè)(n?+?m)列的元組的集合。元組前n列是關(guān)系R的一個(gè)元組,后m列是關(guān)系S的一個(gè)元組。如果R有k1個(gè)元組,S有k2個(gè)元組,則R和S的廣義笛卡爾積有k1×k2個(gè)元組。記作

設(shè)R為n目關(guān)系,S為m目關(guān)系,tr

R,ts

S,則稱為元組的連接。它是一個(gè)n+m列元組,前n個(gè)分量為R中一個(gè)n元組,后m個(gè)分量為S中一個(gè)m元組。

注:廣義笛卡爾積也是二元集合操作,但不要求操作對(duì)象(關(guān)系)是并相容的。

【例2-5】

設(shè)R和S為參加運(yùn)算的兩個(gè)關(guān)系,它們具有相同的度n(都有n個(gè)屬性),且相對(duì)應(yīng)的屬性值取自同一個(gè)域,如圖2-18所示。圖2-18參加集合運(yùn)算的兩個(gè)關(guān)系關(guān)系R和關(guān)系S的并、差、交運(yùn)算結(jié)果及廣義笛卡爾積如圖2-19所示。圖2-19關(guān)系R和關(guān)系S的并、差、交運(yùn)算結(jié)果及廣義笛卡爾積2.5.2專門的關(guān)系運(yùn)算

1.選擇

選擇運(yùn)算就是在關(guān)系中選取滿足給定條件的所有元組。記作

σF(R)?=?{t?|?t?

?R?

?F(t)為真}

例如,在關(guān)系

Student(學(xué)號(hào),姓名,性別,班級(jí),班主任,籍貫)

中,查詢籍貫為“河北”的學(xué)生(元組)的選擇運(yùn)算表達(dá)式為

σ籍貫=“河北”(Student)

2.投影

所謂投影,就是從關(guān)系中取出若干屬性,消去重復(fù)元組后,組成一個(gè)新關(guān)系。記作

ΠX(R)?=?{t[X]?|?t?

?R}

例如,在關(guān)系Student中,查詢學(xué)生姓名和所在班級(jí)(求關(guān)系在這兩個(gè)屬性上的投影)的投影運(yùn)算表達(dá)式為

Π姓名,班級(jí)(student)

?Π2,4(Student)

3.連接

連接就是從關(guān)系廣義笛卡爾積中選取滿足條件的元組,組成一個(gè)新關(guān)系。記作

其中,X和Y分別為關(guān)系R和關(guān)系S上度數(shù)相等且可比的屬性組。

為比較運(yùn)算符(=、≠、>、≥、<、≤)。連接運(yùn)算將X屬性組的值與Y屬性組的值進(jìn)行

運(yùn)算,并從R和S的廣義笛卡爾積R?×?S中選取那些能使

運(yùn)算的結(jié)果為真值的元組。設(shè)R有m個(gè)元組,S有n個(gè)元組,則在R與S連接的過程中要訪問m?×?n個(gè)元組:先將R中第1個(gè)元組逐個(gè)與S中各元組比較,符合條件的兩個(gè)元組首尾相連納入新關(guān)系,一輪進(jìn)行n次比較;再將R中第2個(gè)元組逐個(gè)與S中各元組比較……共進(jìn)行m輪掃描??梢?,連接運(yùn)算花費(fèi)的時(shí)間較長。

如果運(yùn)算符

為“=”(等號(hào)),即連接條件為相等條件,則稱為等值連接。等值連接從關(guān)系R和關(guān)系S的廣義笛卡爾積中選取X、Y兩個(gè)屬性組的值相等的元組,記作如果是相同屬性組(如同名屬性)的等值連接,則稱為自然連接。自然連接的結(jié)果關(guān)系中重復(fù)的屬性將會(huì)去掉。如果R和S具有相同的屬性組Y,則自然連接記作

【例2-6】

圖2-20給出了關(guān)系R、關(guān)系S,以及R和S的三次連接運(yùn)算的結(jié)果。圖2-20兩個(gè)關(guān)系及其連接運(yùn)算結(jié)果

4.除

【例2-7】

按如圖2-21所示關(guān)系COUE和關(guān)系SC,求哪位學(xué)生選修了全部三門課程。

本題的實(shí)質(zhì)為將關(guān)系COUE除以關(guān)系SC,求得商關(guān)系。已知條件為:

●被除關(guān)系COUE(姓名,科目),其中“科目”為“被除屬性”。

●除關(guān)系SC(課程,學(xué)時(shí),學(xué)分),其中“課程”為“除屬性”。

可以看出,被除屬性和除屬性是并兼容的。圖2-21除運(yùn)算示例求解步驟如下:

S1被除關(guān)系在非被除屬性上投影:Π姓名(COUR)

T1。

S2循環(huán):按第S1步的結(jié)果執(zhí)行以下操作。

第1遍:處理第1個(gè)元組?{‘張娟’}

S2.1_1:在被除關(guān)系上選擇:σ姓名=‘張娟’

(COUR)

JZH

S2.2_1:在被除屬性上投影:Π科目(JZH)={(電子商務(wù)),(計(jì)算全息),(經(jīng)濟(jì)法)}

第2遍:處理第2個(gè)元組?{‘王強(qiáng)’}

S2.1_2:在被除關(guān)系上選擇:σ姓名=‘王強(qiáng)’(COUR)

QW

S2.2_2:在被除屬性上投影:Π科目(QW)={(電子商務(wù)),(計(jì)算全息)}

第3遍:處理第3個(gè)元組?{‘李云’}

S2.1_2:在被除關(guān)系上選擇:σ姓名=‘李云’

(COUR)

YL

S2.2_2:在被除屬性上投影:Π科目(QW)={(電子商務(wù))}

S3除關(guān)系在除屬性上投影:Π課程(SC)

TT={(電子商務(wù)),(計(jì)算全息),(經(jīng)濟(jì)法)}。

S4循環(huán):逐個(gè)求商關(guān)系中的元組(S2步結(jié)果與S3步結(jié)果對(duì)照)。

第1遍:Π科目(JZH)=TT

A1(RESULT)=‘張娟’

第2遍:Π科目(QW)?≠?TT

第3遍:Π科目(YL)≠?TT

至此,求得關(guān)系COUE除以關(guān)系SC的商關(guān)系,如圖2-22所示。圖2-22商關(guān)系在給出除運(yùn)算的形式化定義之前,先給出象集的定義:設(shè)關(guān)系為R(X,Z),X和Z為屬性組,t[X]=x,則x在R中的象集為

Zx?=?{t[Z]?|?t?

?R,t[X]?=?x}

它表示R中的屬性組X上值為x的各元組在Z上分量的集合。

除運(yùn)算的定義如下:給定關(guān)系R(X,Y)和S(Y,Z),其中X、Y、Z為屬性組,R中的Y與S中的Y可不同名,但須來自相同的域集。R和S的除運(yùn)算得到一個(gè)新的關(guān)系P(X),P是R中滿足下列條件的元組在X屬性列上的投影:元組在X上分量值x的象集Yx包含S在Y上投影的集合,記作

R?÷?S?=?{tr[X]?|?tr

R

Πy(S)

Yx}

5.關(guān)系代數(shù)操作的完備集

關(guān)系代數(shù)運(yùn)算集合{s、Π、∪、-、×}已被證明是一個(gè)完備集合。任何其他關(guān)系代數(shù)運(yùn)算都可以用這幾種運(yùn)算構(gòu)成的操作序列來表示。例如,交運(yùn)算可以使用并運(yùn)算和差運(yùn)算序列來表示:

R∩S?=?(R∪S)?-?((R?-?S)∪(S?-?R))

也就是說,交操作可有可無,定義交操作只是為了操作方便。

類似地,一個(gè)連接運(yùn)算可以指定為一個(gè)笛卡爾積后跟一個(gè)選擇運(yùn)算:2.5.3擴(kuò)充的關(guān)系代數(shù)運(yùn)算

1.外連接

兩個(gè)關(guān)系R和S進(jìn)行自然連接時(shí),只有符合連接條件的所謂匹配元組才能納入結(jié)果關(guān)系,不滿足連接條件的元組則被舍棄了。外連接與連接的區(qū)別在于保留非匹配元組,并在非匹配元組(找不到可匹配的元組)的空缺部分填上null(空值)。外連接有三種。

(1)左外連接:連接結(jié)果中只納入左關(guān)系的所有元組,記作

(2)右外連接:連接結(jié)果中只納入右關(guān)系的所有元組,記作

(3)全外連接:連接結(jié)果中納入左右兩關(guān)系的所有元組,記作

【例2-8】

圖2-23中,給出了關(guān)系R和關(guān)系S以及它們的自然連接、左外連接、右外連接和全外連接的操作結(jié)果。圖2-23外連接操作示例

【例2-9】

根據(jù)給定的關(guān)系R和關(guān)系S,列出所有課程名及其先修課程號(hào)。設(shè)

R表示課程名與先修課程號(hào)的關(guān)系,對(duì)于無先修課程的課程,其先修課程號(hào)為null;對(duì)于有多門先修課程的課程,每門先修課程用一個(gè)元組表示。S是課程名與課程號(hào)的對(duì)照表,通過R與S的連接,可將先修課程號(hào)映射到相應(yīng)的課程名。可以使用外連接來列出所有課程名,包括無先修課程的課程名,表達(dá)式為

2.外并

外并是并運(yùn)算的擴(kuò)展,可以對(duì)非并相容的兩個(gè)關(guān)系R和S進(jìn)行并運(yùn)算。如果R和S的關(guān)系模式不同,構(gòu)成的新關(guān)系的屬性由R和S的屬性組成(公共屬性只取一次),新關(guān)系的元組由屬于R或?qū)儆赟的元組構(gòu)成,此時(shí)元組應(yīng)在新增加的屬性上填上null。

【例2-10】

圖2-24所示為圖2-23中給出的關(guān)系R和關(guān)系S的外并運(yùn)算的結(jié)果。圖2-24關(guān)系R和關(guān)系S的外并運(yùn)算的結(jié)果2.5.4元組關(guān)系演算

元組關(guān)系演算以元組為變量,元組演算表達(dá)式的一般形式為

{t[<屬性表>]?|?φ(t)}

【例2-11】

在圖2-25中,給出了關(guān)系R、關(guān)系S及其元組關(guān)系演算的結(jié)果關(guān)系R_S,其中R_S是按

R_S?=?{t?|?R(t)?

﹁?S(t)}

計(jì)算得到的。圖2-25兩個(gè)關(guān)系及其元組關(guān)系演算結(jié)果

【例2-12】

設(shè)關(guān)系模式為

Student(學(xué)號(hào),姓名,性別,班級(jí),班主任,籍貫)

則查詢籍貫為“河北”的女學(xué)生的姓名的元組關(guān)系演算表達(dá)式為

{t[姓名]?|t?

?StudentANDt.性別=‘女’ANDt.籍貫=‘?河北’}

【例2-13】

用元組關(guān)系演算來表示關(guān)系代數(shù)中的投影、選擇和并運(yùn)算。

假定關(guān)系模式為R(XYZ),則

(1)關(guān)系R上的投影運(yùn)算為

ΠXY(R)?=?{t[XY]?|t?

?R}

(2)關(guān)系R上的選擇運(yùn)算為

σF(R)?=?{t?|?t?

?RANDF}

(3)設(shè)R、S為R(XYZ)的兩個(gè)值(兩個(gè)關(guān)系),則差運(yùn)算為

R?-?S?=?{t?|?t?

?RAND?﹁(t?

?S)}

注:R(XYZ)是簡(jiǎn)寫方式,表示R是具有A、B、C三個(gè)屬性的關(guān)系模式。

E.F.Codd提出的ALPHA語言是一種典型的元組關(guān)系演算語言。該語言有GET、PUT、HOLD、UPDATE、DELETE、DROP六條語句,語句的一般格式為

操作語句工作空間名(表達(dá)式表):操作條件

【例2-14】

設(shè)有兩個(gè)關(guān)系模式:

NStu(學(xué)號(hào),姓名,性別,年齡,班級(jí),入學(xué)總分)

SC(學(xué)號(hào),課程號(hào),成績(jī))

則可使用GET語句(模仿ALPHA語言)實(shí)現(xiàn)檢索操作。

(1)查詢所有學(xué)生:

GETW(NStu)

(2)查詢核41班年齡小于20歲的學(xué)生的學(xué)號(hào)和年齡:

GETW(NStu.學(xué)號(hào),NStu.年齡):NStu.班級(jí)='核41'

NStu.年齡<20

(3)查詢核41班學(xué)生的姓名:

RANGENStuX

GETW(X.姓名):X.班級(jí)=‘核41’

其中,X是用RANGE說明的元組變量,可用來代替指定的關(guān)系名NStu。

(4)查詢選修了010733號(hào)課程的學(xué)生的姓名:

RANGESCX

GETW(Student.姓名):

X(X.學(xué)號(hào)=Student.學(xué)號(hào)

X.課程號(hào)='010733')

其中,

X表示“存在一個(gè)X”(

符號(hào)為存在量詞)。元組變量X是為存在量詞而設(shè)的。2.5.5域關(guān)系演算

域關(guān)系演算以域?yàn)樽兞俊S蜓菟惚磉_(dá)式的一般形式為

{<x1,x2,…,xn>?|φ(x1,x2,…,xn,xn+1,…,xn+m)}

式中,x1,x2,…,xn,xn+1,…,xn+m為域變量,其中前n個(gè)域變量x1,x2,…,xn出現(xiàn)在結(jié)果中,其他m個(gè)不出現(xiàn)在結(jié)果而出現(xiàn)在謂詞φ中。域演算表達(dá)式表示所有使得φ為真的那些x1,x2,…,xn,xn+1,…,xn+m組成的元組集合。

【例2-15】

在圖2-26中,給出了關(guān)系R、關(guān)系S及其域關(guān)系演算的結(jié)果關(guān)系Rxy和RSy。圖2-26關(guān)系R、關(guān)系S及其域關(guān)系演算的結(jié)果

【例2-16】設(shè)關(guān)系模式為

SC(學(xué)號(hào),課程號(hào),成績(jī))

則查找成績(jī)?cè)?0分以上的學(xué)生的學(xué)號(hào)和課程號(hào)的域演算表達(dá)式為

{<x,y>|(

z)(SC(x,y,z)ANDz>90}

當(dāng)?<x,y,z>?是SC中的一個(gè)元組時(shí),謂詞SC(x,y,z)為真。

2.6.1函數(shù)依賴

1.函數(shù)依賴的概念

設(shè)R(A1,A2,…,An)是一個(gè)關(guān)系模式,X和Y是屬性集?{A1,A2,…,An}?的兩個(gè)子集,對(duì)于關(guān)系模式R的任意一個(gè)關(guān)系r來說,如果不可能找到兩個(gè)在X上屬性值相等而在Y上屬性值不等的元組,則稱X函數(shù)確定Y或Y函數(shù)依賴于X,記作X→Y。相應(yīng)地,如果Y函數(shù)不依賴于X,則記作X→Y。

2.6數(shù)據(jù)依賴與關(guān)系規(guī)范化如果X→Y,但Y

X,則稱XY為非平凡的函數(shù)依賴;否則,如果Y

X,則稱XY為平凡的函數(shù)依賴。例如,在關(guān)系S(學(xué)號(hào),姓名,成績(jī))中,已知一個(gè)“學(xué)號(hào)”的值可以推知相應(yīng)的“成績(jī)”值,這是非平凡函數(shù)依賴;而已知一組?{學(xué)號(hào),姓名}?的值可以推知相應(yīng)的“學(xué)號(hào)”與“姓名”中的任何一個(gè)值??梢?,平凡的函數(shù)依賴總是成立的。因此,如果不特別聲明,后面的討論都只涉及非平凡的函數(shù)依賴。

【例2-17】

分析給定關(guān)系的函數(shù)依賴情況及存在的問題。

設(shè)有一個(gè)描述學(xué)生情況的關(guān)系SCG,如圖2-27所示,這個(gè)關(guān)系的每個(gè)屬性都是不可再分的。關(guān)系模式的鍵應(yīng)為屬性集?{IDStu,IDCour},鍵的每個(gè)值都唯一地確定關(guān)系中的一個(gè)元組。圖2-27關(guān)系SCG根據(jù)語義即關(guān)系中每個(gè)屬性的意義及其相互聯(lián)系可以看出:一個(gè)學(xué)生的“學(xué)號(hào)”可以確定其“姓名”、所在的“學(xué)院”和學(xué)院的“地址”,故屬性NameStu、Inst和Addr是函數(shù)依賴于屬性IDStu的;同理,屬性NameCour是函數(shù)依賴于IDCour的;而依賴于鍵?{IDStu,IDCour}?的只有屬性Grade,我們稱屬性Grade對(duì)于鍵?{IDStu,IDCour}?是完全函數(shù)依賴;稱其他屬性對(duì)于鍵?{IDStu,IDCour}?是部分函數(shù)依賴。關(guān)系SCG的7個(gè)屬性之間的函數(shù)依賴情況如圖2-28(a)所示。圖2-28關(guān)系SCG中各屬性之間的函數(shù)依賴外,屬性Addr實(shí)際上是由屬性Inst決定的,即Addr函數(shù)依賴于Inst。屬性IDStu、Inst和Addr之間的函數(shù)依賴情況是:

?IDStu→Inst,Inst→Addr

因而,屬性Addr通過屬性Inst也間接地函數(shù)依賴于屬性IDStu。反過來,有

Addr→IDStu(或者Addr→Inst)

這種情況稱為屬性Addr對(duì)于屬性IDStu的傳遞函數(shù)依賴,如圖2-27(b)所示。

2.函數(shù)依賴與關(guān)系的優(yōu)劣

函數(shù)依賴與關(guān)系的“優(yōu)劣”密切相關(guān)。例如,在關(guān)系SCG中,由于存在著幾種不同程度的“不良”函數(shù)依賴而產(chǎn)生了許多問題,比較“有害”的有以下幾點(diǎn)。

(1)冗余度大:多個(gè)屬性值有重復(fù),修改時(shí)不易維護(hù)數(shù)據(jù)的一致性。例如,修改課程號(hào)時(shí),有不止一處要改,容易遺漏。

(2)刪除異常:如果某個(gè)學(xué)生只選了一門課,例如,12096023號(hào)學(xué)生只選了C0004號(hào)課程,他在上課之前又放棄了,則應(yīng)刪去選課數(shù)據(jù),但因?{IDStu,IDCour}?是關(guān)鍵字,故需刪去整個(gè)元組,這樣,這個(gè)學(xué)生的所有信息也就跟著刪除了,而其中包含了不應(yīng)刪除的信息。

(3)插入異常:插入一個(gè)元組時(shí),必須給定關(guān)鍵字,即具備IDStu和IDCour兩個(gè)屬性的內(nèi)容。假定有個(gè)剛?cè)雽W(xué)的學(xué)生,IDStu?=?“7”,Inst?=?“電信”,但他還沒有選課,故無法確定IDCour的值,則這個(gè)學(xué)生的固有信息無法插入。

在SCG關(guān)系中,只有屬性Grade對(duì)關(guān)鍵字是完全函數(shù)依賴,其他屬性對(duì)關(guān)鍵字都只是部分函數(shù)依賴,甚至是傳遞函數(shù)依賴,這就是產(chǎn)生上述問題的原因。解決的方法是:把它變成更好的關(guān)系模式,即進(jìn)行關(guān)系規(guī)范化。2.6.2基于主鍵的范式和BC范式

1.2NF(第二范式)

如果關(guān)系模式R

1NF,且每個(gè)非主屬性完全函數(shù)依賴于鍵,則R

2NF。

按這個(gè)定義,判斷出例2-17中的關(guān)系SCG不屬于2NF。解決的方法是投影分解。關(guān)系SCG可分解為三個(gè)關(guān)系S、C和SC,如圖2-29所示。圖2-29關(guān)系SCG分解得到的三個(gè)關(guān)系這三個(gè)關(guān)系都消除了非主屬性對(duì)鍵(主鍵)的部分函數(shù)依賴,因而都屬于第二范式。它們所包含的屬性之間的函數(shù)依賴分別如圖2-30(a)、(b)和(c)所示。圖2-30S、C和SC三個(gè)關(guān)系的函數(shù)依賴

2.3NF(第三范式)

如果關(guān)系模式R

2NF,且每個(gè)非主屬性都不傳遞函數(shù)依賴于鍵,則R

3NF。

由圖2-28(b)可知,SCG關(guān)系中的三個(gè)屬性IDStu、Inst和Addr之間存在傳遞函數(shù)依賴,這種函數(shù)依賴關(guān)系依然存在于由SCG分解得到的S關(guān)系中。存在傳遞函數(shù)依賴的關(guān)系也會(huì)產(chǎn)生前面所講的各種問題。解決的方法仍是投影分解,可將S分解為S和I兩個(gè)關(guān)系,如圖2-31所示。圖2-31關(guān)系S分解得到的兩個(gè)關(guān)系

3.BCNF(BC范式)

3NF僅對(duì)關(guān)系的非主屬性與鍵的依賴作出限制,如果主屬性傳遞函數(shù)依賴于鍵,也會(huì)使關(guān)系變壞。BC范式可以解決這一問題。

如果關(guān)系模式R

1NF,且對(duì)于每個(gè)非平凡的函數(shù)依賴X→Y,都有X包含鍵,則R

BCNF。

由BCNF的定義可知,一個(gè)滿足BCNF的關(guān)系模式有如下性質(zhì):

(1)所有非主屬性對(duì)每個(gè)鍵都是完全函數(shù)依賴。

(2)所有主屬性對(duì)每個(gè)不包含它的鍵也是完全函數(shù)依賴。

(3)不存在完全函數(shù)依賴于非鍵的屬性組。

【例2-18】

分析并分解給定關(guān)系,使其屬于BCNF。

設(shè)有關(guān)系SNC,如圖2-32所示,其中每個(gè)學(xué)生都不同名。這個(gè)關(guān)系的候選鍵有兩個(gè):{IDStu,IDCour}?和?{IDStu,NameStu},非主屬性Grade不傳遞依賴于任何一個(gè)候選鍵,故SNC

3NF。但因IDStu→NameStu,而IDStu卻不包含鍵,故SNC

BCNF。圖2-32關(guān)系SNC及其函數(shù)依賴

2.6.3多值依賴和第四范式

1.多值依賴

在函數(shù)依賴X→Y中,給定X的值就唯一地確定了Y值(“函數(shù)依賴”由此得名),而在多值依賴X→→Y(讀作X多值決定Y或Y多值依賴于X)中,對(duì)于給定的X值,對(duì)應(yīng)的是Y的一組(零到多個(gè))數(shù)值,而且這種對(duì)應(yīng)關(guān)系對(duì)于給定的X值所對(duì)應(yīng)的每個(gè)U-X-Y的值都成立。其中,U為關(guān)系中所有屬性的集合。

【例2-19】

分析給定關(guān)系中的多值依賴。

假定一門課程由多位教師講授,每位教師可講授多門課程,講授同一門課程的教師都有一套相同的參考書,每種參考書可供多門課程使用。表示課程、教員和參考書情況的CTB關(guān)系如圖2-33所示。圖2-33CTB關(guān)系

2.4NF(第四范式)

如果關(guān)系模式R(U)

1NF,且對(duì)于每個(gè)非平凡多值依賴X→→Y(Y

X),X都包含鍵,則R

4NF。

4NF限制關(guān)系模式的屬性之間不能有非平凡且非函數(shù)依賴的多值依賴。因?yàn)楦鶕?jù)定義,對(duì)于每個(gè)非平凡的多值依賴X→→Y,X都包含候選鍵,于是有X→Y,故4NF所允許的非平凡多值依賴實(shí)際上是函數(shù)依賴??梢杂猛队胺纸獾姆椒▉硐瞧椒睬曳呛瘮?shù)依賴的多值依賴。

函數(shù)依賴和多值依賴是兩種最重要的數(shù)據(jù)依賴,如果只考慮函數(shù)依賴,則BCNF的關(guān)系模式已為規(guī)范化程度最高的了;如果只考慮多值依賴,則4NF的關(guān)系模式已為規(guī)范化程度最高的了。2.6.4關(guān)系規(guī)范化的過程與原則

關(guān)系規(guī)范化的目的是解決關(guān)系模式中存在的數(shù)據(jù)冗余以及插入、刪除異常等問題,其基本思想是以數(shù)據(jù)依賴(主要是函數(shù)依賴)為主線,對(duì)關(guān)系模式進(jìn)行投影分解,使得關(guān)系從較低級(jí)的范式變化為較高級(jí)的范式。規(guī)范化的過程就是逐步消除那些影響關(guān)系質(zhì)量的不合適的數(shù)據(jù)依賴,使得每個(gè)關(guān)系都達(dá)到預(yù)定的范式等級(jí),如圖2-34所示。圖2-34關(guān)系規(guī)范化過程

【例2-20】

設(shè)有以下汽車關(guān)系:

汽車(車號(hào),車名,功率,部件(部件號(hào),部件名,型號(hào),重量,用量))

將其規(guī)范化到4NF。

(1)規(guī)范化到1NF。

汽車關(guān)系中又包含一個(gè)部件關(guān)系(還不能稱為關(guān)系),可將其分解,變?yōu)閮蓚€(gè)關(guān)系:為了建立關(guān)系之間的聯(lián)系以及保持屬性之間的函數(shù)依賴,分解時(shí)對(duì)屬性進(jìn)行適當(dāng)?shù)恼{(diào)整:一是將“用量”保留在汽車關(guān)系中;二是在汽車關(guān)系中增加一個(gè)“部件號(hào)”。

●兩個(gè)關(guān)系中各屬性都是不可再分的基本字段,故都是關(guān)系。

●汽車關(guān)系中存在部分函數(shù)依賴,故汽車

1NF。

●部件關(guān)系中沒有部分函數(shù)依賴,但存在傳遞函數(shù)依賴,故部件

2NF。

(2)分解汽車關(guān)系,消除部分函數(shù)依賴,提高范式等級(jí)。

將與部分函數(shù)依賴有關(guān)的屬性分離出去,另組新關(guān)系:

(3)分解部件關(guān)系,消除傳遞函數(shù)依賴,提高范式等級(jí)。

把存在傳遞函數(shù)依賴的兩個(gè)屬性分離出去,另組新關(guān)系:這兩個(gè)關(guān)系中,既無部分函數(shù)依賴,又無傳遞函數(shù)依賴,故都屬于3NF。

至此,把一個(gè)還不能稱為關(guān)系的表分解成四個(gè)關(guān)系:注:規(guī)范化的關(guān)系分解方法不是唯一的。

關(guān)系分解時(shí),受限于數(shù)據(jù)之間的相互約束,不可能是完全隨意的。在規(guī)范化的分解過程中,不僅要著眼于提高關(guān)系的范式等級(jí),還要注意以下兩條原則:

(1)無損分解原則:關(guān)系的無損分解就是在關(guān)系的投影分解過程中既不能丟失數(shù)據(jù),也不能增加數(shù)據(jù),同時(shí)還要保持原有的函數(shù)依賴。

(2)相互獨(dú)立原則:所謂獨(dú)立是指分解后的新關(guān)系之間相互獨(dú)立,對(duì)一個(gè)關(guān)系內(nèi)容的修改不應(yīng)該影響到另一個(gè)關(guān)系。應(yīng)該指出:關(guān)系規(guī)范化只是改善關(guān)系質(zhì)量的一種方法,規(guī)范化程度也不是衡量關(guān)系質(zhì)量的唯一標(biāo)準(zhǔn)。也就是說,并非范式等級(jí)越高越好,如果將關(guān)系分解得過于細(xì)碎,則在進(jìn)行檢索操作時(shí)往往需要進(jìn)行多個(gè)表的連接運(yùn)算,從而降低檢索的效率。因此,在關(guān)系規(guī)范化過程中應(yīng)該適可而止,有時(shí)候即使仍有數(shù)據(jù)冗余也不宜繼續(xù)分解下去,尤其是對(duì)那些更新操作不多但查詢操作的頻度很高的數(shù)據(jù)庫系統(tǒng)更是如此。

1.實(shí)驗(yàn)任務(wù)與目的

(1)按給定數(shù)據(jù)創(chuàng)建Excel工作表。

(2)模擬關(guān)系規(guī)范化的過程,將剛創(chuàng)建的Excel工作表分離為多個(gè)工作表,必要時(shí)通過計(jì)算填充某些列。

(3)創(chuàng)建一個(gè)空的SQL

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論