資料庫(kù)系統(tǒng)課程-課件_第1頁(yè)
資料庫(kù)系統(tǒng)課程-課件_第2頁(yè)
資料庫(kù)系統(tǒng)課程-課件_第3頁(yè)
資料庫(kù)系統(tǒng)課程-課件_第4頁(yè)
資料庫(kù)系統(tǒng)課程-課件_第5頁(yè)
已閱讀5頁(yè),還剩133頁(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)介

第四章

資料庫(kù)正規(guī)化課程名稱:資料庫(kù)系統(tǒng)授課老師:李春雄博士第四章

資料庫(kù)正規(guī)化課程名稱:資料庫(kù)系統(tǒng)本章學(xué)習(xí)目標(biāo)

1.讓讀者瞭解資料庫(kù)正規(guī)化的概念及目的。2.讓讀者瞭解資料庫(kù)正規(guī)化(Normalization)

程序及規(guī)則。本章學(xué)習(xí)目標(biāo)1.讓讀者瞭解資料庫(kù)正規(guī)化的概念及目的。本章內(nèi)容4-1正規(guī)化的概念4-2正規(guī)化的目的4-3功能相依(FunctionalDependence;FD)4-4資料庫(kù)正規(guī)化(Normalization)4-5反正規(guī)化(De-normalization)4-6結(jié)語(yǔ)本章內(nèi)容4-1正規(guī)化的概念前言一般的初學(xué)者在進(jìn)行資料庫(kù)設(shè)計(jì)時(shí),以為用一個(gè)資料表就可以儲(chǔ)存全部的資料,或憑著自己的直覺(jué)而沒(méi)有經(jīng)過(guò)完整的規(guī)劃,就隨意的將資料表分割成許多小的資料表,這種設(shè)計(jì)方法,不但浪費(fèi)儲(chǔ)存空間,更嚴(yán)重影響到資料庫(kù)不一致的現(xiàn)象,以致於DBA(資料庫(kù)管理師)維護(hù)困難。為了避免以上的問(wèn)題產(chǎn)生,唯一的方法,就是在設(shè)計(jì)關(guān)聯(lián)式資料庫(kù)之前,一定先要完成資料的正規(guī)化(Normalization)。前言一般的初學(xué)者在進(jìn)行資料庫(kù)設(shè)計(jì)時(shí),以為用4-1正規(guī)化的概念

資料庫(kù)是用來(lái)存放資料的地方,因此,如何妥善的規(guī)劃資料庫(kù)綱要

(DatabaseSchema)是一件很重要的工作,但是,資料庫(kù)綱要的設(shè)計(jì)必須要配合實(shí)務(wù)上的需要,因此,當(dāng)資料庫(kù)綱要設(shè)計(jì)完成後,如何檢視設(shè)計(jì)是否良好,就必需要使用正規(guī)化(Normalization)的方法論了。何謂正規(guī)化(Normalization)?就是結(jié)構(gòu)化分析與設(shè)計(jì)中,建構(gòu)「資料模式」所運(yùn)用的一個(gè)技術(shù),其目的是為了降低資料的「重覆性」與避免「更新異?!沟那闆r發(fā)生。

因此,就必須將整個(gè)資料表中重複性的資料剔除,否則在關(guān)聯(lián)表中會(huì)造成新增異常、刪除異常、修改異常的狀況發(fā)生。4-1正規(guī)化的概念資料庫(kù)是用來(lái)存放資料4-2正規(guī)化的目的一般而言,正規(guī)化的精神就是讓資料庫(kù)中重複的欄位資料減到最少,並且能快速的找到資料,以提高關(guān)聯(lián)性資料庫(kù)的效能?!灸康摹?.降低資料重複性(DataRedundancy)。2.避免資料更新異常(Anomalies)。4-2正規(guī)化的目的一般而言,正規(guī)化的精神一、降低資料重複性(DataRedundancy)

正規(guī)化的目的是什麼呢?簡(jiǎn)單來(lái)說(shuō),就是降低資料重複的狀況發(fā)生。試想,當(dāng)校務(wù)系統(tǒng)的「學(xué)籍資料」分別存放在「教務(wù)處」與「學(xué)務(wù)處」時(shí),不僅資料重覆儲(chǔ)存,浪費(fèi)空間,更嚴(yán)重的是,當(dāng)學(xué)生姓名變更時(shí),就必須要同時(shí)更改「教務(wù)處」與「學(xué)務(wù)處」的「學(xué)籍資料」,否則將導(dǎo)致資料不一致的現(xiàn)象,因此,資料庫(kù)如果沒(méi)有事先進(jìn)行正規(guī)化,將會(huì)增加應(yīng)用系統(tǒng)撰寫的困難,同時(shí)也會(huì)增加資料庫(kù)的處理負(fù)擔(dān),所以降低資料重複性是「正規(guī)化」的重要工作。一、降低資料重複性(DataRedundancy)【方法】

將「教務(wù)處」與「學(xué)務(wù)處」中,把相同的資料項(xiàng),抽出來(lái)組成一個(gè)新的資料表(學(xué)籍資料表),如下圖所示:正規(guī)化:將兩個(gè)表格切成三個(gè)資料表說(shuō)明:在正規(guī)化之後,「學(xué)籍資料表」的主鍵(P.K.)分別與「學(xué)務(wù)處資料表」的

外鍵(F.K.)及「教務(wù)處資料表」的外鍵(F.K.)進(jìn)行關(guān)聯(lián),以產(chǎn)生關(guān)聯(lián)式資料庫(kù)?!痉椒ā繉ⅰ附虅?wù)處」與「學(xué)務(wù)處」中,把相同的資料項(xiàng),抽出二、避免資料更新異常(Anomalies)

(一)新增異常(InsertAnomalies)新增某些資料時(shí)必須同時(shí)新增其他的資料,否則會(huì)產(chǎn)生新增異?,F(xiàn)象。亦即在另一個(gè)實(shí)體的資料尚未插入之前,無(wú)法插入目前這個(gè)實(shí)體的資料。(二)修改異常(UpdateAnomalies)修改某些資料時(shí)必須一併修改其他的資料,否則會(huì)產(chǎn)生修改異?,F(xiàn)象。(三)刪除異常(DeleteAnomalies)刪除某些資料時(shí)必須同時(shí)刪除其他的資料,否則會(huì)產(chǎn)生刪除異常現(xiàn)象。亦即刪除單一資料列造成多個(gè)實(shí)體的資訊遺失。二、避免資料更新異常(Anomalies)(一)新增異常(【實(shí)例】

假設(shè)某國(guó)立大學(xué)開設(shè)「網(wǎng)路碩士學(xué)分班」,其學(xué)員課程收費(fèi)表如下所示。學(xué)員課程收費(fèi)表【說(shuō)明】在上面的學(xué)員課程收費(fèi)表中雖然僅僅只有三個(gè)欄位,但是已不算是

一個(gè)良好的儲(chǔ)存結(jié)構(gòu),因?yàn)榇吮砀裰杏匈Y料重覆現(xiàn)象。【例如】有些課程的費(fèi)用在許多學(xué)員身上重覆出現(xiàn)(S0001與S0003;S0002與S0005),因此可能會(huì)造成錯(cuò)誤或不一致的異常(Anomalies)現(xiàn)象?!痉治觥繌南乱豁?yè)開始學(xué)號(hào)課號(hào)學(xué)分費(fèi)S0001C0013000S0002C0024000S0003C0013000S0004C0035000S0005C0024000學(xué)員的選課需知如下:1.每一位學(xué)員只能選修一門課程。2.每一門課程均有收費(fèi)標(biāo)準(zhǔn)。(C001為3000元,C002為4000元,C003為5000元)【實(shí)例】假設(shè)某國(guó)立大學(xué)開設(shè)「網(wǎng)路碩士學(xué)分班」,其學(xué)員課程【分析】三種可能的異常(Anomalies)現(xiàn)象

(一)新增異常

假設(shè)學(xué)校又要新增C004課程,但此課程無(wú)法立即新增到資料表中,除非至少有一位學(xué)員選修了C004這門課程?!痉治觥咳N可能的異常(Anomalies)現(xiàn)象(一)新增(二)修改異常

假如C002課程的學(xué)分費(fèi)由4000元調(diào)整為4500元時(shí),若「C002課程」有多位學(xué)員選修時(shí),因此,修改「S0002」學(xué)員的學(xué)分費(fèi)時(shí),可能有些記錄未修改到(S0005),造成資料的不一致現(xiàn)象。(二)修改異常(三)刪除異常

假設(shè)學(xué)員S0004退選時(shí),同時(shí)也刪除C003這門課程,由於該課程只有S0004這位學(xué)員選修,因此若把這一筆記錄刪除,從此我們將失去C003這門課程及其學(xué)分費(fèi)的資訊。(三)刪除異?!窘鉀Q方法】正規(guī)化

由於上述的分析,發(fā)現(xiàn)學(xué)員課程收費(fèi)表並不是一個(gè)良好的儲(chǔ)存結(jié)構(gòu),因此,我們就必須要採(cǎi)用4-4節(jié)所要討論的正規(guī)化,將學(xué)員課程收費(fèi)表分割成兩個(gè)資料表,即「選課表」與「課程收費(fèi)對(duì)照表」,因此,才不會(huì)發(fā)生上述的異?,F(xiàn)象。學(xué)號(hào)課號(hào)學(xué)分費(fèi)S0001C0013000S0002C0024000S0003C0013000S0004C0035000S0005C0024000課程收費(fèi)表學(xué)號(hào)課號(hào)S0001C001S0002C002S0003C001S0004C003S0005C002選課表課號(hào)學(xué)分費(fèi)C0013000C0024000C0035000課程收費(fèi)對(duì)照表正規(guī)化正規(guī)化【解決方法】正規(guī)化由於上述的分析,發(fā)現(xiàn)學(xué)員課程收費(fèi)表並不題目:建立「選課表」與「課程收費(fèi)對(duì)照表」的關(guān)聯(lián)圖先備技能:1.參考附錄一Access2010的基本操作2.建立關(guān)聯(lián)式資料庫(kù)實(shí)作步驟:步驟一:開啟資料庫(kù)

開啟附書光碟中「01_Access2010(範(fàn)例資料庫(kù))\ch4\素材檔\

ch4-2B.accdb

」步驟二:資料庫(kù)工具/資料庫(kù)關(guān)聯(lián)圖/「選課表」的「課號(hào)」外鍵拖曵到「課程收費(fèi)對(duì)照表」的「課號(hào)」主鍵,此外,在「編輯關(guān)聯(lián)」對(duì)話方塊中,說(shuō)明「關(guān)聯(lián)類型:一對(duì)多」,其中一的那方代表「主鍵」,而多的那方代表「外鍵」。步驟三:測(cè)試三種可能的異?,F(xiàn)象。1.新增異常測(cè)試2.修改異常測(cè)試3.刪除異常測(cè)試您可以參考「完成檔\ch4-2B.accdb」【Access上機(jī)實(shí)作1】題目:建立「選課表」與「課程收費(fèi)對(duì)照表」的關(guān)聯(lián)圖【Acce【

Access上機(jī)實(shí)作】請(qǐng)建立「正規(guī)化」後的兩個(gè)表格,「選課表」與「課程收費(fèi)對(duì)照表」,並建立關(guān)聯(lián)圖學(xué)號(hào)課號(hào)S0001C001S0002C002S0003C001S0004C003S0005C002選課表課號(hào)學(xué)分費(fèi)C0013000C0024000C0035000課程收費(fèi)對(duì)照表資料庫(kù)名稱:ch4-2B.accdb【Access上機(jī)實(shí)作】請(qǐng)建立「正規(guī)化」後的兩個(gè)表格,4-3功能相依(FunctionalDependence;FD)

一、功能相依的概念【定義】

是指資料表中各欄位之間的相依性。亦即某欄位不能單獨(dú)存在,必須要和其他欄位一起存在時(shí)才有意義,稱這兩個(gè)欄位具有功能相依?!纠纭繉W(xué)生資料表【說(shuō)明】在上面的資料表中,「姓名」欄位的值必須搭配「學(xué)號(hào)」欄位才有意義,則我們說(shuō)『姓名欄位相依於學(xué)號(hào)欄位』。姓名學(xué)號(hào)性別系所電話地址4-3功能相依(FunctionalDependence換言之,在「學(xué)生資料表」中,「學(xué)號(hào)」決定了「姓名」,也決定了「性別」、「系所」、「電話」、「地址」等資訊,我們可以用以下圖示的方法來(lái)表示這些功能相依性。【分析】

1.學(xué)號(hào)→姓名

2.學(xué)號(hào)→{姓名,性別,系所,電話,地址}

3.學(xué)號(hào):為決定因素(∵學(xué)號(hào)姓名)4.姓名,性別,系所,電話,地址:為相依因素因此,「學(xué)號(hào)」欄位為主鍵,做為唯一辨識(shí)該筆記錄的欄位?!感彰箼谖槐仨氁嘁漓丁笇W(xué)號(hào)」欄位,對(duì)此資料表來(lái)說(shuō)「姓名」欄位才有意義;同理可證,「地址」欄位亦必須相依於「學(xué)號(hào)」欄位,才有意義。換言之,在「學(xué)生資料表」中,「學(xué)號(hào)」決定了「姓名」,也決定了二、功能相依(FD)的表示方式1.假設(shè)有一個(gè)資料表R,並且有三個(gè)欄位,分別為X,Y,Z,因此,我們就

可以利用一條數(shù)學(xué)式來(lái)表示:R={X,Y,Z}2.假設(shè)在R={X,Y,Z}數(shù)學(xué)式中,X和Y之間存在「功能相依」時(shí),並且

存在Y功能相依於X,則我們可以利用以下的表示式:

(1)Y∝X(Y功能相依於X)(2)XY(X決定Y)若XY時(shí),在FD的左邊X稱為決定因素(Determinant)

在FD的右邊Y稱為相依因素(Dependent)3.示意圖:學(xué)號(hào)(X)姓名(Y)二、功能相依(FD)的表示方式學(xué)號(hào)(X)姓名(Y)4-3.1完全功能相依

(FullFunctionalDependency)

【定義】假設(shè)在關(guān)聯(lián)表R(X,Y,Z)中,包含一組功能相依(X,Y)Z,如果我們從關(guān)聯(lián)表R中移除任一屬性X或Y時(shí),則使得這個(gè)功能相依(X,Y)Z不存在,此時(shí)我們稱Z為「完全功能相依」於(X,Y)。反之,若(X,Y)Z存在,我們稱Z為「部份功能相依」於(X,Y)?!纠纭縶學(xué)號(hào)(X),課號(hào)(Y)}→成績(jī)(Z)

這是「完全功能相依」如果從關(guān)聯(lián)表中移除課號(hào)(Y),則功能相依(X)Z不存在因?yàn)?,「學(xué)號(hào)」和「課號(hào)」兩者一起決定了「成績(jī)」,缺一不可。否則,只有一個(gè)學(xué)號(hào)對(duì)應(yīng)一個(gè)成績(jī),無(wú)法得知該成績(jī)是那一門課程的分?jǐn)?shù)。亦即成績(jī)(Z)完全功能相依於{學(xué)號(hào)(X),課號(hào)(Y)}4-3.1完全功能相依

(FullFun4-3.2部份功能相依

(PartialFunctionalDependency)

【定義】假設(shè)在關(guān)聯(lián)表R(X,Y,Z)中包含一組功能相依(X,Y)Z,如果我們從關(guān)聯(lián)表R中移除任一屬性X或Y時(shí),則使得這個(gè)功能相依(X,Y)Z存在,此時(shí)我們稱Z為「部份功能相依」於(X,Y)?!纠纭縶學(xué)號(hào)(X),身份證字號(hào)(Y)}→姓名(Z)

這是「部份功能相依」如果從關(guān)聯(lián)表中移除身份證字號(hào)(Y),則功能相依(X)Z存在因?yàn)?,「學(xué)號(hào)」也可以決定「姓名」,他們之間也具有功能相依性。4-3.2部份功能相依

(PartialF4-3.3遞移相依

(TransitiveDependency)

【定義】是指在二個(gè)欄位間並非直接相依,而是借助第三個(gè)欄位來(lái)達(dá)成資料

相依的關(guān)係?!纠纭縔相依於X;而Z又相依於Y,如此X與Z之間就是遞移相依的關(guān)係?!臼疽鈭D】在上面的關(guān)聯(lián)表R(X,Y,Z)中包含一組相依XY,YZ,則XZ,此時(shí)我們稱Z遞移相依於X。

4-3.3遞移相依

(Transitive【舉例】

課程代號(hào)→老師編號(hào)老師編號(hào)→老師姓名

這是遞移相依因?yàn)?,「課程代號(hào)」可以決定「老師編號(hào)」,並且「老師編號(hào)」又可以決定「老師姓名」,因此,「課程代號(hào)」與「老師姓名」之間存在遞移相依性。遞移相依性【舉例】課程代號(hào)→老師編號(hào)遞移相依性4-4資料庫(kù)正規(guī)化(Normalization)

【定義】是指將原先關(guān)聯(lián)(表格)的所有資訊,在「分解」之後,仍能由數(shù)個(gè)新關(guān)聯(lián)(表格)中經(jīng)過(guò)「合併」得到相同的資訊。即所謂的「無(wú)損失分解(Losslessdecomposition)」的觀念。

【無(wú)損失分解觀念】當(dāng)關(guān)聯(lián)表R被「分解」成數(shù)個(gè)關(guān)聯(lián)表R1,R2,…,Rn時(shí),則可以再透過(guò)「合併」R1R2…Rn得到相同的資訊R。如下圖所示。

分解合併合併合併分解分解4-4資料庫(kù)正規(guī)化(Normalization)【定義】【實(shí)例】分解合併註:分解:是指透過(guò)「正規(guī)化」技術(shù),將一個(gè)大資料表分割成二個(gè)小資料表?!侗菊陆榻B》

合併:是指透過(guò)「合併」理論,將數(shù)個(gè)小資料表整合成一個(gè)大資料表?!兜诎苏陆榻B》【實(shí)例】分解合併註:分解:是指透過(guò)「正規(guī)化」技術(shù),將一個(gè)大資題目:利用「分割」後的表格,再進(jìn)行「合併」先備技能:1.參考附錄一Access2010的基本操作2.建立關(guān)聯(lián)式資料庫(kù)實(shí)作步驟:步驟一:開啟資料庫(kù)

開啟附書光碟中「01_Access2010(範(fàn)例資料庫(kù))\ch4\素材檔\

ch4-4.accdb

」步驟二:將分割後的兩個(gè)表格,利用SQL合併(已完成)步驟三:以證明無(wú)損失分解觀念,亦即將原先關(guān)聯(lián)(表格)的所有資訊,在「分解」之後,仍能由數(shù)個(gè)新

關(guān)聯(lián)(表格)中經(jīng)過(guò)「合併」得到相同的資訊。您可以參考「完成檔\ch4-4.accdb」【Access上機(jī)實(shí)作2】題目:利用「分割」後的表格,再進(jìn)行「合併」【Access上4-4.1正規(guī)化示意圖正規(guī)化就是對(duì)一個(gè)「非正規(guī)化」的原始資料表,進(jìn)行一連串的「分割」,並且分割成數(shù)個(gè)「不重複」儲(chǔ)存的資料表。如下圖所示:在上圖中,利用一連串的「分割」,亦即利用所謂的「正規(guī)化的規(guī)則」,循序漸進(jìn)的將一個(gè)「重複性高」的資料表分割成數(shù)個(gè)「重複性低」或「沒(méi)有重複性」的資料表。分割4-4.1正規(guī)化示意圖正規(guī)化就是對(duì)一個(gè)「非正規(guī)化」的原始4-4.2正規(guī)化的規(guī)則引言

資料庫(kù)在正規(guī)化時(shí)會(huì)有一些規(guī)則,並且每條規(guī)則都稱為「正規(guī)形式」。如果符合第一條規(guī)則,則資料庫(kù)就稱為「第一正規(guī)化形式(1NF)」。如果符合前二條規(guī)則,則資料庫(kù)就被視為屬於「第二正規(guī)化形式(2NF)」。雖然資料庫(kù)的正規(guī)化最多可以進(jìn)行到第五正規(guī)化形式,但是在實(shí)務(wù)上,

BCNF被視為大部分應(yīng)用程式所需的最高階正規(guī)形式。4-4.2正規(guī)化的規(guī)則引言從上圖中,我們可以清楚得知,正規(guī)化是循序漸進(jìn)的過(guò)程,亦即資料表必須滿足第一正規(guī)化的條件之後,才能進(jìn)行第二正規(guī)化。換言之,第二正規(guī)化必須建立在符合第一正規(guī)化的資料表上,依此類推。從上圖中,我們可以清楚得知,正規(guī)化是循序漸進(jìn)正規(guī)化步驟

在資料表正規(guī)化的過(guò)程(1NF到BCNF)中,每一個(gè)階段都是以欄位的「相依性」,做為分割資料表的依據(jù)之一。其完整的正規(guī)化步驟如下圖所示:正規(guī)化步驟在資料表正規(guī)化的過(guò)程(1NF到BCNF正規(guī)化步驟<續(xù)>

1.第一正規(guī)化(FirstNormalForm;1NF):由E.F.Codd提出。滿足所有記錄中的屬性內(nèi)含值都是基元值(AtomicValue)。即無(wú)重覆項(xiàng)目群。2.第二正規(guī)化(SecondNormalForm;2NF):由E.F.Codd提出。

符合1NF且每一非鍵值欄位「完全功能相依」於主鍵。

即不可「部分功能相依」於主鍵。3.第三正規(guī)化(ThirdNormalForm;3NF):由E.F.Codd提出。

符合2NF且每一非鍵值欄位非「遞移相依」於主鍵。

即除去「遞移相依」問(wèn)題。正規(guī)化步驟<續(xù)>1.第一正規(guī)化(FirstNormal正規(guī)化步驟<續(xù)>

4.Boyce-Codd正規(guī)化型式(Boyce-CoddNormalForm;BCNF):

由R.F.Boyce與E.F.Codd共同提出。

符合3NF且每一決定因素(Determinant)皆是候選鍵,簡(jiǎn)稱為BCNF。5.第四正規(guī)化(FourthNormalForm;4NF):由R.Fagin提出。

符合BCNF,再除去所有的多值相依。6.第五正規(guī)化(FifthNormalForm;5NF):由R.Fagin提出。

符合4NF,且沒(méi)有合併相依。正規(guī)化步驟<續(xù)>4.Boyce-Codd正規(guī)化型式(Bo4-4.3第一正規(guī)化(1NF)

【定義】

是指在資料表中的所有記錄之屬性內(nèi)含值都是基元值(AtomicValue)。

亦即無(wú)重覆項(xiàng)目群?!緦?shí)例】假設(shè)現(xiàn)在有一份某某科技大學(xué)的學(xué)生選課資料表,如表4-1(a)所示:表4-1(a)學(xué)生選課資料表4-4.3第一正規(guī)化(1NF)【定義】我們可以將表4-1(a)的原始資料利用二維表格來(lái)儲(chǔ)存,如表4-1(b)。表4-1(a)學(xué)生選課資料表表4-1(b)未正規(guī)化的資料表:學(xué)生選課資料報(bào)表二維表格來(lái)儲(chǔ)存我們可以將表4-1(a)的原始資料利用二維表格來(lái)儲(chǔ)存,如表4因此,我們發(fā)現(xiàn)有許多屬性的內(nèi)含值都具有二個(gè)或二個(gè)以上的值(亦稱為重複資料項(xiàng)目),其原因:尚未進(jìn)行第一正規(guī)化。表4-1(b)未正規(guī)化的資料表:學(xué)生選課資料報(bào)表■未符合1NF資料表的「缺點(diǎn)」以上資料表中的『課程代碼』、『課程名稱』、『學(xué)分?jǐn)?shù)』、『必選修』、『成績(jī)』、『老師編號(hào)』及「老師姓名」欄位的長(zhǎng)度無(wú)法確定,因?yàn)閷W(xué)生要選修多少門課程,無(wú)法事先得知(李碩安同學(xué)選了2門,李碩崴同學(xué)選了3門),因此,必須要預(yù)留很大的空間給這七個(gè)欄位,如此反而造成儲(chǔ)存空間的浪費(fèi)。重複資料項(xiàng)目因此,我們發(fā)現(xiàn)有許多屬性的內(nèi)含值都具有二個(gè)或二個(gè)以上的值(亦第一正規(guī)化的規(guī)則1.每一個(gè)欄位只能有一個(gè)基元值(Atomic)即單一值。例如:課程名稱欄位中不能存入兩科或兩科以上的課程名稱。2.沒(méi)有任何兩筆以上的資料是完全重覆。3.資料表中有主鍵,而其他所有的欄位都相依於「主鍵」。例如1:姓名與性別欄位都相依於「學(xué)號(hào)」欄位。例如2:課程名稱、學(xué)分?jǐn)?shù)、必選修、老師編號(hào)及老師姓名相依於「課程代

碼」欄位。例如3:「成績(jī)」欄位相依於「學(xué)號(hào)」與「課程代碼」欄位?!渡钊胩接懺谙乱豁?yè)》第一正規(guī)化的規(guī)則1.每一個(gè)欄位只能有一個(gè)基元值(Atom《深入探討》

Q:為什麼「成績(jī)」欄位一定要相依於「學(xué)號(hào)」與「課程代碼」欄位?分析一:如果「成績(jī)」欄位本身單獨(dú)存在時(shí),則沒(méi)有意義,因?yàn)橹挥小赋煽?jī)」卻無(wú)法讓同學(xué)或老師清楚得知該「成績(jī)」是屬於哪一位學(xué)生的哪一門課的成績(jī)。分析二:如果「成績(jī)」欄位只相依於「課程編號(hào)」也是沒(méi)有意義的,因?yàn)橹挥小赋煽?jī)」也是無(wú)法讓同學(xué)或老師清楚得知該「成績(jī)」是屬於哪一位學(xué)生所修課的成績(jī)。課程代碼成績(jī)C00174C00293沒(méi)有意義成績(jī)7493沒(méi)有意義《深入探討》Q:為什麼「成績(jī)」欄位一定要相依於「學(xué)號(hào)」與分析三:如果「成績(jī)」欄位只相依於「學(xué)號(hào)」也是沒(méi)有意義的,因?yàn)橹挥小赋煽?jī)」也是無(wú)法讓同學(xué)或老師清楚得知該「成績(jī)」是屬於哪一門課的成績(jī)。分析四:但是,如果「成績(jī)」欄位相依於「課程編號(hào)」及「學(xué)號(hào)」二個(gè)欄位時(shí),就可以了解某個(gè)學(xué)生修某堂課的成績(jī),這樣的成績(jī)資料才有意義。學(xué)號(hào)課程代碼成績(jī)001C00174001C00293有意義學(xué)號(hào)成績(jī)0017400193沒(méi)有意義分析三:學(xué)號(hào)課程代碼成績(jī)93有意義學(xué)號(hào)成績(jī)00193沒(méi)有意義第一正規(guī)化的作法:【作法】將重複的資料項(xiàng)分別儲(chǔ)存到不同的記錄中,並加上適當(dāng)?shù)闹麈I。步驟一:檢查是否存在「重複資料項(xiàng)」第一正規(guī)化的作法:【作法】將重複的資料項(xiàng)分別儲(chǔ)存到不同的步驟二:將重複資料項(xiàng)分別儲(chǔ)存到不同的記錄中,並加上適當(dāng)?shù)闹麈I未經(jīng)正規(guī)化前的學(xué)生選課表經(jīng)過(guò)正規(guī)化後的學(xué)生選課表(1NF)重複資料項(xiàng)儲(chǔ)存到不同的記錄步驟二:將重複資料項(xiàng)分別儲(chǔ)存到不同的記錄中,並加上適當(dāng)?shù)闹鹘?jīng)過(guò)正規(guī)化後的學(xué)生選課表(1NF)在經(jīng)由第一正規(guī)化之後,使得每一個(gè)欄位內(nèi)只能有一個(gè)資料(基元值)。雖然增加了許多記錄,但每一個(gè)欄位的「長(zhǎng)度」及「數(shù)目」都可以固定,而且我們可用「課程代碼」欄位加上「學(xué)號(hào)」欄位當(dāng)作主鍵,使得在查詢某學(xué)生修某課程的「成績(jī)」時(shí),就非常方便而快速了。經(jīng)過(guò)正規(guī)化後的學(xué)生選課表(1NF)題目:第一正規(guī)化後的結(jié)果先備技能:1.參考附錄一Access2010的基本操作2.建立關(guān)聯(lián)式資料庫(kù)實(shí)作步驟:步驟一:開啟資料庫(kù)

開啟附書光碟中「01_Access2010(範(fàn)例資料庫(kù))\ch4\素材檔\

ch4-4-3(1NF)」步驟二:以證明在1NF之後,1.每一個(gè)欄位只能有一個(gè)基元值。例如:課程名稱欄位中不能存入兩科或兩科以上的課程名稱。2.沒(méi)有任何兩筆以上的資料是完全重覆。3.資料表中有主鍵,而其他所有的欄位都相依於「主鍵」您可以參考「完成檔\ch4-4-3(1NF)」【Access上機(jī)實(shí)作3】題目:第一正規(guī)化後的結(jié)果【Access上機(jī)實(shí)作3】4-4.4第二正規(guī)化(2NF)

在完成了第一正規(guī)化之後,讀者是否發(fā)現(xiàn)在資料表中產(chǎn)生許多重複的資料。如此,不但浪費(fèi)儲(chǔ)存的空間,更容易造成新增、修改及刪除資料時(shí)的異常狀況,說(shuō)明如下。(1)新增異常檢查(InsertAnomaly)

無(wú)法先新增課程資料,如「課程代碼」及「課程名稱」,要等選課之後,才能新增。原因:以上的新增動(dòng)作違反「實(shí)體完整性規(guī)則」,因?yàn)椋麈I或複合主鍵不可以為空值NULL。4-4.4第二正規(guī)化(2NF)在完成了第一(2)修改異常檢查(UpdateAnomaly)「網(wǎng)頁(yè)設(shè)計(jì)」課程重覆多次,因此,修改「網(wǎng)頁(yè)設(shè)計(jì)」課程的成績(jī)時(shí),可能有些記錄未修改到,造成資料的不一致現(xiàn)象。例如:有選「網(wǎng)頁(yè)設(shè)計(jì)」課程的同學(xué)之成績(jī)各加5分,可能會(huì)有些同學(xué)

有加分,而有些同學(xué)卻沒(méi)有加分,導(dǎo)致資料不一致的情況。(2)修改異常檢查(UpdateAnomaly)(3)刪除異常檢查(DeleteAnomaly)當(dāng)刪除#4學(xué)生的記錄時(shí),同時(shí)也會(huì)刪除課程名稱、學(xué)分?jǐn)?shù)及相關(guān)的資料。所以導(dǎo)致「計(jì)概」課程的2學(xué)分?jǐn)?shù)也同時(shí)被刪除了。綜合上述的三種異?,F(xiàn)象,所以,我們必須進(jìn)行「第二階正規(guī)化」,來(lái)消除這些問(wèn)題。(3)刪除異常檢查(DeleteAnomaly)第二正規(guī)化的規(guī)則如果資料表符合以下的條件,我們說(shuō)這個(gè)資料表符合第二階正規(guī)化的形式(SecondNormalForm,簡(jiǎn)稱2NF):符合1NF每一非鍵屬性(如:姓名、性別…)必須「完全相依」於主鍵(學(xué)號(hào));即不可「部分功能相依」於主鍵。

換言之,「部分功能相依」只有當(dāng)「主鍵」是由「多個(gè)欄位」組成時(shí)才會(huì)發(fā)生(亦即複合主鍵),也就是當(dāng)某些欄位只與「主鍵中的部分欄位」有「相依性」,而與另一部分的欄位沒(méi)有相依性。第二正規(guī)化的規(guī)則如果資料表符合以下的條件,我們說(shuō)這個(gè)資第二正規(guī)化的作法分割資料表;亦即將「部分功能相依」的欄位「分割」出去,

再另外組成「新的資料表」。其步驟如下:步驟一:檢查是否存在「部分功能相依」「姓名」只相依於「學(xué)號(hào)」「課程名稱」只相依於「課程代碼」在上面的資料表中,主鍵是由「學(xué)號(hào)+課程代碼」兩個(gè)欄位所組成,但「姓名」和「性別」只與「學(xué)號(hào)」有「相依性」,亦即(姓名,性別)相依於學(xué)號(hào),而「課程名稱」只與「課程代碼」有「相依性」,亦即(課程名稱,學(xué)分?jǐn)?shù),必選修,老師編號(hào),老師姓名)相依於課程代碼。因此,學(xué)號(hào)是複合主鍵(學(xué)號(hào),課程代碼)的一部份?!啻嬖诓糠止δ芟嘁?。第二正規(guī)化的作法分割資料表;亦即將「部分功能相依」的欄步驟二:將「部分功能相依」的欄位分割出去,再另外組成新的資料表我們將「選課資料表」分割成三個(gè)較小的資料表(加「底線」的欄位為主鍵):一、學(xué)生資料表(學(xué)號(hào),姓名,性別)二、成績(jī)資料表(學(xué)號(hào),課程代碼,成績(jī))學(xué)號(hào)姓名性別001李碩安男002李碩崴男學(xué)號(hào)課程代碼成績(jī)001C00174001C00293002C00263002C00382002C00594步驟二:將「部分功能相依」的欄位分割出去,再另外組成新的資三、課程資料表(課程代碼,課程名稱,學(xué)分?jǐn)?shù),必選修,

老師編號(hào),老師姓名)在第二正規(guī)化之後,產(chǎn)生三個(gè)資料表,分別為學(xué)生資料表、成績(jī)資料表及課程資料表,除了「課程資料表」之外,其餘兩個(gè)資料表(學(xué)生資料表與成績(jī)資料表)都已符合2NF,3NF及BCNF。課程代碼課程名稱學(xué)分?jǐn)?shù)必選修老師編號(hào)老師姓名C001程式語(yǔ)言4必T001李安C002網(wǎng)頁(yè)設(shè)計(jì)3選T002張三C003計(jì)概2必T003李四C005網(wǎng)路教學(xué)4選T005王五三、課程資料表(課程代碼,課程名稱,學(xué)分?jǐn)?shù),必選修,課程代碼題目:第二正規(guī)化後的結(jié)果先備技能:1.參考附錄一Access2010的基本操作2.建立關(guān)聯(lián)式資料庫(kù)實(shí)作步驟:步驟一:開啟資料庫(kù)

開啟附書光碟中「01_Access2010(範(fàn)例資料庫(kù))\ch4\素材檔\

ch4-4-3(2NF)」步驟二:以證明在2NF之後,將「部分功能相依」的欄位「分割」出去,另外分割成三個(gè)資料表「學(xué)生資料表」、

「成績(jī)資料表」及「課程資料表」。

您可以參考「完成檔\ch4-4-3(2NF)」【Access上機(jī)實(shí)作4】題目:第二正規(guī)化後的結(jié)果【Access上機(jī)實(shí)作4】4-4.5第三正規(guī)化(3NF)

在完成了第二正規(guī)化之後,其實(shí)還存在以下三種異常現(xiàn)象,亦即新增、刪除或更新資料時(shí)的異常狀況,說(shuō)明如下:(1)新增異常(InsertAnomaly)

以上無(wú)法先新增老師資料,要等確定課程代碼之後,才能輸入。原因?yàn)椋盒略鰟?dòng)作違反「實(shí)體完整性規(guī)則」,因?yàn)橹麈I或複合主鍵不可以為空值NULL。4-4.5第三正規(guī)化(3NF)在完成了第二正規(guī)化之後,其(2)修改異常(UpdateAnomaly)

假如「李安」老師開設(shè)多門課程時(shí),則欲修改「李安」老師姓名為「李碩安」時(shí),可能有些記錄未修改到,造成資料的不一致現(xiàn)象。未修改到(2)修改異常(UpdateAnomaly)未修改到(3)刪除異常(DeleteAnomaly)

當(dāng)刪除#1課程的記錄時(shí),同時(shí)也刪除老師編號(hào)T001。

所以導(dǎo)致老師編號(hào)T001及老師姓名的資料也同時(shí)被刪除了。綜合上述的三種異?,F(xiàn)象,所以,我們必須進(jìn)行「第三階正規(guī)化」,來(lái)消除這些問(wèn)題。記錄課程代碼課程名稱學(xué)分?jǐn)?shù)必選修老師編號(hào)老師姓名#1C001程式語(yǔ)言4必T001李安#2C002網(wǎng)頁(yè)設(shè)計(jì)3選T002張三#3C003計(jì)概2必T003李四#4C005網(wǎng)路教學(xué)4選T005王五(3)刪除異常(DeleteAnomaly)記錄課程代碼課第三正規(guī)化的規(guī)則如果資料表符合以下條件,我們就說(shuō)這個(gè)資料表符合第三階正規(guī)化的形式(ThirdNormalForm,簡(jiǎn)稱3NF):符合2NF各欄位與「主鍵」之間沒(méi)有「遞移相依」的關(guān)係?!救绾握疫f移相依呢?】若要找出資料表中各欄位與「主鍵」之間的遞移相依性,最簡(jiǎn)單的方法就是從左到右掃瞄資料表中各欄位有沒(méi)有『與主鍵無(wú)關(guān)的相依性』存在??赡艿那闆r如下:如果有存在時(shí),則代表有「遞移相依」的關(guān)係2.如果有不存在時(shí),則代表沒(méi)有「遞移相依」的關(guān)係第三正規(guī)化的規(guī)則如果資料表符合以下條件,我們就說(shuō)這個(gè)資第三正規(guī)化的作法分割資料表;亦即將「遞移相依」或「間接相依」的欄位「分割」

出去,再另外組成「新的資料表」。其步驟如下:步驟一:檢查是否存在「遞移相依」由於每一門課程都會(huì)有授課的老師,因此,「老師編號(hào)」相依於「課程代碼」。並且「老師姓名」相依於「教師編號(hào)」,因此,存在有『與主鍵無(wú)關(guān)的相依性』。亦即存在「老師姓名」與主鍵(課程代碼)無(wú)關(guān)的相依性?!啻嬖谶f移相依。第三正規(guī)化的作法分割資料表;亦即將「遞移相依」或「間接

上述「課程資料表」中的[課程名稱]、[學(xué)分?jǐn)?shù)]、[必選修]、[老師編號(hào)]都直接相依於主鍵[課程代碼](簡(jiǎn)單的說(shuō),這些都是課程資料的必需欄位),而[老師姓名]是直接相依於[老師編號(hào)],然後才間接相依於[課程代碼],它並不是直接相依於[課程代碼],稱為「遞移相依」『TransitiveDependency』或「間接相依」。例如:當(dāng)AB,BC,則AC(稱為遞移相依)。因此,在「課程資料表」中存在「遞移相依」關(guān)係現(xiàn)象,

步驟二:將「遞移相依」的欄位「分割」出去,再另外組成「新的資料表」因此,我們將「課程資料表」分割為二個(gè)資料表,並且利用外鍵(F.K.)來(lái)連接二個(gè)資料表。如下圖所示。步驟二:將「遞移相依」的欄位「分割」出去,再另外組成「新的資在我們完成第三正規(guī)化後,共產(chǎn)生了四個(gè)表格,如下表所示:第三正規(guī)化後的四個(gè)表格第二正規(guī)化產(chǎn)生的表格第三正規(guī)化產(chǎn)生的表格在我們完成第三正規(guī)化後,共產(chǎn)生了四個(gè)表格,如下表所示:第三題目:第三正規(guī)化後的結(jié)果,並建立關(guān)聯(lián)圖先備技能:1.參考附錄一Access2010的基本操作2.建立關(guān)聯(lián)式資料庫(kù)實(shí)作步驟:步驟一:開啟資料庫(kù)

開啟附書光碟中「01_Access2010(範(fàn)例資料庫(kù))\ch4\素材檔\

ch4-4-3(3NF)」步驟二:以證明在3NF之後,將「遞移相依」的欄位「分割」出去,再另外組成「新的資料表」。因此,我們將「課程資

料表」分割為二個(gè)資料表,分別為「課程資料表」與「老師資料表」。步驟三:在3NF之後,總共產(chǎn)生了四個(gè)資料表(「學(xué)生資料表」、「成績(jī)資料表」、「課程資料表」

與「老師資料表」)

您可以參考「完成檔\ch4-4-3(3NF)」【Access上機(jī)實(shí)作5】題目:第三正規(guī)化後的結(jié)果,並建立關(guān)聯(lián)圖【Access上機(jī)實(shí)4-4.6BCNF正規(guī)化是由Boyce和Codd於1974年所提出來(lái)的3NF的改良式。其條件比3NF更加嚴(yán)苛。因此每一個(gè)符合BCNF的關(guān)聯(lián)一定也是3NF。對(duì)於大部分資料庫(kù)來(lái)說(shuō),通常只需要執(zhí)行到第三階段的正規(guī)化就足夠了?!具m用時(shí)機(jī)】如果資料表的「主鍵」是由「多個(gè)欄位」組成的,則必須再執(zhí)行Boyce-Codd正規(guī)化。4-4.6BCNF正規(guī)化是由BoyceBCNF的規(guī)則如果資料表的「主鍵」只由「單一欄位」組合而成,則符合第三階正

規(guī)化的資料表,亦符合BCNF(Boyce-CoddNormalForm)正規(guī)化。如果資料表的「主鍵」由「多個(gè)欄位」組成(又稱為複合主鍵),則資料

表就必須要符合以下條件,我們就說(shuō)這個(gè)資料表符合BCNF(Boyce-CoddNormalForm)正規(guī)化的形式。

1.符合3NF的格式。2.「主鍵」中的各欄位不可以相依於其他非主鍵的欄位。BCNF的規(guī)則如果資料表的「主鍵」只由「單一欄位」組合檢驗(yàn)「成績(jī)資料表」是否滿足

BCNF規(guī)範(fàn)

由於在我們完成第三正規(guī)化之後,已經(jīng)分割成四個(gè)資料表,其中「成績(jī)資料表」的主鍵是由「多個(gè)欄位」組成(又稱為複合主鍵)。

因此,我們利用BCNF(Boyce-CoddNormalForm)正規(guī)化的條件,來(lái)檢驗(yàn)「成績(jī)資料表」:成績(jī)資料表(學(xué)號(hào),課程代碼,成績(jī))說(shuō)明:「成績(jī)」欄位相依於「課程代碼」及「學(xué)號(hào)」欄位,對(duì)「課程代碼」欄位而言,並沒(méi)有相依於「成績(jī)」欄位;對(duì)「學(xué)號(hào)」欄位而言,也沒(méi)有相依於「成績(jī)」欄位。所以成績(jī)資料表是符合『Boyce-Codd正規(guī)化的形式』的資料表。學(xué)號(hào)課程代碼成績(jī)001C00174001C00293002C00263002C00382002C00594檢驗(yàn)「成績(jī)資料表」是否滿足BCNF規(guī)範(fàn)由於在我們完成4-4.7怎樣才叫做是好的關(guān)聯(lián)?正規(guī)化就是將一個(gè)大資料表「分割」成數(shù)個(gè)不重複的小資料表。從1NF到3NF,再利用BCNF來(lái)逐步檢驗(yàn)資料表中「主鍵」由「多個(gè)欄位」組成的相依性問(wèn)題,這是一連串改良關(guān)聯(lián)的過(guò)程。

可是,究竟要做到哪一個(gè)程度才算「足夠好」呢?通常我們會(huì)要求:就算不能作到BCNF,也要做到3NF才可以。4-4.7怎樣才叫做是好的關(guān)聯(lián)?正規(guī)化就4-5反正規(guī)化【引言】正規(guī)化只是建立資料表的原則,而非鐵律。如果過(guò)度正規(guī)化,反而導(dǎo)致資料存取的效率下降。因此,如果要以執(zhí)行效率(查詢速度)為優(yōu)先考量時(shí),則我們還必須適當(dāng)?shù)姆凑?guī)化(De-normalization)。有時(shí),過(guò)度的正規(guī)化,反而會(huì)造成資料處理速度上的困擾,因此,當(dāng)我們?cè)谶M(jìn)行資料庫(kù)正規(guī)化的同時(shí),可能也必須要測(cè)試系統(tǒng)執(zhí)行效率,當(dāng)效率不理想時(shí),必須做適當(dāng)?shù)姆凑?guī)化,亦即將原來(lái)的第三階正規(guī)化降級(jí)為第二階正規(guī)化,甚至降到第一階正規(guī)化。但是,在進(jìn)行反正規(guī)化的同時(shí),可能也會(huì)造成的資料重覆性問(wèn)題。4-5反正規(guī)化【引言】4-5反正規(guī)化<續(xù)>

【定義】將原來(lái)的第三階正規(guī)化降級(jí)為第二階正規(guī)化,甚至降到第一階

正規(guī)化。【使用時(shí)機(jī)】查詢比例較大的環(huán)境?!痉治觥?.對(duì)「資料異動(dòng)」觀點(diǎn)當(dāng)正規(guī)化愈多層,愈有利於資料的異動(dòng)(包括:新增、修改及刪除),

因?yàn)楫悇?dòng)時(shí)只需針對(duì)某一個(gè)較小的資料表,可以避免資料的異?,F(xiàn)象。2.對(duì)「資料查詢」觀點(diǎn)當(dāng)正規(guī)化愈多層,愈不利於資料的查詢功能,因?yàn)橘Y料查詢時(shí)往往

會(huì)合併許多個(gè)資料表,導(dǎo)致查詢效能降低。因此,「正規(guī)化論理」與「查詢合併原理」是存在相互衝突。4-5反正規(guī)化<續(xù)>【定義】將原來(lái)的第三階正規(guī)化降級(jí)為【舉例】假設(shè)我們?cè)谶M(jìn)行正規(guī)化時(shí),特別將「客戶資料表」中的「地址」分割成以下欄位:<1>正規(guī)化關(guān)聯(lián)客戶資料表(編號(hào),姓名,郵遞區(qū)號(hào))地址明細(xì)表(郵遞區(qū)號(hào)、城市、路名)【優(yōu)點(diǎn)】可以直接從每一個(gè)欄位當(dāng)作「關(guān)鍵字」來(lái)查詢。【例如】查詢「高雄市」或查詢「806」或查詢「和平路」等。【適用時(shí)機(jī)】租屋網(wǎng)站;可以讓使用者進(jìn)行「進(jìn)階」查詢。【缺點(diǎn)】如果要查詢的資訊是要合併多個(gè)資料表時(shí),將會(huì)影響執(zhí)行效率。因此,一般的做法還是讓地址「反正規(guī)化」。<2>反正規(guī)化關(guān)聯(lián)客戶資料表(編號(hào),姓名,郵遞區(qū)號(hào)、城市、路名)【舉例】4-6結(jié)語(yǔ)基本上,建立E-RModel後已經(jīng)可以達(dá)到正規(guī)化的前三階(1NF,2NF,3NF)或是BCNF的步驟。因此,我們必須瞭解建立完整的資料庫(kù)結(jié)構(gòu),可以用兩種方法來(lái)建構(gòu):1.E-RModel(第三章介紹)2.資料庫(kù)正規(guī)化(第四章介紹)驗(yàn)證E-RModel是否達(dá)到最佳化4-6結(jié)語(yǔ)基本上,建立E-RModel後已經(jīng)可以達(dá)到4-6結(jié)語(yǔ)<續(xù)>

1.如果是剛成立的企業(yè)想要電腦化,則是要從需求訪談開始,將訪談的資料需求進(jìn)行分析(情境),然後建立實(shí)體關(guān)係模式(ER圖),接下來(lái)依照關(guān)聯(lián)式的規(guī)則,對(duì)映成資料表。筆者認(rèn)為如果步驟一到步驟三都有確實(shí)時(shí),對(duì)映後的資料表會(huì)與正規(guī)化的表格是一樣的。所以,正規(guī)化的步驟就不一定要進(jìn)行。如下圖所示:4-6結(jié)語(yǔ)<續(xù)>1.如果是剛成立的企業(yè)想要電腦化,則是4-6結(jié)語(yǔ)<續(xù)>

2.如果某一企業(yè)早期已經(jīng)人工作業(yè),並且使用許多表單,筆者建議,可以直接進(jìn)行正規(guī)化。但是,如果人工作業(yè)的表單沒(méi)有完全依照企業(yè)的需求的設(shè)計(jì)時(shí),則筆者建議,還是要依照步驟一到步驟三來(lái)進(jìn)行。如下圖所示:4-6結(jié)語(yǔ)<續(xù)>2.如果某一企業(yè)早期已經(jīng)人工作業(yè),並且第四章

資料庫(kù)正規(guī)化課程名稱:資料庫(kù)系統(tǒng)授課老師:李春雄博士第四章

資料庫(kù)正規(guī)化課程名稱:資料庫(kù)系統(tǒng)本章學(xué)習(xí)目標(biāo)

1.讓讀者瞭解資料庫(kù)正規(guī)化的概念及目的。2.讓讀者瞭解資料庫(kù)正規(guī)化(Normalization)

程序及規(guī)則。本章學(xué)習(xí)目標(biāo)1.讓讀者瞭解資料庫(kù)正規(guī)化的概念及目的。本章內(nèi)容4-1正規(guī)化的概念4-2正規(guī)化的目的4-3功能相依(FunctionalDependence;FD)4-4資料庫(kù)正規(guī)化(Normalization)4-5反正規(guī)化(De-normalization)4-6結(jié)語(yǔ)本章內(nèi)容4-1正規(guī)化的概念前言一般的初學(xué)者在進(jìn)行資料庫(kù)設(shè)計(jì)時(shí),以為用一個(gè)資料表就可以儲(chǔ)存全部的資料,或憑著自己的直覺(jué)而沒(méi)有經(jīng)過(guò)完整的規(guī)劃,就隨意的將資料表分割成許多小的資料表,這種設(shè)計(jì)方法,不但浪費(fèi)儲(chǔ)存空間,更嚴(yán)重影響到資料庫(kù)不一致的現(xiàn)象,以致於DBA(資料庫(kù)管理師)維護(hù)困難。為了避免以上的問(wèn)題產(chǎn)生,唯一的方法,就是在設(shè)計(jì)關(guān)聯(lián)式資料庫(kù)之前,一定先要完成資料的正規(guī)化(Normalization)。前言一般的初學(xué)者在進(jìn)行資料庫(kù)設(shè)計(jì)時(shí),以為用4-1正規(guī)化的概念

資料庫(kù)是用來(lái)存放資料的地方,因此,如何妥善的規(guī)劃資料庫(kù)綱要

(DatabaseSchema)是一件很重要的工作,但是,資料庫(kù)綱要的設(shè)計(jì)必須要配合實(shí)務(wù)上的需要,因此,當(dāng)資料庫(kù)綱要設(shè)計(jì)完成後,如何檢視設(shè)計(jì)是否良好,就必需要使用正規(guī)化(Normalization)的方法論了。何謂正規(guī)化(Normalization)?就是結(jié)構(gòu)化分析與設(shè)計(jì)中,建構(gòu)「資料模式」所運(yùn)用的一個(gè)技術(shù),其目的是為了降低資料的「重覆性」與避免「更新異常」的情況發(fā)生。

因此,就必須將整個(gè)資料表中重複性的資料剔除,否則在關(guān)聯(lián)表中會(huì)造成新增異常、刪除異常、修改異常的狀況發(fā)生。4-1正規(guī)化的概念資料庫(kù)是用來(lái)存放資料4-2正規(guī)化的目的一般而言,正規(guī)化的精神就是讓資料庫(kù)中重複的欄位資料減到最少,並且能快速的找到資料,以提高關(guān)聯(lián)性資料庫(kù)的效能?!灸康摹?.降低資料重複性(DataRedundancy)。2.避免資料更新異常(Anomalies)。4-2正規(guī)化的目的一般而言,正規(guī)化的精神一、降低資料重複性(DataRedundancy)

正規(guī)化的目的是什麼呢?簡(jiǎn)單來(lái)說(shuō),就是降低資料重複的狀況發(fā)生。試想,當(dāng)校務(wù)系統(tǒng)的「學(xué)籍資料」分別存放在「教務(wù)處」與「學(xué)務(wù)處」時(shí),不僅資料重覆儲(chǔ)存,浪費(fèi)空間,更嚴(yán)重的是,當(dāng)學(xué)生姓名變更時(shí),就必須要同時(shí)更改「教務(wù)處」與「學(xué)務(wù)處」的「學(xué)籍資料」,否則將導(dǎo)致資料不一致的現(xiàn)象,因此,資料庫(kù)如果沒(méi)有事先進(jìn)行正規(guī)化,將會(huì)增加應(yīng)用系統(tǒng)撰寫的困難,同時(shí)也會(huì)增加資料庫(kù)的處理負(fù)擔(dān),所以降低資料重複性是「正規(guī)化」的重要工作。一、降低資料重複性(DataRedundancy)【方法】

將「教務(wù)處」與「學(xué)務(wù)處」中,把相同的資料項(xiàng),抽出來(lái)組成一個(gè)新的資料表(學(xué)籍資料表),如下圖所示:正規(guī)化:將兩個(gè)表格切成三個(gè)資料表說(shuō)明:在正規(guī)化之後,「學(xué)籍資料表」的主鍵(P.K.)分別與「學(xué)務(wù)處資料表」的

外鍵(F.K.)及「教務(wù)處資料表」的外鍵(F.K.)進(jìn)行關(guān)聯(lián),以產(chǎn)生關(guān)聯(lián)式資料庫(kù)?!痉椒ā繉ⅰ附虅?wù)處」與「學(xué)務(wù)處」中,把相同的資料項(xiàng),抽出二、避免資料更新異常(Anomalies)

(一)新增異常(InsertAnomalies)新增某些資料時(shí)必須同時(shí)新增其他的資料,否則會(huì)產(chǎn)生新增異?,F(xiàn)象。亦即在另一個(gè)實(shí)體的資料尚未插入之前,無(wú)法插入目前這個(gè)實(shí)體的資料。(二)修改異常(UpdateAnomalies)修改某些資料時(shí)必須一併修改其他的資料,否則會(huì)產(chǎn)生修改異?,F(xiàn)象。(三)刪除異常(DeleteAnomalies)刪除某些資料時(shí)必須同時(shí)刪除其他的資料,否則會(huì)產(chǎn)生刪除異常現(xiàn)象。亦即刪除單一資料列造成多個(gè)實(shí)體的資訊遺失。二、避免資料更新異常(Anomalies)(一)新增異常(【實(shí)例】

假設(shè)某國(guó)立大學(xué)開設(shè)「網(wǎng)路碩士學(xué)分班」,其學(xué)員課程收費(fèi)表如下所示。學(xué)員課程收費(fèi)表【說(shuō)明】在上面的學(xué)員課程收費(fèi)表中雖然僅僅只有三個(gè)欄位,但是已不算是

一個(gè)良好的儲(chǔ)存結(jié)構(gòu),因?yàn)榇吮砀裰杏匈Y料重覆現(xiàn)象?!纠纭坑行┱n程的費(fèi)用在許多學(xué)員身上重覆出現(xiàn)(S0001與S0003;S0002與S0005),因此可能會(huì)造成錯(cuò)誤或不一致的異常(Anomalies)現(xiàn)象。【分析】從下一頁(yè)開始學(xué)號(hào)課號(hào)學(xué)分費(fèi)S0001C0013000S0002C0024000S0003C0013000S0004C0035000S0005C0024000學(xué)員的選課需知如下:1.每一位學(xué)員只能選修一門課程。2.每一門課程均有收費(fèi)標(biāo)準(zhǔn)。(C001為3000元,C002為4000元,C003為5000元)【實(shí)例】假設(shè)某國(guó)立大學(xué)開設(shè)「網(wǎng)路碩士學(xué)分班」,其學(xué)員課程【分析】三種可能的異常(Anomalies)現(xiàn)象

(一)新增異常

假設(shè)學(xué)校又要新增C004課程,但此課程無(wú)法立即新增到資料表中,除非至少有一位學(xué)員選修了C004這門課程?!痉治觥咳N可能的異常(Anomalies)現(xiàn)象(一)新增(二)修改異常

假如C002課程的學(xué)分費(fèi)由4000元調(diào)整為4500元時(shí),若「C002課程」有多位學(xué)員選修時(shí),因此,修改「S0002」學(xué)員的學(xué)分費(fèi)時(shí),可能有些記錄未修改到(S0005),造成資料的不一致現(xiàn)象。(二)修改異常(三)刪除異常

假設(shè)學(xué)員S0004退選時(shí),同時(shí)也刪除C003這門課程,由於該課程只有S0004這位學(xué)員選修,因此若把這一筆記錄刪除,從此我們將失去C003這門課程及其學(xué)分費(fèi)的資訊。(三)刪除異?!窘鉀Q方法】正規(guī)化

由於上述的分析,發(fā)現(xiàn)學(xué)員課程收費(fèi)表並不是一個(gè)良好的儲(chǔ)存結(jié)構(gòu),因此,我們就必須要採(cǎi)用4-4節(jié)所要討論的正規(guī)化,將學(xué)員課程收費(fèi)表分割成兩個(gè)資料表,即「選課表」與「課程收費(fèi)對(duì)照表」,因此,才不會(huì)發(fā)生上述的異?,F(xiàn)象。學(xué)號(hào)課號(hào)學(xué)分費(fèi)S0001C0013000S0002C0024000S0003C0013000S0004C0035000S0005C0024000課程收費(fèi)表學(xué)號(hào)課號(hào)S0001C001S0002C002S0003C001S0004C003S0005C002選課表課號(hào)學(xué)分費(fèi)C0013000C0024000C0035000課程收費(fèi)對(duì)照表正規(guī)化正規(guī)化【解決方法】正規(guī)化由於上述的分析,發(fā)現(xiàn)學(xué)員課程收費(fèi)表並不題目:建立「選課表」與「課程收費(fèi)對(duì)照表」的關(guān)聯(lián)圖先備技能:1.參考附錄一Access2010的基本操作2.建立關(guān)聯(lián)式資料庫(kù)實(shí)作步驟:步驟一:開啟資料庫(kù)

開啟附書光碟中「01_Access2010(範(fàn)例資料庫(kù))\ch4\素材檔\

ch4-2B.accdb

」步驟二:資料庫(kù)工具/資料庫(kù)關(guān)聯(lián)圖/「選課表」的「課號(hào)」外鍵拖曵到「課程收費(fèi)對(duì)照表」的「課號(hào)」主鍵,此外,在「編輯關(guān)聯(lián)」對(duì)話方塊中,說(shuō)明「關(guān)聯(lián)類型:一對(duì)多」,其中一的那方代表「主鍵」,而多的那方代表「外鍵」。步驟三:測(cè)試三種可能的異?,F(xiàn)象。1.新增異常測(cè)試2.修改異常測(cè)試3.刪除異常測(cè)試您可以參考「完成檔\ch4-2B.accdb」【Access上機(jī)實(shí)作1】題目:建立「選課表」與「課程收費(fèi)對(duì)照表」的關(guān)聯(lián)圖【Acce【

Access上機(jī)實(shí)作】請(qǐng)建立「正規(guī)化」後的兩個(gè)表格,「選課表」與「課程收費(fèi)對(duì)照表」,並建立關(guān)聯(lián)圖學(xué)號(hào)課號(hào)S0001C001S0002C002S0003C001S0004C003S0005C002選課表課號(hào)學(xué)分費(fèi)C0013000C0024000C0035000課程收費(fèi)對(duì)照表資料庫(kù)名稱:ch4-2B.accdb【Access上機(jī)實(shí)作】請(qǐng)建立「正規(guī)化」後的兩個(gè)表格,4-3功能相依(FunctionalDependence;FD)

一、功能相依的概念【定義】

是指資料表中各欄位之間的相依性。亦即某欄位不能單獨(dú)存在,必須要和其他欄位一起存在時(shí)才有意義,稱這兩個(gè)欄位具有功能相依?!纠纭繉W(xué)生資料表【說(shuō)明】在上面的資料表中,「姓名」欄位的值必須搭配「學(xué)號(hào)」欄位才有意義,則我們說(shuō)『姓名欄位相依於學(xué)號(hào)欄位』。姓名學(xué)號(hào)性別系所電話地址4-3功能相依(FunctionalDependence換言之,在「學(xué)生資料表」中,「學(xué)號(hào)」決定了「姓名」,也決定了「性別」、「系所」、「電話」、「地址」等資訊,我們可以用以下圖示的方法來(lái)表示這些功能相依性?!痉治觥?/p>

1.學(xué)號(hào)→姓名

2.學(xué)號(hào)→{姓名,性別,系所,電話,地址}

3.學(xué)號(hào):為決定因素(∵學(xué)號(hào)姓名)4.姓名,性別,系所,電話,地址:為相依因素因此,「學(xué)號(hào)」欄位為主鍵,做為唯一辨識(shí)該筆記錄的欄位?!感彰箼谖槐仨氁嘁漓丁笇W(xué)號(hào)」欄位,對(duì)此資料表來(lái)說(shuō)「姓名」欄位才有意義;同理可證,「地址」欄位亦必須相依於「學(xué)號(hào)」欄位,才有意義。換言之,在「學(xué)生資料表」中,「學(xué)號(hào)」決定了「姓名」,也決定了二、功能相依(FD)的表示方式1.假設(shè)有一個(gè)資料表R,並且有三個(gè)欄位,分別為X,Y,Z,因此,我們就

可以利用一條數(shù)學(xué)式來(lái)表示:R={X,Y,Z}2.假設(shè)在R={X,Y,Z}數(shù)學(xué)式中,X和Y之間存在「功能相依」時(shí),並且

存在Y功能相依於X,則我們可以利用以下的表示式:

(1)Y∝X(Y功能相依於X)(2)XY(X決定Y)若XY時(shí),在FD的左邊X稱為決定因素(Determinant)

在FD的右邊Y稱為相依因素(Dependent)3.示意圖:學(xué)號(hào)(X)姓名(Y)二、功能相依(FD)的表示方式學(xué)號(hào)(X)姓名(Y)4-3.1完全功能相依

(FullFunctionalDependency)

【定義】假設(shè)在關(guān)聯(lián)表R(X,Y,Z)中,包含一組功能相依(X,Y)Z,如果我們從關(guān)聯(lián)表R中移除任一屬性X或Y時(shí),則使得這個(gè)功能相依(X,Y)Z不存在,此時(shí)我們稱Z為「完全功能相依」於(X,Y)。反之,若(X,Y)Z存在,我們稱Z為「部份功能相依」於(X,Y)?!纠纭縶學(xué)號(hào)(X),課號(hào)(Y)}→成績(jī)(Z)

這是「完全功能相依」如果從關(guān)聯(lián)表中移除課號(hào)(Y),則功能相依(X)Z不存在因?yàn)?,「學(xué)號(hào)」和「課號(hào)」兩者一起決定了「成績(jī)」,缺一不可。否則,只有一個(gè)學(xué)號(hào)對(duì)應(yīng)一個(gè)成績(jī),無(wú)法得知該成績(jī)是那一門課程的分?jǐn)?shù)。亦即成績(jī)(Z)完全功能相依於{學(xué)號(hào)(X),課號(hào)(Y)}4-3.1完全功能相依

(FullFun4-3.2部份功能相依

(PartialFunctionalDependency)

【定義】假設(shè)在關(guān)聯(lián)表R(X,Y,Z)中包含一組功能相依(X,Y)Z,如果我們從關(guān)聯(lián)表R中移除任一屬性X或Y時(shí),則使得這個(gè)功能相依(X,Y)Z存在,此時(shí)我們稱Z為「部份功能相依」於(X,Y)。【例如】{學(xué)號(hào)(X),身份證字號(hào)(Y)}→姓名(Z)

這是「部份功能相依」如果從關(guān)聯(lián)表中移除身份證字號(hào)(Y),則功能相依(X)Z存在因?yàn)?,「學(xué)號(hào)」也可以決定「姓名」,他們之間也具有功能相依性。4-3.2部份功能相依

(PartialF4-3.3遞移相依

(TransitiveDependency)

【定義】是指在二個(gè)欄位間並非直接相依,而是借助第三個(gè)欄位來(lái)達(dá)成資料

相依的關(guān)係?!纠纭縔相依於X;而Z又相依於Y,如此X與Z之間就是遞移相依的關(guān)係?!臼疽鈭D】在上面的關(guān)聯(lián)表R(X,Y,Z)中包含一組相依XY,YZ,則XZ,此時(shí)我們稱Z遞移相依於X。

4-3.3遞移相依

(Transitive【舉例】

課程代號(hào)→老師編號(hào)老師編號(hào)→老師姓名

這是遞移相依因?yàn)?,「課程代號(hào)」可以決定「老師編號(hào)」,並且「老師編號(hào)」又可以決定「老師姓名」,因此,「課程代號(hào)」與「老師姓名」之間存在遞移相依性。遞移相依性【舉例】課程代號(hào)→老師編號(hào)遞移相依性4-4資料庫(kù)正規(guī)化(Normalization)

【定義】是指將原先關(guān)聯(lián)(表格)的所有資訊,在「分解」之後,仍能由數(shù)個(gè)新關(guān)聯(lián)(表格)中經(jīng)過(guò)「合併」得到相同的資訊。即所謂的「無(wú)損失分解(Losslessdecomposition)」的觀念。

【無(wú)損失分解觀念】當(dāng)關(guān)聯(lián)表R被「分解」成數(shù)個(gè)關(guān)聯(lián)表R1,R2,…,Rn時(shí),則可以再透過(guò)「合併」R1R2…Rn得到相同的資訊R。如下圖所示。

分解合併合併合併分解分解4-4資料庫(kù)正規(guī)化(Normalization)【定義】【實(shí)例】分解合併註:分解:是指透過(guò)「正規(guī)化」技術(shù),將一個(gè)大資料表分割成二個(gè)小資料表。《本章介紹》

合併:是指透過(guò)「合併」理論,將數(shù)個(gè)小資料表整合成一個(gè)大資料表?!兜诎苏陆榻B》【實(shí)例】分解合併註:分解:是指透過(guò)「正規(guī)化」技術(shù),將一個(gè)大資題目:利用「分割」後的表格,再進(jìn)行「合併」先備技能:1.參考附錄一Access2010的基本操作2.建立關(guān)聯(lián)式資料庫(kù)實(shí)作步驟:步驟一:開啟資料庫(kù)

開啟附書光碟中「01_Access2010(範(fàn)例資料庫(kù))\ch4\素材檔\

ch4-4.accdb

」步驟二:將分割後的兩個(gè)表格,利用SQL合併(已完成)步驟三:以證明無(wú)損失分解觀念,亦即將原先關(guān)聯(lián)(表格)的所有資訊,在「分解」之後,仍能由數(shù)個(gè)新

關(guān)聯(lián)(表格)中經(jīng)過(guò)「合併」得到相同的資訊。您可以參考「完成檔\ch4-4.accdb」【Access上機(jī)實(shí)作2】題目:利用「分割」後的表格,再進(jìn)行「合併」【Access上4-4.1正規(guī)化示意圖正規(guī)化就是對(duì)一個(gè)「非正規(guī)化」的原始資料表,進(jìn)行一連串的「分割」,並且分割成數(shù)個(gè)「不重複」儲(chǔ)存的資料表。如下圖所示:在上圖中,利用一連串的「分割」,亦即利用所謂的「正規(guī)化的規(guī)則」,循序漸進(jìn)的將一個(gè)「重複性高」的資料表分割成數(shù)個(gè)「重複性低」或「沒(méi)有重複性」的資料表。分割4-4.1正規(guī)化示意圖正規(guī)化就是對(duì)一個(gè)「非正規(guī)化」的原始4-4.2正規(guī)化的規(guī)則引言

資料庫(kù)在正規(guī)化時(shí)會(huì)有一些規(guī)則,並且每條規(guī)則都稱為「正規(guī)形式」。如果符合第一條規(guī)則,則資料庫(kù)就稱為「第一正規(guī)化形式(1NF)」。如果符合前二條規(guī)則,則資料庫(kù)就被視為屬於「第二正規(guī)化形式(2NF)」。雖然資料庫(kù)的正規(guī)化最多可以進(jìn)行到第五正規(guī)化形式,但是在實(shí)務(wù)上,

BCNF被視為大部分應(yīng)用程式所需的最高階正規(guī)形式。4-4.2正規(guī)化的規(guī)則引言從上圖中,我們可以清楚得知,正規(guī)化是循序漸進(jìn)的過(guò)程,亦即資料表必須滿足第一正規(guī)化的條件之後,才能進(jìn)行第二正規(guī)化。換言之,第二正規(guī)化必須建立在符合第一正規(guī)化的資料表上,依此類推。從上圖中,我們可以清楚得知,正規(guī)化是循序漸進(jìn)正規(guī)化步驟

在資料表正規(guī)化的過(guò)程(1NF到BCNF)中,每一個(gè)階段都是以欄位的「相依性」,做為分割資料表的依據(jù)之一。其完整的正規(guī)化步驟如下圖所示:正規(guī)化步驟在資料表正規(guī)化的過(guò)程(1NF到BCNF正規(guī)化步驟<續(xù)>

1.第一正規(guī)化(FirstNormalForm;1NF):由E.F.Codd提出。滿足所有記錄中的屬性內(nèi)含值都是基元值(AtomicValue)。即無(wú)重覆項(xiàng)目群。2.第二正規(guī)化(SecondNormalForm;2NF):由E.F.Codd提出。

符合1NF且每一非鍵值欄位「完全功能相依」於主鍵。

即不可「部分功能相依」於主鍵。3.第三正規(guī)化(ThirdNormalForm;3NF):由E.F.Codd提出。

符合2NF且每一非鍵值欄位非「遞移相依」於主鍵。

即除去「遞移相依」問(wèn)題。正規(guī)化步驟<續(xù)>1.第一正規(guī)化(FirstNormal正規(guī)化步驟<續(xù)>

4.Boyce-Codd正規(guī)化型式(Boyce-CoddNormalForm;BCNF):

由R.F.Boyce與E.F.Codd共同提出。

符合3NF且每一決定因素(Determinant)皆是候選鍵,簡(jiǎn)稱為BCNF。5.第四正規(guī)化(FourthNormalForm;4NF):由R.Fagin提出。

符合BCNF,再除去所有的多值相依。6.第五正規(guī)化(FifthNormalForm;5NF):由R.Fagin提出。

符合4NF,且沒(méi)有合併相依。正規(guī)化步驟<續(xù)>4.Boyce-Codd正規(guī)化型式(Bo4-4.3第一正規(guī)化(1NF)

【定義】

是指在資料表中的所有記錄之屬性內(nèi)含值都是基元值(AtomicValue)。

亦即無(wú)重覆項(xiàng)目群。【實(shí)例】假設(shè)現(xiàn)在有一份某某科技大學(xué)的學(xué)生選課資料表,如表4-1(a)所示:表4-1(a)學(xué)生選課資料表4-4.3第一正規(guī)化(1NF)【定義】我們可以將表4-1

溫馨提示

  • 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)論