第三章數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu)與物理結(jié)構(gòu)設(shè)計(jì)_第1頁(yè)
第三章數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu)與物理結(jié)構(gòu)設(shè)計(jì)_第2頁(yè)
第三章數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu)與物理結(jié)構(gòu)設(shè)計(jì)_第3頁(yè)
第三章數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu)與物理結(jié)構(gòu)設(shè)計(jì)_第4頁(yè)
第三章數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu)與物理結(jié)構(gòu)設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩38頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第三章 數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu)與物理結(jié)構(gòu)設(shè)計(jì)數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu)設(shè)計(jì)的主要任務(wù)是把概念層數(shù)據(jù)模型轉(zhuǎn)換為組織層數(shù)據(jù)模型, 即根據(jù) 數(shù)據(jù)庫(kù)的概念結(jié)構(gòu)導(dǎo)出特定的數(shù)據(jù)庫(kù)管理系統(tǒng)可以處理的數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu)。 與數(shù)據(jù)庫(kù)的邏 輯結(jié)構(gòu)相對(duì)應(yīng), 本章我們稱組織層的數(shù)據(jù)模型為邏輯模型。 數(shù)據(jù)庫(kù)的物理結(jié)構(gòu)設(shè)計(jì)的主要任 務(wù)是為邏輯模型選取一個(gè)最適合應(yīng)用要求的物理結(jié)構(gòu)。本章主要介紹以下內(nèi)容:邏輯模型關(guān)系模型關(guān)系規(guī)范化邏輯結(jié)構(gòu)設(shè)計(jì)的任務(wù)數(shù)據(jù)庫(kù)的物理結(jié)構(gòu)設(shè)計(jì)第一節(jié) 邏輯模型概念模型經(jīng)過(guò)轉(zhuǎn)換成為邏輯模型(也稱為結(jié)構(gòu)數(shù)據(jù)模型、組織層數(shù)據(jù)模型,常簡(jiǎn)稱為 數(shù)據(jù)模型 。它直接面向數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu),直接與 DBMS 有關(guān)。一、主要的邏輯模型目前

2、, 數(shù)據(jù)庫(kù)領(lǐng)域中主要的邏輯模型有層次模型、 網(wǎng)狀模型、 關(guān)系模型和面向?qū)ο竽P?等。1. 層次模型層次模型(Hierarchical Model是按照層次結(jié)構(gòu)的形式組織數(shù)據(jù)庫(kù)數(shù)據(jù)的數(shù)據(jù)模型,是 數(shù)據(jù)庫(kù)中使用較早的一種數(shù)據(jù)模型,其典型代表是 IBM 公司研制的、曾經(jīng)被廣泛使用的第 一個(gè)大型商用數(shù)據(jù)庫(kù)信息管理系統(tǒng) IMS (Information Management System 。(1數(shù)據(jù)結(jié)構(gòu)。層次模型使用樹形結(jié)構(gòu)表示實(shí)體及實(shí)體間的聯(lián)系。層次模型的基本特 點(diǎn)是:有且只有一個(gè)結(jié)點(diǎn)沒(méi)有父結(jié)點(diǎn), 這個(gè)結(jié)點(diǎn)稱為根結(jié)點(diǎn); 根以外的其他結(jié)點(diǎn)有且只有一 個(gè)父結(jié)點(diǎn)。在層次模型中, 樹的結(jié)點(diǎn)是記錄類型。 上一層

3、記錄類型和下一層記錄類型之間的聯(lián)系是 1:n的,用結(jié)點(diǎn)之間的連線表示。這種聯(lián)系是父子之間的一對(duì)多聯(lián)系。層次模型如圖 3-1所 示。 在層次模型數(shù)據(jù)庫(kù)中查找記錄, 必須指定存取路徑, 即從根結(jié)點(diǎn)開始沿途所經(jīng)過(guò)的路程。 在層次模型中, 同一父結(jié)點(diǎn)的子結(jié)點(diǎn)稱為兄弟結(jié)點(diǎn), 沒(méi)有子結(jié)點(diǎn)的結(jié)點(diǎn)稱為葉結(jié)點(diǎn)。 如 果要存取某一記錄類型的記錄, 可以從根結(jié)點(diǎn)開始, 按照有向樹層次逐層向下查找, 查找路 徑就是存取路徑。 任何一個(gè)給定的記錄值只有按其路徑查看時(shí), 才能顯示其全部意義, 沒(méi)有 一個(gè)記錄值能夠脫離父記錄而獨(dú)立存在。 除根節(jié)點(diǎn)外, 任何結(jié)點(diǎn)的父結(jié)點(diǎn)都是唯一的, 因此 只要知道每個(gè)結(jié)點(diǎn)的父結(jié)點(diǎn),就可以知道

4、整個(gè)模型的整體結(jié)構(gòu)。38 圖 3-1層次模型示例(2層次模型的優(yōu)缺點(diǎn)。層次模型的優(yōu)缺點(diǎn),如表 3-1所示。表 3-1層次模型的優(yōu)缺點(diǎn) 2. 網(wǎng)狀模型網(wǎng)狀模型的典型代表是 DBTG 系統(tǒng),亦稱 CODASYL 系統(tǒng)。這是 20世紀(jì) 70年代數(shù)據(jù) 系統(tǒng)語(yǔ)言研究會(huì) (Conference on Data System Language, 簡(jiǎn)稱 CODASYL 下屬的數(shù)據(jù)庫(kù)任務(wù) 組 (Data Base Task Group,簡(jiǎn)稱 DBTG 提出的一個(gè)系統(tǒng)方案。 DBTG 系統(tǒng)雖然不是實(shí)際的軟件 系統(tǒng), 但是它提出的基本概念、 方法和技術(shù)具有普遍意義, 對(duì)于網(wǎng)狀數(shù)據(jù)庫(kù)系統(tǒng)的研制和發(fā) 展起了重大的影響。

5、(1數(shù)據(jù)結(jié)構(gòu)。網(wǎng)狀模型是用網(wǎng)狀結(jié)構(gòu)表示實(shí)體及其之間聯(lián)系的模型。網(wǎng)狀模型的特 點(diǎn)如下:可以有一個(gè)以上結(jié)點(diǎn)無(wú)父結(jié)點(diǎn); 至少有一個(gè)結(jié)點(diǎn)有一個(gè)以上父結(jié)點(diǎn)。 網(wǎng)狀模型和層 次模型在本質(zhì)上是一樣的, 它們都是基本層次聯(lián)系的集合。 網(wǎng)狀模型結(jié)點(diǎn)之間的聯(lián)系不受層 次的限制,可以任意發(fā)生聯(lián)系,所以它的結(jié)構(gòu)是結(jié)點(diǎn)的連通圖,如圖 3-2所示。 圖 3-2網(wǎng)狀數(shù)據(jù)模型(2網(wǎng)狀模型的優(yōu)缺點(diǎn)。網(wǎng)狀模型的優(yōu)缺點(diǎn)如表 3-2所示。3940 表 3-2網(wǎng)狀模型的優(yōu)缺點(diǎn) 3. 關(guān)系模型關(guān)系模型是目前最重要、 應(yīng)用最廣泛的一種數(shù)據(jù)模型。 現(xiàn)在主流的數(shù)據(jù)庫(kù)系統(tǒng)大都是基 于關(guān)系模型的關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)(Relational Databas

6、e System 。關(guān)系模型是由美國(guó) IBM 公司 San Jose 研究室的研究員 E.F.Codd 于 1970年首次提出的。 20世紀(jì) 80年代以來(lái),計(jì)算機(jī)新 推出的 DBMS 幾乎都支持關(guān)系模型。(1數(shù)據(jù)結(jié)構(gòu)。在關(guān)系數(shù)據(jù)模型中,把二維表格稱為關(guān)系,表中的列稱為屬性,屬性 的取值范圍稱為域, 表中的一行稱為一個(gè)元組, 元組用關(guān)鍵字標(biāo)識(shí)。 關(guān)系模型是由若干關(guān)系 模式組成的集合。 在關(guān)系模型中用二維表表示實(shí)體集及其屬性, 用二維表描述實(shí)體集間的聯(lián) 系。(2關(guān)系模型的優(yōu)缺點(diǎn)。關(guān)系模型的優(yōu)缺點(diǎn)如表 3-3 所示。表 3-3 關(guān)系數(shù)據(jù)模型的優(yōu)缺點(diǎn)關(guān)系模型自誕生以后發(fā)展迅速, 深受用戶的喜愛(ài)。 而計(jì)

7、算機(jī)硬件的飛速發(fā)展, 更大容量、 更高速度的計(jì)算機(jī)在一定程度上彌補(bǔ)了關(guān)系數(shù)據(jù)模型的缺點(diǎn)。 因而, 關(guān)系數(shù)據(jù)庫(kù)始終保持其 主流庫(kù)的地位。本書后面章節(jié)所介紹的內(nèi)容主要講解關(guān)系數(shù)據(jù)庫(kù)。4. 面向?qū)ο竽P兔嫦驅(qū)ο蟮母拍钭钤绯霈F(xiàn)在程序設(shè)計(jì)語(yǔ)言中, 20世紀(jì) 70年代末、 80年代初開始提出了 面向?qū)ο蟮臄?shù)據(jù)模型(Object -Oriented Data Model ,面向?qū)ο竽P褪敲嫦驅(qū)ο蟾拍钆c數(shù)據(jù) 庫(kù)技術(shù)相結(jié)合的產(chǎn)物, 用以支持非傳統(tǒng)應(yīng)用領(lǐng)域?qū)?shù)據(jù)模型提出的新需求。 它的基本目標(biāo)是 以更接近人類思維的方式描述客觀世界的事物及其聯(lián)系, 且使描述問(wèn)題的問(wèn)題空間和解決問(wèn) 題的方法空間在結(jié)構(gòu)上盡可能一致,以

8、便對(duì)客觀實(shí)體進(jìn)行結(jié)構(gòu)模擬和行為模擬。面向?qū)ο竽P偷幕靖拍钣?對(duì)象、類、消息與封裝、繼承。(1對(duì)象(Object :對(duì)象是現(xiàn)實(shí)世界中的實(shí)體的模型化。現(xiàn)實(shí)世界中的任一實(shí)體都可模型化為一個(gè)對(duì)象,每一個(gè)對(duì)象都有唯一的對(duì)象標(biāo)識(shí),把狀態(tài)和行為封裝在一起。對(duì)象由狀態(tài)和行為兩部分組成, 對(duì)象的狀態(tài)是對(duì)象屬性的集合。 屬性是用來(lái)描述對(duì)象的 狀態(tài)、 組成及特性, 屬性既可以是一些簡(jiǎn)單的數(shù)據(jù)類型, 也可以是一個(gè)對(duì)象,即對(duì)象可以嵌 套。 對(duì)象的行為是在對(duì)象狀態(tài)上操作的方法的集合。 方法用來(lái)描述對(duì)象的行為方式。 方法的 定義一般分為接口說(shuō)明和實(shí)現(xiàn)兩部分, 接口說(shuō)明與子程序的接口說(shuō)明類似, 用以說(shuō)明方法的 名稱、參數(shù)和

9、結(jié)果返回值的類型等。方法的實(shí)現(xiàn)是一段程序代碼,用以實(shí)現(xiàn)方法的功能。 (2類(Class :具有相同屬性集和方法集的所有對(duì)象構(gòu)成一個(gè)類。任一個(gè)對(duì)象是某 一類的一個(gè)實(shí)例。類可以由用戶自定義, 也可以從其他類派生出來(lái),稱為子類,原來(lái)的類稱 為超類(或父類 ,一個(gè)子類可以有多個(gè)超類,有的是直接的,也有的是間接的。超類和子 類構(gòu)成層次結(jié)構(gòu)關(guān)系,稱為類層次。如圖 3-3所示,研究生、本科生及??粕际菍W(xué)生類的 子類, 博士研究生、 碩士研究生是研究生的子類, 學(xué)生和研究生是博士研究生及碩士研究生 的超類,其中研究生是直接超類。(3消息(Message 與封裝(Encapsulation :由于每個(gè)對(duì)象是其

10、狀態(tài)與行為的封裝, 一個(gè)對(duì)象不能直接訪問(wèn)或改變另一對(duì)象的內(nèi)部狀態(tài)(屬性和行為(方法 。對(duì)象與外部的 通信只能借助于消息,消息從外部傳遞給對(duì)象,調(diào)用對(duì)象的相應(yīng)方法, 執(zhí)行相應(yīng)的操作,再 以消息的形式返回操作的結(jié)果, 這是面向?qū)ο竽P偷闹饕卣髦弧?封裝使方法的接口和實(shí) 現(xiàn)分開, 有利于數(shù)據(jù)的獨(dú)立性, 同時(shí)封裝使對(duì)象只接受對(duì)象中所定義的操作, 有利于提高程 序的可靠性。圖 3-3類層次(4繼承(Inheritance :子類可以繼承其所有超類中的屬性和方法,同時(shí)子類還要定 義自己的屬性和方法。 如圖 3-3所示的碩士研究生繼承了研究生的所有屬性和方法。 繼承是 面向?qū)ο竽P椭斜苊庵貜?fù)定義的機(jī)制之

11、一, 大大減少了信息冗余, 而且作為一種強(qiáng)有力的建 模工具, 能以人類思維規(guī)律對(duì)現(xiàn)實(shí)世界提供一種簡(jiǎn)明準(zhǔn)確的描述, 同時(shí)也有利于軟件的重用。 面向?qū)ο竽P陀捎谡Z(yǔ)義豐富, 表達(dá)自然, 因此面向?qū)ο髷?shù)據(jù)庫(kù)作為新一代數(shù)據(jù)庫(kù), 在一 些新的應(yīng)用領(lǐng)域如 CAD 、 CAM 、 CASE 等得到了廣泛重視和發(fā)展。二、邏輯模型的三要素邏輯模型是一種形式化的數(shù)據(jù)描述、 數(shù)據(jù)間聯(lián)系以及有關(guān)語(yǔ)義約束規(guī)則的方法。 數(shù)據(jù)庫(kù) 專家 E.F.Codd 認(rèn)為:一個(gè)基本數(shù)據(jù)模型是一組向用戶提供的規(guī)則,這些規(guī)則規(guī)定邏輯結(jié)構(gòu) 4142 如何組織以及允許進(jìn)行何種操作。 通常一個(gè)數(shù)據(jù)庫(kù)的邏輯模型由數(shù)據(jù)結(jié)構(gòu)、 數(shù)據(jù)操作和數(shù)據(jù) 的約束條件

12、三部分組成,這三部分又稱為邏輯模型的三要素。1. 數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)用于描述數(shù)據(jù)庫(kù)系統(tǒng)的靜態(tài)特性, 是邏輯模型最基本的組成部分, 規(guī)定了如何 把基本的數(shù)據(jù)項(xiàng)組織成較大的數(shù)據(jù)單位, 以描述數(shù)據(jù)的類型、 內(nèi)容、 性質(zhì)和數(shù)據(jù)之間的相互 關(guān)系。通常,在數(shù)據(jù)庫(kù)系統(tǒng)中按照數(shù)據(jù)結(jié)構(gòu)的類型來(lái)命名邏輯模型。例如,層次型數(shù)據(jù)結(jié)構(gòu)、 網(wǎng)狀型數(shù)據(jù)結(jié)構(gòu)和關(guān)系型數(shù)據(jù)結(jié)構(gòu)的邏輯模型分別稱為層次模型、 網(wǎng)狀模型和關(guān)系模型。 數(shù) 據(jù)結(jié)構(gòu)是刻畫一個(gè)邏輯模型性質(zhì)最重要的方面。2. 數(shù)據(jù)操作數(shù)據(jù)操作用于描述數(shù)據(jù)庫(kù)系統(tǒng)的動(dòng)態(tài)特性, 是指一組用于指定數(shù)據(jù)結(jié)構(gòu)的任何有效的操 作或推導(dǎo)規(guī)則。 數(shù)據(jù)庫(kù)中主要的操作有查詢和更新兩大類。 邏輯模型必

13、須定義這些操作的確 切含義、操作符號(hào)、操作規(guī)則以及實(shí)現(xiàn)操作的數(shù)據(jù)庫(kù)語(yǔ)言。3. 數(shù)據(jù)的約束條件數(shù)據(jù)的約束條件是一組完整性規(guī)則的集合, 它定義了給定邏輯模型中數(shù)據(jù)及其聯(lián)系所具 有的制約和依存規(guī)則, 用以限定相容的數(shù)據(jù)庫(kù)狀態(tài)的集合和可容許的狀態(tài)改變, 以保證數(shù)據(jù) 庫(kù)中數(shù)據(jù)的正確性、有效性和相容性。完整性約束的定義對(duì)邏輯模型的動(dòng)態(tài)特性做了進(jìn)一步的描述與限定。因?yàn)樵谀承┣闆r 下, 若只限定使用的數(shù)據(jù)結(jié)構(gòu)及可在該結(jié)構(gòu)上執(zhí)行的操作, 仍然不能確保數(shù)據(jù)的正確性、 有 效性和相容性。 為此,每種數(shù)據(jù)模型都規(guī)定有通用和特殊的完整性約束條件。例如,關(guān)系模 型中通用的約束規(guī)則是實(shí)體完整性和引用完整性。特殊的約束規(guī)則是

14、用戶定義的完整性。第二節(jié) 關(guān)系模型由于關(guān)系模型是目前最重要、應(yīng)用最廣泛的一種數(shù)據(jù)模型,而且當(dāng)前大多數(shù)數(shù)據(jù)庫(kù)系 統(tǒng)都是基于關(guān)系模型的關(guān)系數(shù)據(jù)庫(kù)系統(tǒng),因此本節(jié)詳細(xì)討論關(guān)系模型。一、關(guān)系模型的數(shù)據(jù)結(jié)構(gòu)關(guān)系模型是以集合論中的關(guān)系概念為基礎(chǔ)發(fā)展起來(lái)的數(shù)據(jù)模型。 在關(guān)系模型中, 基本元 素包括關(guān)系、關(guān)系模式、屬性、元組、域、關(guān)鍵字以及關(guān)系實(shí)例等。1.關(guān)系一個(gè)對(duì)象可以用一個(gè)或多個(gè)關(guān)系來(lái)描述。關(guān)系就是定義在它的所有屬性域上的多元關(guān) 系。設(shè)關(guān)系為 R ,它有屬性 12, , , n A A A ,其對(duì)應(yīng)的域分別為 12, , , n D D D ,則關(guān)系 R 可表示為:(1122/, /, , /n n R D

15、 A D A D A 或 (12, , , n R A A A 。上式是關(guān)系 R 的描述, (1i A i n 是屬性名, R 的值用 r 或 r (R 表示, n 是 R 的屬性的個(gè)數(shù),稱為關(guān)系的目。從形式上看,關(guān)系相當(dāng)于一個(gè)二維表 (Table,如表 3-4所示的學(xué)生信43息表就是一個(gè)關(guān)系,可表示為:學(xué)生(學(xué)號(hào),姓名,性別,出生年份,入學(xué)年份,班級(jí)號(hào) 。 關(guān)系可以有三種類型:基本關(guān)系(又稱為基本表或基表 、查詢表和視圖表?;颈硎?實(shí)際存在的表, 它是實(shí)際存儲(chǔ)數(shù)據(jù)的邏輯表示。 查詢表是查詢結(jié)果對(duì)應(yīng)的表。 視圖表是由基 本表或其它視圖表導(dǎo)出的表,是虛表,不對(duì)應(yīng)實(shí)際存儲(chǔ)的數(shù)據(jù)。關(guān)系要滿足以下四

16、個(gè)條件:(1關(guān)系中的每一列都是不可再分的基本屬性。如表 3-4所表示的關(guān)系就滿足這個(gè)條 件。但如果將出生年份改為出生日期,出生日期下面再分出年、月、日三個(gè)子屬性,則出生 日期就不是基本屬性,相應(yīng)的關(guān)系就不滿足這個(gè)條件。(2表中各屬性不能重名。(3表中任意兩個(gè)元組不能完全相同。(4表中的行、列次序無(wú)關(guān)緊要,可以任意交換。 2.關(guān)系模式關(guān)系數(shù)據(jù)庫(kù)就是支持關(guān)系模型的數(shù)據(jù)庫(kù)系統(tǒng)。 所以它以二維表形式來(lái)組織數(shù)據(jù), 由型和 值兩部分組成,關(guān)系模式是型,關(guān)系是值。關(guān)系模式是對(duì)關(guān)系的描述或定義,包括關(guān)系名、 屬 性 、 屬 性 對(duì) 應(yīng) 的 域 集 合 、 屬 性 到 域 的 映 射 以 及 屬 性 之 間 數(shù)

17、 據(jù) 的 依 賴 關(guān) 系 。 記 為(, , , R U D d o m F。其中 R 為關(guān)系名, U 為該屬性的集合,即 12, , , n U A A A = ; D為域的集合, 12, , , n DD D D = ,即屬性取值范圍的集合; dom 為屬性集 U 到 D 的映射,即屬性與域之間的對(duì)應(yīng)關(guān)系; F 為屬性集 U 上的數(shù)據(jù)依賴關(guān)系。通常, 域的定義和映射直接說(shuō)明為屬性的類型和長(zhǎng)度, 而數(shù)據(jù)依賴關(guān)系將在第三節(jié)介紹, 因此,通常把關(guān)系模式簡(jiǎn)化為 R (U 。關(guān)系模式和關(guān)系是型和值的關(guān)系。 一個(gè)關(guān)系模式可以對(duì)應(yīng)多個(gè)關(guān)系, 但在某一特定的時(shí) 刻關(guān)系模式總有一個(gè)關(guān)系與之對(duì)應(yīng), 即關(guān)系是關(guān)

18、系模式在某一時(shí)刻的狀態(tài)或內(nèi)容。 一般說(shuō)來(lái), 關(guān)系模式是相對(duì)穩(wěn)定的, 而關(guān)系的值是相對(duì)變化的。 但在很多情況下, 人們通常把關(guān)系模式 和關(guān)系統(tǒng)稱為關(guān)系。當(dāng)討論數(shù)據(jù)庫(kù)時(shí), 必須區(qū)分關(guān)系模式和關(guān)系實(shí)例的概念。 關(guān)系模式是一種邏輯設(shè)計(jì), 包括 了關(guān)系名和關(guān)系的屬性, 相對(duì)比較穩(wěn)定。 而關(guān)系實(shí)例是給定的關(guān)系模式中數(shù)據(jù)的快照, 相對(duì) 來(lái)說(shuō)經(jīng)常發(fā)生變化。 在關(guān)系模型中, 數(shù)據(jù)庫(kù)設(shè)計(jì)包含了一個(gè)或多個(gè)關(guān)系模式。 關(guān)系數(shù)據(jù)庫(kù)模 式是關(guān)系模式的集合,簡(jiǎn)稱數(shù)據(jù)庫(kù)模式。例如,在學(xué)生數(shù)據(jù)庫(kù)中,若包括了三個(gè)關(guān)系模式 Student, Class, Grade,那么這三個(gè)關(guān)系模式的設(shè)計(jì)集合稱為數(shù)據(jù)庫(kù)模式。該數(shù)據(jù)庫(kù)模式的設(shè) 計(jì)

19、過(guò)程如圖 3-4所示。44 圖 3-4 數(shù)據(jù)庫(kù)模式設(shè)計(jì)過(guò)程3、屬性二維表中的列(Column 稱為屬性 (Attribute,列中的值取自相應(yīng)的域(Domain ,域 是屬性所有可能取值的集合。 雖然關(guān)系數(shù)據(jù)模型采用了數(shù)學(xué)中關(guān)系的概念, 但兩者還是有些 差別。 在數(shù)學(xué)中,元組中的值是有序的, 而在關(guān)系模型中對(duì)屬性的次序是不作規(guī)定的, 例如, (21A A R 和 , (12A A R 兩種表示是等價(jià)的。4、元組表中的一行 (Row稱為一個(gè)元組(Tuple 。元組就是關(guān)系中的數(shù)據(jù),元組的各分量分別 對(duì)應(yīng)于關(guān)系中的各個(gè)屬性。 當(dāng)需要表示關(guān)系中的一個(gè)元組時(shí), 一般是把一個(gè)元組的各個(gè)分量 按照屬性的標(biāo)

20、準(zhǔn)排列順序列表在一個(gè)圓括號(hào)內(nèi), 分量之間使用逗號(hào)分開。 如表 3-4中的元組 可表示為:(050125,劉菲,女, 1987, 2005, 05111 。5、鍵 (Key(1候選鍵(Candidate key :如果關(guān)系的某一屬性或?qū)傩越M的值唯一地決定其他所有 屬性的值, 即唯一地決定一個(gè)元組, 而其任何真子集無(wú)此性質(zhì), 則這個(gè)屬性或?qū)傩越M稱為關(guān) 系的候選鍵,或簡(jiǎn)稱為鍵。在簡(jiǎn)單情況下,候選鍵只包含一個(gè)屬性,而在極端情況下,候選 鍵包含關(guān)系中的所有屬性,稱為全鍵(All-key 。(2主鍵 (Primary Key :從侯選鍵中選定一個(gè)為主鍵(Prime Key 。主鍵也稱為關(guān)鍵 字(Keywo

21、rd ,用來(lái)識(shí)別和區(qū)分元組,它應(yīng)該是唯一的,即每個(gè)元組的主鍵的值是不能相 同的。 在關(guān)系模式中,常在主鍵的屬性下加下劃線,以標(biāo)出主鍵。 包含在主鍵中的屬性稱為 主屬性 (Prime Attribute 。未包含在任何候選鍵中的屬性稱為非主屬性。例如在學(xué)生 (學(xué)號(hào), 姓名,性別,出生年份,入學(xué)年份,班級(jí)號(hào) 關(guān)系中, 學(xué)號(hào)是唯一的候選鍵,當(dāng)然也是主 鍵。因此學(xué)號(hào)是主屬性。而姓名、性別等都是非主屬性。(3外鍵(Foreign Key :如果關(guān)系中的屬性或?qū)傩越M不是本關(guān)系的鍵,而是引用其他 關(guān)系的鍵, 則稱為此關(guān)系的外鍵。 外鍵提供了表示實(shí)體之間聯(lián)系的手段。 當(dāng)兩個(gè)實(shí)體集之間 存在一對(duì)多聯(lián)系時(shí), 通常

22、取一方關(guān)系中的鍵作為多方關(guān)系的外鍵。 對(duì)于多對(duì)多聯(lián)系, 可從每 個(gè)關(guān)系取一個(gè)鍵組成一個(gè)新的關(guān)系, 用這種新關(guān)系表示多對(duì)多聯(lián)系, 這時(shí)外鍵為所在關(guān)系的 主屬性。例如,除學(xué)生關(guān)系外,再定義兩個(gè)關(guān)系:課程 (課程號(hào),課程名,學(xué)分,開課時(shí)間, 先修課程號(hào) ,選課 (學(xué)號(hào),課程號(hào),成績(jī) 。從語(yǔ)義可知, 課程號(hào)是課程的主鍵, 學(xué)號(hào), 課程號(hào)是選課的主鍵,同時(shí)學(xué)號(hào)與課程號(hào)也是選課的兩個(gè)外鍵。 45二、關(guān)系模型的數(shù)據(jù)操作關(guān)系模型中數(shù)據(jù)操作的特點(diǎn)是集合操作方式。 即操作的對(duì)象和結(jié)果都是集合。 這種操作 方式也稱為一次一個(gè)集合的方式。 關(guān)系模型中常用的數(shù)據(jù)操作包括查詢操作和更新操作兩大 部分。查詢操作有選擇、投影

23、、連接、除、并、交、差等;更新操作有插入、刪除和修改。 查詢操作是關(guān)系模型中數(shù)據(jù)操作的主要內(nèi)容。關(guān)系模型中的關(guān)系操縱能力早期通常是用代數(shù)方法或邏輯方法來(lái)表示, 分別稱為關(guān)系代 數(shù) (Relation Algebra和關(guān)系演算 (Relation Calculus。關(guān)系代數(shù)是用對(duì)關(guān)系的運(yùn)算來(lái)表達(dá)查詢 要求的方式。 關(guān)系操作的結(jié)果仍為關(guān)系, 可以再參與其他關(guān)系操作, 由此可以構(gòu)成對(duì)關(guān)系的 各種復(fù)雜操作。 關(guān)系演算用謂詞來(lái)表達(dá)查詢要求的方式。 關(guān)系代數(shù)與關(guān)系演算均是抽象的查 詢語(yǔ)言,與具體的 DBMS 中實(shí)現(xiàn)的實(shí)際語(yǔ)言并不完全一樣,它們可用作評(píng)估實(shí)際系統(tǒng)中查 詢語(yǔ)言能力的標(biāo)準(zhǔn)或基礎(chǔ)。除了關(guān)系代數(shù)與關(guān)

24、系演算外,還有一種介于二者之間的 SQL 語(yǔ) 言,該語(yǔ)言將在第四章介紹,這里僅介紹關(guān)系代數(shù)。關(guān)系代數(shù)的運(yùn)算可分為兩類:一類是基本運(yùn)算, 即傳統(tǒng)的集合運(yùn)算; 另一類是專門運(yùn)算, 即專門針對(duì)關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)的運(yùn)算。1.傳統(tǒng)的集合運(yùn)算。傳統(tǒng)的集合運(yùn)算包括并、差、交、笛卡爾積 4種基本運(yùn)算。(1 并 (Union:設(shè)關(guān)系 R 和 S 是同一關(guān)系模式下的關(guān)系, 則 R 和 S 的并是由屬于 R 或 屬于 S 的元組組成的集合。記作 S t R t t S R = 。(2差 (Difference:設(shè)關(guān)系 R 和 S 是同一關(guān)系模式下的關(guān)系,則 R 和 S 的差是由屬于R 但不屬于 S 的元組組成的集合。記

25、作 S t R t t S R =-。(3交 (Intersection:設(shè)關(guān)系 R 和 S 是同一關(guān)系模式下的關(guān)系,則 R 和 S 的并是由既 屬于 R 又屬于 S 的元組組成的集合。記作 S t R t t S R =例 3.1假設(shè)關(guān)系 R 和 S 如表 3-5(a 和 (b所示,則 R 和 S 的并、差、交運(yùn)算如表 3-5(c 、 (d 、 (e 所示。表 3-5(a R (b S (c S R (d S R - (e S R (4笛卡爾積 (Cartesian Product :設(shè)關(guān)系 R 和 S 的列數(shù)分別為 r 和 s ,元組的個(gè)數(shù)分 別為 m 和 n ,則關(guān)系 R 和 S 的笛卡

26、爾積是一個(gè) (s r +列的元組的集合。每個(gè)元組的前 r 個(gè) 分量來(lái)自關(guān)系 R 的一個(gè)元組, 后 s 個(gè)分量來(lái)自關(guān)系 S 的一個(gè)元組, 且元組的數(shù)目有 n m 個(gè), 記作 , S t R t tt t t S R sr sr=。例 3.2 假設(shè)關(guān)系 R 和 S 如表 3-6(a 和 (b所示,則 R 和 S 的笛卡爾積 S R 如表 3-6(c 46 所示。 2. 專門的關(guān)系運(yùn)算專門的關(guān)系運(yùn)算包括選擇、投影、連接和除法操作。(1選擇操作 (Selection:選擇是一種一元關(guān)系操作,它作用在一個(gè)關(guān)系 R 上, 按給定 的選擇條件 F ,選出符合條件的元組,記作 (true t F R t t

27、R F = (,其中 F 是一 個(gè)邏輯表達(dá)式,取值為“ true ”或“ false ” 。簡(jiǎn)記為:(R F 。例 3.3 從學(xué)生關(guān)系中查找姓名是高明的學(xué)生。從學(xué)生關(guān)系中查找出生年份為 1987的所有女生。 解: 姓名 = 高明 (學(xué)生 性別 = 女 AND 出生年份 =1987(學(xué)生 上述兩個(gè)選擇操作的結(jié)果如表 3-7和 3-8所示。表 3-7 例 3.3的操作結(jié)果 表 3-8 例 3.3的操作結(jié)果(2投影操作 (Projection:投影也是一元關(guān)系操作。投影操作選取關(guān)系的某些列。關(guān) 系 R 在屬性列 mi i i A A A , , , 21上的投影記作: , , , ( (, , ,

28、2121R r A A A r R mmi i ii i i AA A =,簡(jiǎn)記為:屬性表 (<關(guān)系名 >。 例 3.4 從學(xué)生關(guān)系中查找所有學(xué)生的姓名和入學(xué)年份。 解: 姓名,入學(xué)年份 (學(xué)生 結(jié)果如表 3-9所示。表 3-9 例 3.4的操作結(jié)果 表 3-10 例 3.5的操作結(jié)果注意:投影操作后的關(guān)系可能會(huì)出現(xiàn)內(nèi)容完全相同的若干個(gè)元組, 而根據(jù)關(guān)系的要求不 允許出現(xiàn)內(nèi)容完全相同的元組,因此結(jié)果只能保留其中一個(gè)元組。47例 3.5從學(xué)生關(guān)系中查找所有學(xué)生的入學(xué)年份和班級(jí)號(hào)。 解: 入學(xué)年份,班級(jí)號(hào) (學(xué)生結(jié)果如表 3-10所示(該表中去掉了內(nèi)容完全相同的兩個(gè)元組 。投影操作可以

29、和選擇操作組合起來(lái)應(yīng)用。 例如, 若要查找所有女生的姓名, 則表示如下: 姓名 (性別 = 女 (學(xué)生 (3連接操作 (Join:連接是二元關(guān)系操作,以符號(hào) 表示。它的定義為: R 連 接 條 件S =連接條件(R ×S 連接與笛卡爾積的區(qū)別在于笛卡爾積包含兩個(gè)關(guān)系的所有元組的組合, 而連接只包含滿 足連接條件的元組的組合。 如果連接條件為兩個(gè)關(guān)系中的兩個(gè)屬性進(jìn)行相等比較, 則稱為等 值連接。 若在等值連接中再要求兩個(gè)關(guān)系中進(jìn)行比較的分量必須是相同的屬性組, 并且在結(jié) 果中去掉重復(fù)的屬性列,則稱為自然連接。在自然連接表示式中一般可以省略連接條件。例 3-6 假設(shè)有一選課表如表 3-1

30、1所示。則表 3-12為等值連接:學(xué)生學(xué) 生 . 課 號(hào) =選 課 . 課 號(hào)選課 的結(jié)果,表 3-13為自然連接:學(xué)生 選課的結(jié)果。表 3-12 學(xué)生學(xué) 生 . 課 號(hào) =選 課 . 課 號(hào)選課的操作結(jié)果 表 3-11 選課 表 3-13 學(xué)生 選課的操作結(jié)果 (4 除操作 (Division。 首先引入像集 (Image Set的概念。 設(shè)關(guān)系 , (Z X R , Z X , 是屬性組, 則 R 中屬性組 X 上的值為 x 的各元組在 Z 分量上集合,稱為 x 在 R 中的像集。記作x X r R r Z r Z x =設(shè)有關(guān)系 , (Y X R 和 , (Z Y S , Z Y X ,

31、 , 為屬性組,則 R 與 S 的除運(yùn)算定義為 R 中滿足 以下條件的元組在 X 屬性上的投影:關(guān)系 R 中的元組在 X 上分量值 x 的像集 x Y 包含 S 在Y 上投影的集合。記作 (x y r r Y S R t X t S R =÷例 3-7 關(guān)系 R 和 S 如表 3-14(a 、 (b 所示,則 R 和 S 的除運(yùn)算如表 3-14(c 所示。 在關(guān)系 R 中, (A , B 可以取三個(gè)值 (A1, B1 , (A2, B2 , (A3, B2 (A1, B1的像集為 (C1, D1 , (C2, D2 , (C3, D3 (A2, B2的像集為 (C1, D1 , (C

32、2, D2 (A3, B2的像集為 (C1, D1 , (C1, D2 S 在(C , D 上的投影為 (C1, D1 , (C2, D2 由此可以看出, (A1, B1與(A2, B2的像集包含了 S 在(C , D 上的投影,所以R S÷的結(jié)果包含(A1, B1與(A2, B2兩個(gè)元組。 二、關(guān)系模型的數(shù)據(jù)完整性約束數(shù)據(jù)完整性是指數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù)是有意義的或正確的。關(guān)系模型中的數(shù)據(jù)完整性 規(guī)則是對(duì)關(guān)系的某種約束條件。 關(guān)系模型的完整性約束主要包括三大類:實(shí)體完整性、 參照 完整性和用戶定義的完整性。1. 實(shí)體完整性實(shí)體完整性規(guī)則要求:每個(gè)關(guān)系都必須有主健, 各元組的主鍵的值不能

33、相同, 主鍵的屬 性(即主屬性值不允許取空值。所謂空值就是“不知道”或“無(wú)意義”的值。例如,當(dāng)某 一個(gè)學(xué)生選修了某一門課程后,便向表 3-11所示的選課表插入一個(gè)元組,但在學(xué)生還未考 試之前,成績(jī)是不知道的,所以該元組的成績(jī)屬性的值為空值??罩狄话阌?NULL 表示。 之所以要求每個(gè)關(guān)系都必須有主健, 是因?yàn)橹鹘】梢晕ㄒ坏卮_定一個(gè)元組; 如果兩個(gè)元 組的主鍵的值相同, 則無(wú)法區(qū)分這兩個(gè)元組; 而如果某一元組的主鍵的值為空值, 則說(shuō)明存 在某個(gè)無(wú)法識(shí)別的實(shí)體。目前大多數(shù) DBMS 支持實(shí)體完整性約束檢查,但不是強(qiáng)制和徹底的,只有當(dāng)用戶在關(guān) 系模式中定義了主鍵之后, DBMS 才進(jìn)行實(shí)體完整性約束

34、檢查,若用戶不定義主鍵,則無(wú) 從進(jìn)行實(shí)體完整性約束檢查。2. 參照完整性參照完整性也稱為引用完整性。 參照完整性約束是不同關(guān)系之間或同一關(guān)系的不同元組 間的約束。設(shè) FK 是關(guān)系 R 的外鍵, 它與關(guān)系 S 的主鍵 PK 相對(duì)應(yīng) (即 FK 引用關(guān)系 S 的主鍵 PK 。 則參照完整性規(guī)則要求:對(duì)于 R 中每個(gè)元組在 FK 上的值或者取空值, 或者等于 S 中某個(gè)元 組的主鍵值。即外鍵要么是空值,要么是引用實(shí)際存在的主鍵值。例 3-8假設(shè)有以下兩個(gè)實(shí)體(其中帶下劃線的為主鍵 :學(xué)生(學(xué)號(hào),姓名,性別,專業(yè)號(hào)專業(yè)(專業(yè)號(hào),專業(yè)名顯然, 學(xué)生關(guān)系中的 “專業(yè)號(hào)” 引用了專業(yè)關(guān)系的主鍵 “專業(yè)號(hào)”

35、, 即學(xué)生關(guān)系中的 “專 業(yè)號(hào)” 為外鍵。根據(jù)參照完整性規(guī)則要求:學(xué)生關(guān)系中的“專業(yè)號(hào)” 屬性值或者是空值,4849或者是專業(yè)關(guān)系中已存在的專業(yè)號(hào)。 專業(yè)號(hào)為空值說(shuō)明還未給該學(xué)生分配專業(yè)。 如果給該學(xué) 生分配專業(yè),必須分配一個(gè)已存在的專業(yè)。例 3-9 從表 3-11與表 3-4可以看出, 選課關(guān)系中的 “學(xué)號(hào)” 引用了學(xué)生關(guān)系的主鍵 “學(xué) 號(hào)” ,即選課關(guān)系中的“學(xué)號(hào)”為外鍵,則按照參照完整性規(guī)則要求,選課關(guān)系中的“學(xué)號(hào)” 屬性值或者是空值,或者是學(xué)生關(guān)系中已存在的學(xué)號(hào)。但由于“學(xué)號(hào)”和“課程號(hào)” 是選 課關(guān)系的主屬性, 按照實(shí)體完整性規(guī)則要求, 它們均不能取空值。 所以選課關(guān)系中的 “學(xué)號(hào)”

36、 只能取學(xué)生關(guān)系中已存在的學(xué)號(hào)。3. 用戶定義的完整性任何關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)都應(yīng)該支持實(shí)體完整性和參照完整性。 除此之外, 不同的數(shù)據(jù)庫(kù)應(yīng) 用系統(tǒng)根據(jù)其應(yīng)用環(huán)境的不同, 往往還需要一些特殊的約束條件, 用戶定義的完整性就是針 對(duì)某一具體應(yīng)用領(lǐng)域定義的數(shù)據(jù)庫(kù)約束條件。 它說(shuō)明某一具體應(yīng)用所涉及的數(shù)據(jù)必須滿足的 語(yǔ)義要求。例如:學(xué)生的“年齡”屬性的值不能大于 100或小于 5, “性別”屬性的值只能 是“男”或“女” ;選課的“成績(jī)” 屬性的值不能小于零;等等。一般情況下,用戶定義的 完整性實(shí)際上就是指明關(guān)系中屬性的取值范圍, 即屬性的域。 因此, 用戶定義的完整性也稱 為域完整性。第三節(jié) 關(guān)系規(guī)范化

37、在討論了關(guān)系模型的基本概念與關(guān)系操作語(yǔ)言后, 接下來(lái)要討論針對(duì)一個(gè)具體問(wèn)題, 如 何構(gòu)造一個(gè)合適的關(guān)系模式。關(guān)系規(guī)范化理論為我們提供了判斷關(guān)系模式好壞的理論標(biāo)準(zhǔn)。 而這些標(biāo)準(zhǔn)是根據(jù)屬性間的依賴關(guān)系, 即函數(shù)依賴的概念給出的, 因此, 本節(jié)首先討論函數(shù) 依賴的概念,然后討論規(guī)范化標(biāo)準(zhǔn)。一、函數(shù)依賴的基本概念1. 函數(shù)依賴假 設(shè) (U R 是 一 個(gè) 關(guān) 系 模 式 , U 是 R 的 屬 性 集 合 , X 和 Y 是 U 的 子 集 , 即U Y U X , 。設(shè) 21, t t 是關(guān)系 R 中的任意兩個(gè)元組,如果由 21X t X t =可以推導(dǎo)出21Y t Y t =。則稱“ X 函數(shù)決定

38、 Y ”或“ Y 函數(shù)依賴于 X ” ,記作 Y X 。對(duì)于函數(shù)依賴,需要說(shuō)明以下幾點(diǎn)。(1函數(shù)依賴不是指關(guān)系模式 (U R 的某個(gè)或某些關(guān)系實(shí)例滿足的約束條件,而是指(U R 的所有關(guān)系實(shí)例均要滿足的約束條件。(2 函數(shù)依賴和別的數(shù)據(jù)之間的依賴關(guān)系一樣,是語(yǔ)義范疇的概念。例如, “姓名年 齡”這個(gè)函數(shù)依賴只有在沒(méi)有同名人的條件下成立。如果有相同名字的人,則“年齡”就不 再依賴于“姓名”了。(3若 Y X ,則 X 稱為這個(gè)函數(shù)依賴的決定屬性集(determinant 。 2. 平凡函數(shù)依賴與非平凡函數(shù)依賴50 在關(guān)系模式 (U R 中, X 和 Y 是 U 的子集,即 U Y U X , ,

39、如果 Y X ,但X Y /,則稱 Y X 是非平凡函數(shù)依賴。若 X Y ,則稱 Y X 為平凡函數(shù)依賴。對(duì)于任一關(guān)系模式, 平凡函數(shù)依賴都是必然成立的, 它不反映新的語(yǔ)義, 因此若不特別 聲明,平常所指的函數(shù)依賴一般都是指非平凡函數(shù)依賴。3. 完全函數(shù)依賴與部分函數(shù)依賴設(shè) X 、 Y 是某關(guān)系的不同屬性集,如 Y X ,且不存在 X X ' ,使 Y X ',則稱Y 完全函數(shù)依賴(Full Functional Dependency于 X ,記作 Y X f;否則稱 Y 部分函數(shù)依 賴(Partial Function Dependency于 X ,記作 Y X p。4. 傳

40、遞函數(shù)依賴設(shè) X 、 Y 、 Z 是某關(guān)系的不同的屬性集,如果 Y X , Y X /, Z Y ,則稱 Z 對(duì)X 傳遞函數(shù)依賴(Transitive Functional Dependency 。為了綜合說(shuō)明以上概念,假定有如下關(guān)系 , S (學(xué)號(hào) , 姓名 , 性別 , 系名,系主任,課程號(hào) , 課程名 , 成績(jī) ,主鍵為(學(xué)號(hào),課程號(hào) 。則函數(shù)依賴關(guān)系有:(學(xué)號(hào),課程號(hào)成績(jī),即(學(xué)號(hào),課程號(hào)函數(shù)決定成績(jī),或者說(shuō)成績(jī)函數(shù)依賴于 (學(xué)號(hào),課程號(hào) 。因?yàn)橐粋€(gè)成績(jī)必定依賴于一個(gè)學(xué)生選修的某一門課程。同時(shí)還有:學(xué)號(hào) 姓名,學(xué)號(hào)性別,學(xué)號(hào)系名,系名系主任,課程號(hào)課程名等函數(shù)依賴關(guān)系。對(duì)于(學(xué)號(hào),課程

41、號(hào)成績(jī),由于學(xué)號(hào) /成績(jī),課程號(hào) /成績(jī)(即學(xué)生學(xué)號(hào)或課程號(hào)都不能唯一確定一個(gè)學(xué)生的成績(jī) ,所以有(學(xué)號(hào),課程號(hào) f成績(jī),即成績(jī)完全函數(shù) 依賴于學(xué)號(hào)和課程號(hào)。對(duì)于(學(xué)號(hào),課程號(hào)姓名,由于學(xué)號(hào)姓名,因此有(學(xué)號(hào),課程號(hào) p姓名, 即姓名部分函數(shù)依賴于學(xué)號(hào)和課程號(hào)。由于學(xué)號(hào)系名,并且有系名 /學(xué)號(hào),系名系主任,因此學(xué)號(hào)系主任是傳遞函數(shù) 依賴關(guān)系。二、規(guī)范化1. 為什么要對(duì)關(guān)系模式進(jìn)行規(guī)范化當(dāng)設(shè)計(jì)完一個(gè)關(guān)系模式后,我們要考察它是否一個(gè) “好”的模式,或者說(shuō)看它是否存在 問(wèn)題。下面通過(guò)一個(gè)例子,來(lái)分析一個(gè)設(shè)計(jì)不好的關(guān)系模式有可能會(huì)出現(xiàn)的問(wèn)題。例如:對(duì)于前面的關(guān)系 S (學(xué)號(hào) , 姓名 , 性別 , 系

42、名,系主任,課程號(hào) , 課程名 , 成績(jī) ,存 在如下問(wèn)題:(1數(shù)據(jù)冗余。當(dāng)一個(gè)學(xué)生選修多門課程時(shí),就會(huì)導(dǎo)致姓名、性別、系名、系主任和 課程名多次重復(fù)存儲(chǔ),造成數(shù)據(jù)冗余。(2數(shù)據(jù)修改復(fù)雜。由于數(shù)據(jù)存儲(chǔ)冗余,當(dāng)更新某些數(shù)據(jù)項(xiàng)時(shí),可能一部分修改了, 而另一部分字段修改, 造成存儲(chǔ)數(shù)據(jù)的不一致性。 例如, 當(dāng)一個(gè)學(xué)生從計(jì)算機(jī)系轉(zhuǎn)到信息管 理系后,不但要修改系名 , 還要修改系主任,從而導(dǎo)致數(shù)據(jù)修改復(fù)雜化。(3數(shù)據(jù)插入異常。如果某個(gè)學(xué)生未選修課程,則其學(xué)號(hào)、姓名、性別等基本信息也 無(wú)法插入, 因?yàn)檎n程號(hào)為空, 關(guān)系數(shù)據(jù)模式規(guī)定主鍵不能為空或部分為空, 從而出現(xiàn)數(shù)據(jù)插 入異常。(4數(shù)據(jù)刪除異常。如果某個(gè)

43、學(xué)生選修了一門課程,后來(lái)又不選了,則應(yīng)當(dāng)刪除該學(xué) 生此門課程的記錄。 但由于該學(xué)生只選修了一門課程, 那么刪除掉這條記錄后, 該學(xué)生的學(xué) 號(hào)、姓名、性別等基本信息也刪除了,從而出現(xiàn)刪除異常。之所以會(huì)出現(xiàn)以上幾個(gè)問(wèn)題, 是因?yàn)檫@個(gè)關(guān)系模式?jīng)]有設(shè)計(jì)好, 使得某些屬性之間存在 著“不良” 的函數(shù)依賴。解決上述問(wèn)題的方法就是進(jìn)行關(guān)系模式的合理分解, 也就是進(jìn)行關(guān) 系模式的規(guī)范化。2. 范式對(duì)關(guān)系模式的規(guī)范化,就是要使它滿足不同級(jí)別的范式。范式(Normal Forms, 記作 NF 的概念是由 E.F.codd 在 1971年提出的,他在 1971年 1972年提出了第一范式(1NF 、 第二范式(2

44、NF 與第三范式(3NF 。 1974年 codd 和 Boyce 又共同提出了 BCNF 。 1976年 Fagin 提出了 4NF ,后來(lái)又有人提出了 5NF 。各范式之間的關(guān)系(如圖 3-5所示表示為: 12345N F N F N F B C N F N F N F通過(guò)模式分解把屬于低級(jí)范式的關(guān)系模式轉(zhuǎn)換為幾個(gè)屬于高級(jí)范式的關(guān)系模式的集合, 這一過(guò)程稱為規(guī)范化 (Normalization。通常把某一關(guān)系 R 為第 n 范式,簡(jiǎn)記為 nNF R 。圖 3-5 各種范式之間的關(guān)系1. 第一范式 (1NF定義 3.1對(duì)于關(guān)系模式 R 的任一關(guān)系 r , 若其每一屬性值都是基本屬性 (或原子

45、屬性 , 則稱 R 為滿足第 1范式的關(guān)系,記作 NFR 1。在任何一個(gè)關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)中, 第一范式是對(duì)關(guān)系模式的一個(gè)必須滿足的要求, 不滿足 第一范式的數(shù)據(jù)庫(kù)模式不能稱為關(guān)系數(shù)據(jù)庫(kù)模式。 因此, 所給出的關(guān)系模式均滿足第一范式。 2. 第二范式 (2NF定義 3.2若關(guān)系模式 R 屬于第 1范式, 且每個(gè)非主屬性都完全函數(shù)依賴于主鍵, 則 R 屬于第二范式,記作 2R N F。例 3.10對(duì)于前面給出的關(guān)系 S , 主鍵為 (學(xué)號(hào), 課程號(hào) 。 由于存在非主屬性姓名、 性別、 課程名部分函數(shù)依賴于(學(xué)號(hào),課程號(hào) 。因此,它不屬于 2NF 。可以通過(guò)模式分解的辦法將非 2NF 的關(guān)系模式分解為

46、多個(gè)滿足 2NF 的關(guān)系模式。分解 51步驟如下:(1首先用組成主鍵的屬性集合的每個(gè)子集作為主鍵構(gòu)成一個(gè)關(guān)系,對(duì)于關(guān)系 S 分解 為如下 3個(gè)子關(guān)系:S1(學(xué)號(hào), ,其中(學(xué)號(hào)為主鍵S2(課程號(hào), ,其中(課程號(hào)為主鍵S3(學(xué)號(hào),課程號(hào), ,其中(學(xué)號(hào),課程號(hào)為主鍵(2對(duì)于每個(gè)子關(guān)系,將依賴于此主鍵的屬性放置到此關(guān)系中,則有:S1(學(xué)號(hào),姓名,性別,系名,系主任 ,其中(學(xué)號(hào)為主鍵S2(課程號(hào),課程名 ,其中(課程號(hào)為主鍵S3(學(xué)號(hào),課程號(hào),成績(jī) ,其中(學(xué)號(hào),課程號(hào)為主鍵由于分解后消除了原關(guān)系模式 S 中的部分函數(shù)依賴,即 S1、 S2和 S3三個(gè)關(guān)系模式都 不存在部分函數(shù)依賴,因此 S1、

47、 S2和 S3都屬于 2NF 。對(duì)于上述分解后的關(guān)系 S1,存儲(chǔ)多少個(gè)學(xué)生,就需要將其所在的系名和系主任存儲(chǔ)多 少遍,出現(xiàn)數(shù)據(jù)冗余現(xiàn)象。其次,當(dāng)組建一個(gè)新系時(shí),如果該系還沒(méi)有招生,雖然已有系名 和系主任,但仍無(wú)法插入此系的信息,因?yàn)檫@時(shí)的學(xué)號(hào)為空,出現(xiàn)插入異常現(xiàn)象。由此可以看出, 滿足第二范式的關(guān)系模式仍然可能出現(xiàn)異常操作。 這是因?yàn)榈诙妒街?要求每個(gè)非主屬性完全依賴于主鍵, 并未限定非主屬性不能函數(shù)依賴于其他非主屬性, 從而 也就允許傳遞依賴的存在。因此,還需要對(duì)滿足第二范式的關(guān)系模式進(jìn)一步判斷與分解。 3. 第三范式 (3NF定義 3.3若關(guān)系模式 R 屬于第二范式, 且每個(gè)非主屬性都不

48、傳遞依賴于主鍵, 則 R 屬 于第三范式。記作 3R N F。例 3.11分解例 3.10中的學(xué)生關(guān)系 S1,使其滿足 3NF 的要求。解:由于在關(guān)系 S1中,學(xué)號(hào) 系主任是傳遞函數(shù)依賴。因此,它不屬于 3NF 。將關(guān)系模式 S1(學(xué)號(hào), 姓名, 性別, 系名, 系主任 進(jìn)一步分解, 以便去掉傳遞依賴關(guān)系, 分解的步驟如下:(1對(duì)于不是候選鍵的每個(gè)決定因子,從關(guān)系中刪除依賴它的所有屬性。在關(guān)系 S1中,系名不是候選鍵,但是決定因子,從關(guān)系 S1中刪除依賴它的屬性系主任,得到新的關(guān) 系 S11(學(xué)號(hào),姓名,性別,系名 。(2新建一個(gè)關(guān)系,該關(guān)系中包含原關(guān)系中不是候選鍵的決定因子以及所有依賴該決

49、定因子的屬性,并將決定因子作為該關(guān)系的主鍵。對(duì)于關(guān)系 S1,新建的關(guān)系為 S12(系名, 系主任 ,主鍵為(系名 。由于分解后消除了原關(guān)系模式中的傳遞依賴,因此 S11和 S12都滿足 3NF 。當(dāng)按第三范式的要求把所有傳遞依賴都消除時(shí), 也應(yīng)該把部分依賴消除。 即若關(guān)系模式 R 屬于第三范式,則每個(gè)非主屬性對(duì)于主鍵既不存在部分依賴,也不存在傳遞依賴。把關(guān)52系模式分解到第三范式, 可以在相當(dāng)程度上減輕原關(guān)系中的異常和信息冗余, 但不能保證完 全消除關(guān)系模式中的各種異常和信息冗余。4. BC范式 (BCNF定義 3.4設(shè)有關(guān)系模式 NFR 1, F 是 R 的函數(shù)依賴集,若 F 中的每個(gè)非平凡

50、函數(shù) 依賴 (XYYX , X 都含有主鍵,則稱 R 是 Boyce-Codd 范式,記作 BCNF R 。 從 BCNF 的定義可以看出, BC 范式既檢查非主屬性,又檢查主屬性,顯然比第三范式限制更嚴(yán)。當(dāng)只檢查非主屬性而不檢查主屬性時(shí),就成了第三范式。因此,任何滿足 BC 范 式的關(guān)系都必然滿足第三范式。例 3.12設(shè)有關(guān)系模式 ,(ZCSAdd ,其中 S 表示街道名, C 表示城市名, Z 表示郵 政編碼。 根據(jù)語(yǔ)義, Add 的函數(shù)依賴集 ,(CZZSCF =, 如圖 3-6所示, , (C S 是主鍵。 圖 3-6關(guān)系模式 ,(ZCSAdd解:NFAdd 3,但 B C N FA

51、d d ,因?yàn)榇嬖诜瞧椒埠瘮?shù)依賴 CZ 。該關(guān)系模式 存在著異常問(wèn)題,由于缺少鍵 ,(SC 中的 S ,若要插入一個(gè)城市的郵編,但不知具體的街 道,該關(guān)系模式就不允許這樣的操作。要消除異常,則必須轉(zhuǎn)化為 BCNF ,將 Add 分解為 ,(,(ZSSZCZZC 兩個(gè)關(guān)系模式,即把 Z 和 C 分開。如果只考慮函數(shù)依賴, 則屬于 BCNF 的關(guān)系模式已達(dá)到最高規(guī)范化程度。 而 4NF 與 5NF 分別涉及到多值依賴和連接依賴,限于篇幅,這里不再討論 4NF 與 5NF 。第四節(jié) 邏輯結(jié)構(gòu)設(shè)計(jì)的任務(wù)邏輯結(jié)構(gòu)設(shè)計(jì)的任務(wù)是把在概念結(jié)構(gòu)設(shè)計(jì)階段設(shè)計(jì)好的 E-R 模型轉(zhuǎn)換為具體的數(shù)據(jù)庫(kù) 管理系統(tǒng)支持的數(shù)據(jù)

52、模型。 本節(jié)以關(guān)系模型為例, 介紹邏輯結(jié)構(gòu)設(shè)計(jì)的任務(wù), 主要包括兩個(gè) 步驟:將 E-R 模型轉(zhuǎn)換為關(guān)系模型和關(guān)系模型的優(yōu)化。一、 E-R 模型向關(guān)系模型的轉(zhuǎn)換進(jìn)行數(shù)據(jù)庫(kù)的邏輯設(shè)計(jì),首選要將概念設(shè)計(jì)中所得的 E-R 圖轉(zhuǎn)換成等價(jià)的關(guān)系模式。 將 E-R 圖轉(zhuǎn)換為關(guān)系模型實(shí)際上就是將實(shí)體、實(shí)體的屬性和實(shí)體之間的聯(lián)系轉(zhuǎn)化為關(guān)系模 式。其中實(shí)體和聯(lián)系都可以表示成關(guān)系, E-R 圖中的屬性可以轉(zhuǎn)換成關(guān)系的屬性。1. 實(shí)體的轉(zhuǎn)換一個(gè)實(shí)體轉(zhuǎn)換為一個(gè)關(guān)系模式, 實(shí)體的屬性就是關(guān)系的屬性, 實(shí)體的主鍵就是關(guān)系的主 鍵。例如,圖 3-7個(gè)給出了一個(gè)教務(wù)管理系統(tǒng)的 E-R 圖。5354 圖 3-7 教務(wù)管理系統(tǒng)的

53、E-R 圖 圖 3-7所示的 E-R 圖中的 4個(gè)實(shí)體學(xué)生、 課程、 教師、 系分別轉(zhuǎn)換成以下 4個(gè)關(guān)系 模式:學(xué)生(學(xué)號(hào),姓名,性別,年齡課程(課程號(hào),課程名,學(xué)分教師(教師號(hào),姓名,性別,職稱系(系名,電話2. 聯(lián)系的轉(zhuǎn)換(1一個(gè) 1:1 聯(lián)系可以轉(zhuǎn)換為一個(gè)獨(dú)立的關(guān)系模式,也可以與任意一端實(shí)體所對(duì)應(yīng)的 關(guān)系模式合并。 如果轉(zhuǎn)換為一個(gè)獨(dú)立的關(guān)系模式, 則與該聯(lián)系相連的各實(shí)體的主鍵以及聯(lián)系 本身的屬性轉(zhuǎn)換為關(guān)系的屬性, 每個(gè)實(shí)體的主鍵均可以作為該關(guān)系的主鍵。 如果是與聯(lián)系的 任意一端實(shí)體所對(duì)應(yīng)的關(guān)系模式合并, 則需要在該關(guān)系模式的屬性中加入另一個(gè)實(shí)體的主鍵 和聯(lián)系本身的屬性。一般情況下, 1:

54、1聯(lián)系不轉(zhuǎn)換為一個(gè)獨(dú)立的關(guān)系模式。圖 3-8 1:1聯(lián)系示例例如, 對(duì)于如圖 3-8所示的 E-R 圖, 如果將聯(lián)系與經(jīng)理一端所對(duì)應(yīng)的關(guān)系模式合并, 則 轉(zhuǎn)換成以下兩個(gè)關(guān)系模式:經(jīng)理(工號(hào),姓名,性別,部門號(hào) ,其中工號(hào)為主鍵,部門號(hào)為引用部門關(guān)系的外鍵。 部門(部門號(hào),部門名 ,其中部門號(hào)為主鍵。如果將聯(lián)系與部門一端所對(duì)應(yīng)的關(guān)系模式合并,則轉(zhuǎn)換成以下兩個(gè)關(guān)系模式:經(jīng)理(工號(hào),姓名,性別 ,其中工號(hào)為主鍵。部門(部門號(hào),部門名,工號(hào) ,其中部門號(hào)為主鍵,工號(hào)為引用經(jīng)理關(guān)系的外鍵。 如果將聯(lián)系轉(zhuǎn)換為一個(gè)獨(dú)立的關(guān)系模式,則轉(zhuǎn)換成以下三個(gè)關(guān)系模式:經(jīng)理(工號(hào),姓名,性別 ,其中工號(hào)為主鍵。部門(部門

55、號(hào),部門名 ,其中部門號(hào)為主鍵。管理(工號(hào),部門號(hào) ,其中工號(hào)與部門號(hào)均可作為主鍵(這里將工號(hào)作為主鍵 ,同 時(shí)也都是外鍵。(2一個(gè) 1:n聯(lián)系可以轉(zhuǎn)換為一個(gè)獨(dú)立的關(guān)系模式,也可以與 n 端實(shí)體所對(duì)應(yīng)的關(guān)系 模式合并。 如果轉(zhuǎn)換為一個(gè)獨(dú)立的關(guān)系模式, 則與該聯(lián)系相連的各實(shí)體的主鍵以及聯(lián)系本身 的屬性轉(zhuǎn)換為關(guān)系的屬性, n 端實(shí)體的主鍵為該關(guān)系的主鍵。一般情況下, 1:n聯(lián)系也不轉(zhuǎn) 換為一個(gè)獨(dú)立的關(guān)系模式。例如,對(duì)于如圖 3-6所示的 E-R 圖中的系與學(xué)生的 1:n聯(lián)系,如果與 n 端實(shí)體學(xué)生所對(duì) 應(yīng)的關(guān)系模式合并,則只需將學(xué)生關(guān)系模式修改為:學(xué)生(學(xué)號(hào),姓名,性別,年齡,系名 ,其中學(xué)號(hào)為主

56、鍵,系名為引用系的外鍵。 如果將聯(lián)系轉(zhuǎn)換為一個(gè)獨(dú)立的關(guān)系模式,則需增加以下關(guān)系模式:系藉(學(xué)號(hào),系名 ,其中學(xué)號(hào)為主鍵,學(xué)號(hào)與系名均為外鍵。(3一個(gè) m:n聯(lián)系要轉(zhuǎn)換為一個(gè)獨(dú)立的關(guān)系模式,與該聯(lián)系相連的各實(shí)體的主鍵以及 聯(lián)系本身的屬性轉(zhuǎn)換為關(guān)系的屬性,該關(guān)系的主鍵為各實(shí)體主鍵的組合。例如, 對(duì)于如圖 3-6所示的 E-R 圖中的學(xué)生與課程的 m:n聯(lián)系, 需轉(zhuǎn)換為如下的一個(gè)獨(dú) 立的關(guān)系模式:選課(學(xué)號(hào),課程號(hào),成績(jī) ,其中(學(xué)號(hào),課程號(hào)為主鍵,同時(shí)也是外鍵。(4三個(gè)或三個(gè)以上的實(shí)體間的一個(gè)多元聯(lián)系可以轉(zhuǎn)換為一個(gè)關(guān)系模式,與該多元聯(lián) 系相連的各實(shí)體的主鍵以及聯(lián)系本身的屬性均轉(zhuǎn)換為該關(guān)系的屬性,

57、關(guān)系的主鍵為各實(shí)體主 鍵的組合。此外,具有相同主鍵的關(guān)系模式可以合并。上述 E-R 圖向關(guān)系模型的轉(zhuǎn)換原則為一般 原則,對(duì)于具體問(wèn)題還要根據(jù)其特殊情況進(jìn)行特殊處理。例如在第二章的例 2.1所給出的圖 書管理情況的 E-R 圖中,讀者與圖書是 m:n的聯(lián)系,按照上述轉(zhuǎn)換原則,借閱聯(lián)系需轉(zhuǎn)換 為如下的一個(gè)獨(dú)立的關(guān)系模式:借閱(借書證號(hào),書號(hào),借閱日期,還書日期 ,其中(借書證號(hào),書號(hào)為主鍵。但 實(shí)際情況是:一個(gè)借書證號(hào)借閱某一本書, 還掉以后還可以再借, 這樣就會(huì)在借閱關(guān)系中出 現(xiàn)兩個(gè)或兩個(gè)以上的具有相同借書證號(hào)和書號(hào)的元組, 由此可以看出, 借書證號(hào)和書號(hào)不能 作為該關(guān)系的主鍵, 必須增加一個(gè)借閱日期屬性, 即 (借書證號(hào), 書號(hào), 借閱日期 為主鍵。 在

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論