官术网_书友最值得收藏!

項目1.5 規(guī)范化關(guān)系數(shù)據(jù)模型

在關(guān)系數(shù)據(jù)庫中,對于同一個問題,選用不同關(guān)系模式集合作為數(shù)據(jù)庫模式,其性能的優(yōu)劣是大不相同的,某些數(shù)據(jù)庫模式的設(shè)計常常會帶來存儲異常,這不利于實際應用。為區(qū)分數(shù)據(jù)庫模式的優(yōu)劣,常常把關(guān)系模式分為各種不同等級的范式(Normal Form)。

任務1.5.1 了解關(guān)系規(guī)范化

1.關(guān)系規(guī)范化的含義

通常將關(guān)系模式分為5個級別,即5種范式。滿足最低條件的稱為第一范式,簡稱1NF。在第一范式基礎(chǔ)上進一步滿足一些要求的可升級為第二范式(2NF),其余依次類推。通常,關(guān)系模式R是第X范式就寫成R∈XNF。

一個低一級范式的關(guān)系模式,通過分解可以轉(zhuǎn)換為若干個高一級范式的關(guān)系模式,這種過程稱為關(guān)系的規(guī)范化。

2.關(guān)系規(guī)范化的作用

關(guān)系規(guī)范化的主要目的是解決數(shù)據(jù)庫中數(shù)據(jù)冗余、插入異常、刪除異常和更新異常等數(shù)據(jù)存儲問題。例如,在關(guān)系模式SCD(學號,姓名,課程名,成績,教師名,職稱)中,如果有200名學生學習了數(shù)據(jù)庫基礎(chǔ)這門課程,那么在SCD表中,就必須重復輸入200次教師的名字和教師的職稱信息,因此這種關(guān)系模式存在數(shù)據(jù)冗余的問題;如果要在SCD表中插入劉強老師的姓名和職稱信息,但劉強老師未開課,那么會造成無法插入主鍵(學號+課程名)的值,因此這種關(guān)系模式還存在插入異常的問題;當刪除了SCD表中數(shù)據(jù)庫基礎(chǔ)這門課程的信息時,同時也會刪除相關(guān)任課教師的信息,因此這種關(guān)系模式又存在刪除異常的問題;當某個教師的職稱發(fā)生變化時,除了要更新SCD表中的職稱信息,還需要更新教師表中的職稱信息,這樣不僅加大了維護工作量,還容易造成表間的數(shù)據(jù)不一致問題,因此這種關(guān)系模式還存在更新異常的問題。

所以,要將關(guān)系數(shù)據(jù)模型進行規(guī)范化。

3.關(guān)系規(guī)范化的方法

關(guān)系規(guī)范化的基本方法是逐步消除關(guān)系模式中不合適的數(shù)據(jù)依賴,使關(guān)系模式達到某種程度的分離,也就是說,不要將若干事物混在一起,而要彼此分開,用一個關(guān)系表示一事或一物,所以,規(guī)范化的過程也被認為是“單一化”的過程。

規(guī)范化是以函數(shù)相關(guān)性理論為基礎(chǔ)的,其中最重要的是函數(shù)依賴,其定義如下。

給定一個關(guān)系模式R,有屬性(或?qū)傩越M)A和B,如果B的每個值都與A的唯一確定值對應,則稱B函數(shù)依賴于A,A被稱為決定因素。如果B的每個值完全能由A值決定,則稱B完全函數(shù)依賴于A。如果B的每個值只依賴于A中的部分屬性,則稱B部分函數(shù)依賴于A。如果關(guān)系模式R中有屬性A、B、C,C函數(shù)依賴于B,B函數(shù)依賴于A,則稱C傳遞函數(shù)依賴于A。

下面通過任務1.5.2~任務1.5.5來認識各級范式。

任務1.5.2 認識第一范式(1NF)

設(shè)R是一個關(guān)系模式,如果R中的每個屬性都是不可分解的,則稱R是第一范式,記為R∈1NF。

1NF要求不能表中套表。它是對關(guān)系模式最基本的要求,數(shù)據(jù)庫模式中的所有關(guān)系模式都必須是1NF。

請思考:

前面提到的關(guān)系模式SCD(學號,姓名,……)是否是1NF?

【例1-4】判斷如表1-11所示的SC1表是否是1NF?若不是,如何修改?

分析:該SC1表不是1NF,因為每個元組的課程名中都包含了若干門課程,是可以分解為若干單門課程的。對于這樣的關(guān)系模式,修改某個學生的選課情況,涉及該學生原來的所有課程名,這是很不方便的。為避免這樣的問題,可以將選修關(guān)系SC1的課程名屬性拆開,形成如表1-12所示的SC2關(guān)系形式。顯然,SC2∈1NF。

表1-11 SC1

表1-12 SC2

任務1.5.3 認識第二范式(2NF)

1.第二范式的含義

如果關(guān)系模式R是1NF,且每個非鍵屬性都完全函數(shù)依賴于鍵屬性,則稱R是第二范式,記為R∈2NF。

如果關(guān)系模式中存在部分函數(shù)依賴,則會造成插入異常。在2NF中,不存在非鍵屬性對鍵屬性的部分函數(shù)依賴關(guān)系,因此2NF解決了插入異常問題。

例1-5】 判斷關(guān)系模式“SCD(學號,姓名,課程名,成績,學院名稱,院長)”是否是2NF?為什么?

分析:該關(guān)系模式是1NF,但不是2NF。因為該關(guān)系模式的鍵是(學號+課程名),對于非鍵屬性,如姓名、學院名稱、院長來說,它們只依賴于學號,而與課程名無關(guān)。

那么,要如何將其轉(zhuǎn)化為2NF呢?

2.轉(zhuǎn)化為2NF的方法

將非2NF的關(guān)系模式轉(zhuǎn)化為2NF的辦法是消除部分函數(shù)依賴,將其分解為若干個2NF關(guān)系模式。消除的方法如下。

1)把關(guān)系模式中對鍵完全函數(shù)依賴的非主屬性與決定它們的鍵放在一個關(guān)系模式中。

2)把對鍵部分函數(shù)依賴的非主屬性和決定它們的主屬性放在一個關(guān)系模式中。

3)如果分解后的新模式仍不是2NF,則繼續(xù)按照前面的方法進行分解,直到達到要求。

在關(guān)系模式SCD中,成績完全函數(shù)依賴于鍵(學號+課程名),可將它們放在一個關(guān)系模式中,如:SD(學號,姓名,學院名,院長);姓名、學院名、院長只依賴于學號,可將它們放在另一個關(guān)系模式中,如:SC(學號,課程名,成績)。分解后的關(guān)系模式SD和SC中都不存在部分函數(shù)依賴,所以它們都是2NF。

3.2NF存在的問題

2NF雖然消除了數(shù)據(jù)的插入異常,但仍然存在其他存儲問題。例如:關(guān)系模式SD既包含學生信息,又包含學院信息,所以仍存在問題,須進一步分解。這就需要更高級別的范式。

任務1.5.4 認識第三范式(3NF)

1.第三范式的含義

如果關(guān)系模式R是2NF,且沒有一個非鍵屬性傳遞依賴于鍵,則稱R是第三范式,記為R∈3NF。

如果關(guān)系模式中存在傳遞函數(shù)依賴,則會造成刪除異常。在3NF中,消除了傳遞函數(shù)依賴,因此3NF解決了數(shù)據(jù)的刪除異常問題。

例1-6】 判斷關(guān)系模式“SD(學號,姓名,學院名稱,院長)”是否是3NF?為什么?

分析:該關(guān)系模式是2NF,但不是3NF。因為該關(guān)系模式中存在著:主鍵學號決定非鍵屬性學院名(學號→學院名)、學院名決定院長(學院名→院長),即院長傳遞函數(shù)依賴于學號,因此關(guān)系模式SD不是3NF。

那么,要如何將其轉(zhuǎn)化為3NF呢?

2.轉(zhuǎn)化為3NF的方法

將非3NF的關(guān)系模式轉(zhuǎn)化為3NF的辦法是消除傳遞函數(shù)依賴,將其進一步分解為若干個獨立的第三范式關(guān)系模式。消除的方法如下。

1)把直接對鍵函數(shù)依賴的非主屬性與決定它們的鍵放在一個關(guān)系模式中。

2)把造成傳遞函數(shù)依賴的決定因素連同被它們決定的屬性放在一個關(guān)系模式中。

3)如果分解后的新模式不是3NF,則繼續(xù)按照前面的方法進行分解,直到達到要求。

在關(guān)系模式SD中,姓名、學院名直接依賴主屬性學號,可將它們放在一個關(guān)系模式中,如:S(學號,姓名,學院名);學院名決定院長,學院名是造成傳遞函數(shù)依賴的決定因素,將它們放在另一個關(guān)系模式中,如:D(學院名,院長)。

可以看出,關(guān)系模式S和D各自描述單一的現(xiàn)實事物,都不存在傳遞依賴關(guān)系,所以它們都是3NF。

3.3NF存在的問題

一個關(guān)系模式達到3NF,基本解決了異常問題,但還不能徹底解決數(shù)據(jù)冗余問題。因為3NF不能很好地處理模型中含有多個候選鍵和候選鍵是組合項的情況,因此需要更強的范式。

【課堂實踐4】

假設(shè)某商業(yè)集團數(shù)據(jù)庫中有1個關(guān)系模式R(商店編號,商品編號,數(shù)量,部門編號,負責人),如果規(guī)定:每個商店的每種商品只在一個部門銷售;每個商店的每個部門只有一個負責人;每個商店的每種商品只有一個庫存數(shù)量。

1)寫出關(guān)系模式R的基本函數(shù)依賴集。

2)找出關(guān)系模式R的候選鍵。

3)關(guān)系模式R最高已經(jīng)達到第幾范式?為什么?

4)如果R不屬于3NF,請將R分解成3NF。

任務1.5.5 了解Boyce-Codd范式(BCNF)

1.Boyce-Codd范式的含義

Boyce-Codd范式(BCNF)也稱為擴充的第三范式或增強第三范式。

如果關(guān)系模式R中的所有決定因素都是鍵,則稱R是BCNF。BCNF消除了關(guān)系中冗余的鍵,由BCNF的定義,可以得到以下結(jié)論。

1)所有非主屬性對每個鍵完全函數(shù)依賴。

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

3)沒有任何屬性完全函數(shù)依賴于非鍵的任何一組屬性。

可以證明,若R是BCNF,則R肯定是3NF。但若R是3NF,則R不一定是BCNF。

例如:學生關(guān)系模式S(學號,姓名,學院名)不僅是3NF,還是BCNF。

分兩種情況進行分析。一種情況假設(shè)姓名可以有重名,則學號是該模型唯一決定因素,它又是鍵,所以關(guān)系模式S是BCNF。另一種情況假設(shè)姓名沒有重名,則學號、姓名都是候選鍵,且除候選鍵以外,該模型沒有其他決定因素,所以關(guān)系模式S仍是BCNF。

例1-7】 有關(guān)系模式STJ(學生,教師,課程),假設(shè):

1)每位教師只教一門課程。

2)一門課程由多位教師講授。

3)對于每門課,每個學生的講課教師只有一位。請判斷STJ是不是BCNF。

分析:由語義可知,關(guān)系模式STJ具有的函數(shù)依賴是:(學生,課程)→教師,教師→課程,(學生,教師)→課程,如圖1-7所示。

圖1-7 非BCNF實例

關(guān)系模式STJ有兩個候選鍵(學生,課程)和(學生,教師),由于沒有任何非主屬性對鍵傳遞依賴或部分依賴,因此模式STJ是3NF。但它不是BCNF,因為教師決定課程,教師是課程的決定因素,而教師這一單一屬性不是鍵,因此,模式STJ不是BCNF。

2.轉(zhuǎn)化為BCNF的方法

將3NF的關(guān)系模式分解為BCNF的方法如下。

1)在3NF關(guān)系模式中,去掉一些主屬性,只保留主鍵,使它們只有唯一的候選鍵。

2)把去掉的主屬性,分別同各自的非主屬性組成新的關(guān)系模式。

3)檢查分解后的新模式,如果仍不是BCNF,則繼續(xù)按照前面的方法進行分解,直到達到要求。

根據(jù)以上方法,可將關(guān)系模式STJ分解為ST(學生,教師)和TJ(教師,課程)兩個關(guān)系模式。

3.BCNF存在的問題

在數(shù)據(jù)庫設(shè)計中,以達到3NF作為主要目標。當然,能夠達到BCNF更好,但從理論上說,達到BCNF有時會破壞原來關(guān)系模式的一些固有特點。

例如,設(shè)有關(guān)系模式R(S,T,V),存在的函數(shù)依賴有(S,T)→V,V→S。

可以驗證,該模型是3NF,但不是BCNF。無論將R如何分解,都將損失函數(shù)依賴(S,T)→V。

任務1.5.6 掌握四種范式的關(guān)系

縱觀四種范式,可以發(fā)現(xiàn)它們之間存在著這樣的關(guān)系:BCNF?3NF?2NF?1NF。從范式所允許的函數(shù)依賴方面進行比較,它們之間有如圖1-8所示的關(guān)系。

圖1-8 四種范式的比較

一般情況下,沒有異常弊病的數(shù)據(jù)庫設(shè)計是好的數(shù)據(jù)庫設(shè)計,一個不好的關(guān)系模式也總是可以通過分解轉(zhuǎn)換成好的關(guān)系模式的集合。但是在分解時要全面衡量,綜合考慮,視實際情況而定。對于那些只要求查詢而不要求插入、刪除等操作的系統(tǒng),幾種異常現(xiàn)象的存在并不影響數(shù)據(jù)庫的操作。這時便不宜過度分解,否則當要進行整體查詢時,需要更多的多表連接操作,這樣有可能得不償失。

在實際應用中,最有價值的是3NF和BCNF,在進行關(guān)系模式的設(shè)計時,通常分解到3NF就足夠了。

【課堂練習】

一、填空題

1.數(shù)據(jù)庫系統(tǒng)各類用戶對表的各種操作請求(數(shù)據(jù)定義、查詢、更新及各種控制)都是由一個復雜的軟件來完成的,這個軟件叫作________。

2.DBMS(數(shù)據(jù)庫管理系統(tǒng))通常提供授權(quán)功能來控制不同的用戶訪問數(shù)據(jù)庫中數(shù)據(jù)的權(quán)限,其目的是為了數(shù)據(jù)庫的________。

3.在概念模型中,通常用實體-聯(lián)系圖表示數(shù)據(jù)的結(jié)構(gòu),其三個主要的元素是________、________和________。

4.學校中有若干個系和若干位教師,每位教師只能屬于一個系,一個系可以有多位教師,系與教師的聯(lián)系類型是________。

5.數(shù)據(jù)庫系統(tǒng)中所支持的主要邏輯模型有層次模型、關(guān)系數(shù)據(jù)模型、________和面向?qū)ο竽P汀?/p>

6.聯(lián)系兩個表的關(guān)鍵字稱為________。

7.關(guān)系中主鍵的取值必須唯一且非空,這條規(guī)則是________完整性規(guī)則。

8.關(guān)系模式是對關(guān)系結(jié)構(gòu)的定義,是對關(guān)系________的描述。

9.對于1:1的聯(lián)系,________均是該聯(lián)系關(guān)系的候選鍵。

10.對于1:n的聯(lián)系,關(guān)系的鍵是________。

11.對于m:n的聯(lián)系,關(guān)系的鍵是________。

12.關(guān)系完整性約束包括________完整性、參照完整性和用戶自定義完整性。

二、選擇題

1.數(shù)據(jù)庫管理技術(shù)的發(fā)展階段不包括( )。

A.數(shù)據(jù)庫系統(tǒng)管理階段

B.人工管理階段

C.文件系統(tǒng)管理階段

D.操作系統(tǒng)管理階段

2.數(shù)據(jù)處理進入數(shù)據(jù)庫系統(tǒng)階段,以下不是這一階段的優(yōu)點的是( )。

A.有很高的數(shù)據(jù)獨立性

B.數(shù)據(jù)不能共享

C.數(shù)據(jù)整體結(jié)構(gòu)化

D.有完備的數(shù)據(jù)控制功能

3.用于定義、撤銷和修改數(shù)據(jù)庫對象的語言是( )。

A.DDL

B.DML

C.DC

D.DEL

4.數(shù)據(jù)庫系統(tǒng)的出現(xiàn)使信息系統(tǒng)以( )為中心。

A.數(shù)據(jù)庫

B.用戶

C.軟件

D.硬件

5.在現(xiàn)實世界中,事物的一般特性在信息世界中稱為( )。

A.實體

B.實體鍵

C.屬性

D.關(guān)系鍵

6.實體-聯(lián)系圖(E-R圖)是( )。

A.現(xiàn)實世界到信息世界的抽象

B.描述信息世界的數(shù)據(jù)模型

C.對現(xiàn)實世界的描述

D.描述機器世界的數(shù)據(jù)模型

7.關(guān)系數(shù)據(jù)模型的數(shù)據(jù)結(jié)構(gòu)是( )。

A樹

B.圖

C.表

D.二維表

8.關(guān)系R和S進行自然連接時,要求R和S含有一個或多個公共( )。

A.元組

B.行

C.記錄

D.屬性

9.設(shè)屬性A是關(guān)系R的主屬性,則屬性A不能取空值,這是( )。

A.實體完整性規(guī)則

B.參照完整性規(guī)則

C.用戶自定義完整性規(guī)則

D.域完整性規(guī)則

三、簡答題

1.簡述數(shù)據(jù)、數(shù)據(jù)庫、數(shù)據(jù)庫管理系統(tǒng)和數(shù)據(jù)庫系統(tǒng)的定義。

2.數(shù)據(jù)庫系統(tǒng)有哪些特點?

3.數(shù)據(jù)庫管理系統(tǒng)的主要功能有哪些?

4.在關(guān)系代數(shù)中,等值條件連接和自然連接的區(qū)別是什么?

5.試述關(guān)系數(shù)據(jù)模型的完整性規(guī)則。在參照完整性規(guī)則中,為什么外鍵屬性的值也可以為空?什么情況下才可以為空?

6.什么是關(guān)系規(guī)范化?關(guān)系規(guī)范化的目的是什么?關(guān)系規(guī)范化的基本方法是什么?1NF至BCNF,它們之間的關(guān)系是什么?

四、設(shè)計題

1.試給出三個實際情況的E-R圖,要求實體之間具有一對一、一對多、多對多各種不同的聯(lián)系。

2.某學院有若干系,每個系有若干班級和教研室,每個教研室有若干教師,每個班有若干學生,每個學生選修若干課程,每門課程可由若干學生選修。請使用E-R圖繪制該學院的概念模型。

3.某商品銷售公司有若干銷售部門,每個銷售部門有若干員工,銷售多種商品,所有商品由一個廠家提供,設(shè)計該公司銷售系統(tǒng)的E-R模型,并將其轉(zhuǎn)換為關(guān)系模式。

4.設(shè)關(guān)系模式SCT(學號,課程號,成績,教師名,教師地址)。如果規(guī)定:每個學生每學一門課程只有一個成績;每門課只有一個教師任教;每個教師只有一個地址(無同名教師)。

(1)寫出關(guān)系模式SCT的基本函數(shù)依賴集。

(2)找出關(guān)系模式SCT的候選鍵。

(3)試把SCT分解成2NF模式集,并說明理由。

(4)試把SCT分解成3NF模式集,并說明理由。

【課外實踐】

實踐任務1 繪制表示班級與學生關(guān)系的E-R圖

要求:

(1)確定班級實體和學生實體的屬性和鍵。

(2)確定班級和學生之間的聯(lián)系,給聯(lián)系命名并指出聯(lián)系的類型。

(3)確定聯(lián)系本身的屬性。

(4)繪制班級與學生關(guān)系的E-R圖。

(5)將E-R圖轉(zhuǎn)化為表,寫出表的關(guān)系模式并標明各自的主鍵或外鍵。

實踐任務2 繪制表示顧客與商品關(guān)系的E-R圖

要求:

(1)確定顧客實體和商品實體的屬性和鍵。

(2)確定顧客和商品之間的聯(lián)系,給聯(lián)系命名并指出聯(lián)系的類型。

(3)確定聯(lián)系本身的屬性。

(4)繪制顧客與商品關(guān)系的E-R圖。

(5)將E-R圖轉(zhuǎn)化為表,寫出表的關(guān)系模式并標明各自的主鍵或外鍵。

實踐任務3 繪制表示學校與校長關(guān)系的E-R圖

要求:

(1)確定學校實體和校長實體的屬性和鍵。

(2)確定學校和校長之間的聯(lián)系,給聯(lián)系命名并指出聯(lián)系的類型。

(3)確定聯(lián)系本身的屬性。

(4)繪制學校與校長關(guān)系的E-R圖。

(5)將E-R圖轉(zhuǎn)化為表,寫出表的關(guān)系模式并標明各自的主鍵或外鍵。

實踐任務4 繪制房地產(chǎn)交易中客戶、業(yè)務員和合同間關(guān)系的E-R圖

要求:

(1)確定客戶實體、業(yè)務員實體和合同實體的屬性和鍵。

(2)確定客戶、業(yè)務員和合同三者之間的相互聯(lián)系,給聯(lián)系命名并指出聯(lián)系類型。

(3)確定聯(lián)系本身的屬性。

(4)繪制客戶、業(yè)務員和合同三者關(guān)系的E-R圖。

(5)將E-R圖轉(zhuǎn)化為表,寫出表的關(guān)系模式并標明各自的主鍵或外鍵。

實踐任務5 確定表中的關(guān)鍵字

已知部門表和員工表,分別如表1-13和表1-14所示。

表1-13 部門表

表1-14 員工表

要求:

(1)確定部門表和員工表中的候選鍵(單屬性或組合屬性),并陳述理由。

(2)在候選鍵中確定部門表和員工表的主鍵。

(3)確定部門表和員工表中的共有屬性。

(4)指出哪個表中的哪個屬性是外鍵。

(5)確定哪個表是主表,哪個表是從表。

(6)解釋部門表和員工表是如何通過關(guān)鍵字實現(xiàn)數(shù)據(jù)完整性的。

實踐任務6 規(guī)范化數(shù)據(jù)

已知項目表1、項目表2、職員表和項目表3,分別如表1-15~表1-18所示。

表1-15 項目表1

表1-16 項目表2

表1-17 職員表

表1-18 項目表3

要求:

(1)判斷項目表1是否滿足1NF的條件,并說明理由。

(2)判斷項目表2是否滿足2NF的條件,并說明理由。

(3)判斷職員表是否滿足3NF的條件,并說明理由。

(4)判斷項目表3是否滿足BCNF的條件,并說明理由。

(5)將項目表1轉(zhuǎn)換成滿足1NF條件的表。

(6)將項目表2轉(zhuǎn)換成滿足2NF條件的表。

(7)將職員表轉(zhuǎn)換成滿足3NF條件的表。

(8)將項目表3轉(zhuǎn)換成滿足BCNF條件的表。

(9)簡述規(guī)范化數(shù)據(jù)帶來的不利影響。

主站蜘蛛池模板: 上饶县| 永年县| 楚雄市| 莱芜市| 寿阳县| 甘洛县| 綦江县| 中牟县| 昌黎县| 禄劝| 钟祥市| 晴隆县| 澄迈县| 昭平县| 棋牌| 台山市| 天峻县| 嘉黎县| 京山县| 宁阳县| 宣城市| 星子县| 娄底市| 柘荣县| 四平市| 礼泉县| 垦利县| 加查县| 双桥区| 昭通市| 阿图什市| 晋城| 汉寿县| 海安县| 达拉特旗| 炎陵县| 会昌县| 平远县| 福海县| 辉县市| 灵川县|