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

項目1.5 規范化關系數據模型

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

任務1.5.1 了解關系規范化

1.關系規范化的含義

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

一個低一級范式的關系模式,通過分解可以轉換為若干個高一級范式的關系模式,這種過程稱為關系的規范化。

2.關系規范化的作用

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

所以,要將關系數據模型進行規范化。

3.關系規范化的方法

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

規范化是以函數相關性理論為基礎的,其中最重要的是函數依賴,其定義如下。

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

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

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

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

1NF要求不能表中套表。它是對關系模式最基本的要求,數據庫模式中的所有關系模式都必須是1NF。

請思考:

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

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

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

表1-11 SC1

表1-12 SC2

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

1.第二范式的含義

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

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

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

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

那么,要如何將其轉化為2NF呢?

2.轉化為2NF的方法

將非2NF的關系模式轉化為2NF的辦法是消除部分函數依賴,將其分解為若干個2NF關系模式。消除的方法如下。

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

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

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

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

3.2NF存在的問題

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

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

1.第三范式的含義

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

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

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

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

那么,要如何將其轉化為3NF呢?

2.轉化為3NF的方法

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

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

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

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

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

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

3.3NF存在的問題

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

【課堂實踐4】

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

1)寫出關系模式R的基本函數依賴集。

2)找出關系模式R的候選鍵。

3)關系模式R最高已經達到第幾范式?為什么?

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

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

1.Boyce-Codd范式的含義

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

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

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

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

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

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

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

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

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

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

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

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

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

圖1-7 非BCNF實例

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

2.轉化為BCNF的方法

將3NF的關系模式分解為BCNF的方法如下。

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

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

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

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

3.BCNF存在的問題

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

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

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

任務1.5.6 掌握四種范式的關系

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

圖1-8 四種范式的比較

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

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

【課堂練習】

一、填空題

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

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

3.在概念模型中,通常用實體-聯系圖表示數據的結構,其三個主要的元素是________、________和________。

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

5.數據庫系統中所支持的主要邏輯模型有層次模型、關系數據模型、________和面向對象模型。

6.聯系兩個表的關鍵字稱為________。

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

8.關系模式是對關系結構的定義,是對關系________的描述。

9.對于1:1的聯系,________均是該聯系關系的候選鍵。

10.對于1:n的聯系,關系的鍵是________。

11.對于m:n的聯系,關系的鍵是________。

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

二、選擇題

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

A.數據庫系統管理階段

B.人工管理階段

C.文件系統管理階段

D.操作系統管理階段

2.數據處理進入數據庫系統階段,以下不是這一階段的優點的是( )。

A.有很高的數據獨立性

B.數據不能共享

C.數據整體結構化

D.有完備的數據控制功能

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

A.DDL

B.DML

C.DC

D.DEL

4.數據庫系統的出現使信息系統以( )為中心。

A.數據庫

B.用戶

C.軟件

D.硬件

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

A.實體

B.實體鍵

C.屬性

D.關系鍵

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

A.現實世界到信息世界的抽象

B.描述信息世界的數據模型

C.對現實世界的描述

D.描述機器世界的數據模型

7.關系數據模型的數據結構是( )。

A樹

B.圖

C.表

D.二維表

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

A.元組

B.行

C.記錄

D.屬性

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

A.實體完整性規則

B.參照完整性規則

C.用戶自定義完整性規則

D.域完整性規則

三、簡答題

1.簡述數據、數據庫、數據庫管理系統和數據庫系統的定義。

2.數據庫系統有哪些特點?

3.數據庫管理系統的主要功能有哪些?

4.在關系代數中,等值條件連接和自然連接的區別是什么?

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

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

四、設計題

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

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

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

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

(1)寫出關系模式SCT的基本函數依賴集。

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

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

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

【課外實踐】

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

要求:

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

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

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

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

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

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

要求:

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

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

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

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

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

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

要求:

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

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

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

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

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

實踐任務4 繪制房地產交易中客戶、業務員和合同間關系的E-R圖

要求:

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

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

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

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

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

實踐任務5 確定表中的關鍵字

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

表1-13 部門表

表1-14 員工表

要求:

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

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

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

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

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

(6)解釋部門表和員工表是如何通過關鍵字實現數據完整性的。

實踐任務6 規范化數據

已知項目表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轉換成滿足1NF條件的表。

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

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

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

(9)簡述規范化數據帶來的不利影響。

主站蜘蛛池模板: 富川| 博罗县| 上虞市| 东兴市| 泰州市| 高雄市| 吉首市| 牙克石市| 潼关县| 宜黄县| 财经| 花垣县| 武威市| 松江区| 万州区| 右玉县| 崇左市| 久治县| 杨浦区| 四子王旗| 宜丰县| 平远县| 武威市| 独山县| 博客| 金湖县| 乌兰察布市| 八宿县| 嘉义市| 吉隆县| 三台县| 博客| 合阳县| 贺州市| 涪陵区| 华安县| 肇州县| 伊春市| 壶关县| 积石山| 固原市|