69
第 第 第 第 第 第 第第第第第第 第第第第第第 第第第第第第第第第第第第第 第第第第第 第第第第 第第第 第第 第第第第 第第第 第第

第 四 章 資料庫正規化

Embed Size (px)

DESCRIPTION

第 四 章 資料庫正規化. 課程名稱: 資料庫系統 授課老師:李春雄 博士. 本章學習目標. 1. 讓讀者瞭解 資料庫正規化 的 概念及目的 。 2. 讓讀者瞭解 資料庫正規化 (Normalization) 程序及規則 。. 本章內容. 4-1 正規化的概念 4-2 正規化的目的 4-3 功能相依 (Functional Dependence; FD) 4-4 資料庫正規化 (Normalization) 4-5 反正規化 (De-normalization) 4-6 結語. 前言 . - PowerPoint PPT Presentation

Citation preview

Page 1: 第 四 章 資料庫正規化

第 四 章第 四 章資料庫正規化資料庫正規化

課程名稱:課程名稱:資料庫系統資料庫系統授課老師:李春雄 博士授課老師:李春雄 博士

Page 2: 第 四 章 資料庫正規化

本章學習目標本章學習目標

1.1. 讓讀者瞭解讓讀者瞭解資料庫正規化資料庫正規化的的概念及目的概念及目的。。

2.2. 讓讀者瞭解讓讀者瞭解資料庫正規化資料庫正規化

(Normalization)(Normalization)

程序及規則程序及規則。。

Page 3: 第 四 章 資料庫正規化

本章內容 本章內容

4-1 4-1 正規化的概念正規化的概念

4-2 4-2 正規化的目的正規化的目的

4-3 4-3 功能相依功能相依 (Functional Dependence; FD)(Functional Dependence; FD)

4-4 4-4 資料庫正規化資料庫正規化 (Normalization)(Normalization)

4-5 4-5 反正規化反正規化 (De-normalization)(De-normalization)

4-6 4-6 結語結語

Page 4: 第 四 章 資料庫正規化

前言 前言  一般的初學者在進行資料庫設計時,以為用一般的初學者在進行資料庫設計時,以為用一個資料表一個資料表就可以就可以儲存儲存

全部的資料全部的資料,或,或憑著自己的直覺憑著自己的直覺而而沒有經過完整的規劃沒有經過完整的規劃,就隨意的將資,就隨意的將資

料表分割成許多小的資料表,這種設計方法,料表分割成許多小的資料表,這種設計方法,不但浪費儲存空間不但浪費儲存空間,更嚴,更嚴

重影響到重影響到資料庫不一致的現象資料庫不一致的現象,以致於,以致於 DBA(DBA( 資料庫管理師資料庫管理師 )) 維護困難維護困難。。

為了避免以上的問題產生,唯一的方法,就是在設計關聯式資料庫之前,為了避免以上的問題產生,唯一的方法,就是在設計關聯式資料庫之前,

一定先要完成資料的一定先要完成資料的正規化正規化 (Normalization)(Normalization) 。。

Page 5: 第 四 章 資料庫正規化

4-1 4-1 正規化的概念 正規化的概念  資料庫資料庫是用來是用來存放資料的地方存放資料的地方,因此,如何,因此,如何妥善的規劃妥善的規劃資料庫綱要資料庫綱要

( Database Schema )( Database Schema ) 是一件很重要的工作,但是,是一件很重要的工作,但是,資料庫綱要資料庫綱要的的

設計必須要設計必須要配合實務上的需要配合實務上的需要,因此,當,因此,當資料庫綱要資料庫綱要設計完成後,如何設計完成後,如何

檢視設計是否良好,就必需要使用檢視設計是否良好,就必需要使用正規化正規化 (Normalization)(Normalization) 的方法論的方法論

了。了。

何謂何謂正規化正規化 (Normalization)(Normalization) ?就是?就是結構化分析與設計結構化分析與設計中,中,建建

構「資料模式」所運用的一個技術構「資料模式」所運用的一個技術,其目的是為了,其目的是為了降低資料的「重覆降低資料的「重覆

性」性」與與避免「更新異常」避免「更新異常」的情況發生。的情況發生。

因此,就必須將整個資料表中因此,就必須將整個資料表中重複性的資料重複性的資料剔除剔除,,否則否則在關聯在關聯

表中會表中會造成造成新增異常、刪除異常、修改異常新增異常、刪除異常、修改異常的狀況發生。的狀況發生。

Page 6: 第 四 章 資料庫正規化

4-2 4-2 正規化的目的 正規化的目的  一般而言,一般而言,正規化的精神正規化的精神就是讓資料庫中就是讓資料庫中重複的欄位資料減到最少重複的欄位資料減到最少,,

並且能並且能快速的找到資料快速的找到資料,以,以提高關聯性資料庫的效能提高關聯性資料庫的效能。。

【【目的目的】】

1.1. 降低降低資料資料重複性重複性 (Data Redundancy)(Data Redundancy) 。。

2.2. 避免避免資料資料更新異常更新異常 (Anomalies)(Anomalies) 。。

Page 7: 第 四 章 資料庫正規化

一、降低資料重複性一、降低資料重複性 (Data (Data

Redundancy)Redundancy)    正規化的目的是什麼呢?簡單來說,就是正規化的目的是什麼呢?簡單來說,就是降低資料重複降低資料重複的狀況發生。的狀況發生。

試想,當試想,當校務系統校務系統的「學籍資料」分別存放在「教務處」與「學務處」的「學籍資料」分別存放在「教務處」與「學務處」

時,不僅資料時,不僅資料重覆儲存重覆儲存,,浪費空間浪費空間,更嚴重的是,當,更嚴重的是,當學生姓名變更學生姓名變更時,時,

就必須要就必須要同時更改同時更改「教務處」與「學務處」的「學籍資料」「教務處」與「學務處」的「學籍資料」,,否則否則將導將導

致致資料不一致的現象資料不一致的現象,因此,,因此,資料庫資料庫如果如果沒有事先進行正規化沒有事先進行正規化,將會,將會增增

加應用系統撰寫的困難加應用系統撰寫的困難,同時也會,同時也會增加資料庫的處理負擔增加資料庫的處理負擔,所以降低資,所以降低資

料重複性是「正規化」的重要工作。料重複性是「正規化」的重要工作。

Page 8: 第 四 章 資料庫正規化

【【方法方法 】 】  將「教務處」與「學務處」中,把相同的資料項,抽出來組成一個新的資料表將「教務處」與「學務處」中,把相同的資料項,抽出來組成一個新的資料表

(( 學籍資料表學籍資料表 )) ,如下圖所示:,如下圖所示:

正規化:將兩個表格切成三個資料表正規化:將兩個表格切成三個資料表

說明:在正規化之後,「學籍資料表」的說明:在正規化之後,「學籍資料表」的主鍵主鍵 (P.K.)(P.K.) 分別與「學務處資料表」分別與「學務處資料表」

的 的

外鍵外鍵 (F.K.)(F.K.) 及「教務處資料表」的及「教務處資料表」的外鍵外鍵 (F.K.)(F.K.) 進行關聯,以產生關聯進行關聯,以產生關聯

式資料庫。式資料庫。

Page 9: 第 四 章 資料庫正規化

二、避免資料更新異常二、避免資料更新異常 (Anomalies)(Anomalies)  (( 一一 )) 新增異常新增異常 (Insert (Insert Anomalies))

新增某些資料時必須同時新增其他的資料,否則會產生新增異常現象。新增某些資料時必須同時新增其他的資料,否則會產生新增異常現象。

亦即在另一個實體的資料尚未插入之前,無法插入目前這個實體的資料。亦即在另一個實體的資料尚未插入之前,無法插入目前這個實體的資料。

(( 二二 )) 修改異常修改異常 (Update Anomalies)(Update Anomalies)

修改某些資料時必須一併修改其他的資料,否則會產生修改異常現象。修改某些資料時必須一併修改其他的資料,否則會產生修改異常現象。

(( 三三 )) 刪除異常刪除異常 (Delete Anomalies)(Delete Anomalies)

刪除某些資料時必須同時刪除其他的資料,否則會產生刪除異常現象。刪除某些資料時必須同時刪除其他的資料,否則會產生刪除異常現象。

亦即刪除單一資料列造成多個實體的資訊遺失。亦即刪除單一資料列造成多個實體的資訊遺失。

Page 10: 第 四 章 資料庫正規化

【【實例實例 】 】   假設某國立大學開設「網路碩士學分班」,其假設某國立大學開設「網路碩士學分班」,其學員課程收費表學員課程收費表如下所示。如下所示。

學員課程收費表學員課程收費表

【【說明說明】】在上面的在上面的學員課程收費表學員課程收費表中雖然僅僅中雖然僅僅只有三個欄位只有三個欄位,但是已,但是已不算是不算是

一個良好的儲存結構一個良好的儲存結構,因為此表格中有,因為此表格中有資料重覆現象資料重覆現象。。

【【例如例如】】有些有些課程的費用課程的費用在許多學員身上在許多學員身上重覆出現重覆出現 (S0001(S0001與與 S0003S0003;;

S0002S0002 與與

S0005)S0005) ,因此可能會,因此可能會造成錯誤造成錯誤或或不一致的異常不一致的異常 ((Anomalies)Anomalies)

現象。現象。

【【分析分析】】從下一頁開始從下一頁開始

學號學號 課號課號 學分費學分費S0001S0001 C001C001 30003000

S0002S0002 C002C002 40004000

S0003S0003 C001C001 30003000

S0004S0004 C003C003 50005000

S0005S0005 C002C002 40004000

學員的選課需知如下:學員的選課需知如下:

1. 1. 每一位學員只能選修一門課程。每一位學員只能選修一門課程。

2. 2. 每一門課程均有收費標準。每一門課程均有收費標準。 (C001(C001為為

30003000元, 元,

C002C002為為 40004000元,元, C003C003為為 50005000元元 ))

Page 11: 第 四 章 資料庫正規化

【【分析分析】】三種可能的異常三種可能的異常 (Anomalies)(Anomalies)現現象象  (( 一一 )) 新增異常新增異常 假設學校又要假設學校又要新增新增 C004C004 課程課程,但此課程,但此課程無法立即新增無法立即新增到資料到資料

表中,表中,除非除非至少至少有一位學員選修了有一位學員選修了 C004C004 這門課程這門課程。。

Page 12: 第 四 章 資料庫正規化

(( 二二 )) 修改異常修改異常 假如假如 C002C002 課程課程的的學分費學分費由由 40004000 元調整為元調整為 45004500 元元時,若時,若

「「 C002C002 課程」有多位學員選修時,因此,課程」有多位學員選修時,因此,修改「修改「 S0002S0002 」學員」學員的學的學

分費時,可能有些記錄分費時,可能有些記錄未修改到未修改到 (S0005)(S0005) ,,造成資料的不一致現象造成資料的不一致現象。。

Page 13: 第 四 章 資料庫正規化

(( 三三 )) 刪除異常刪除異常 假設假設學員學員 S0004S0004 退選退選時,同時也時,同時也刪除刪除 C003C003 這門課程這門課程,由於該,由於該

課程只有課程只有 S0004S0004 這位學員選修,因此若把這一筆記錄刪除,從此我們這位學員選修,因此若把這一筆記錄刪除,從此我們

將將失去失去 C003C003 這門課程及其學分費的資訊這門課程及其學分費的資訊。。

Page 14: 第 四 章 資料庫正規化

【【解決方法解決方法】】正規化 正規化 由於上述的分析,發現由於上述的分析,發現學員課程收費表學員課程收費表並並不是一個良好的儲存結構不是一個良好的儲存結構,因,因

此,我們就必須要此,我們就必須要採用採用 4-44-4節所要討論的正規化節所要討論的正規化,將,將學員課程收費表學員課程收費表分分

割成兩個資料表割成兩個資料表,即,即「選課表」「選課表」與與「課程收費對照表」「課程收費對照表」,因此,才不會,因此,才不會

發生上述的異常現象。發生上述的異常現象。學號學號 課號課號 學分費學分費

S0001S0001 C001C001 30003000

S0002S0002 C002C002 40004000

S0003S0003 C001C001 30003000

S0004S0004 C003C003 50005000

S0005S0005 C002C002 40004000

課程收費表課程收費表

學號學號 課號課號S0001S0001 C001C001

S0002S0002 C002C002

S0003S0003 C001C001

S0004S0004 C003C003

S0005S0005 C002C002

選課表選課表課號課號 學分費學分費

C001C001 30003000

C002C002 40004000

C003C003 50005000

課程收費對照表課程收費對照表

正規化正規化 正規化正規化

Page 15: 第 四 章 資料庫正規化

題目:題目:建立「選課表」與「課程收費對照表」的關聯圖建立「選課表」與「課程收費對照表」的關聯圖 先備技能:先備技能: 1.1.參考附錄一 參考附錄一 Access 2010Access 2010 的基本操作的基本操作

2.2. 建立關聯式資料庫建立關聯式資料庫

實作步驟:實作步驟:

步驟一:開啟資料庫步驟一:開啟資料庫

開啟附書光碟中「開啟附書光碟中「 01_Access 2010(01_Access 2010( 範例資料庫範例資料庫 )\ch4\)\ch4\素材檔素材檔 \\ ch4-2B.accdbch4-2B.accdb 」」

步驟二:步驟二: 資料庫工具/資料庫關聯圖/ 資料庫工具/資料庫關聯圖/

「選課表」的「選課表」的「課號」「課號」外鍵外鍵拖曵到拖曵到「課程收費對照表」的「課程收費對照表」的「課號」「課號」主鍵,此外,主鍵,此外,在「編輯關聯」對話在「編輯關聯」對話

方塊中,說明「關聯類型:一對多」,其中一的那方代表「方塊中,說明「關聯類型:一對多」,其中一的那方代表「主鍵」,而多的那方主鍵」,而多的那方代表「代表「外鍵外鍵」 」 。。

步驟三:測試三種可能的異常現象。步驟三:測試三種可能的異常現象。

1.1. 新增異常測試新增異常測試

2.2. 修改異常測試修改異常測試

3.3. 刪除異常測試刪除異常測試

您可以參考您可以參考「完成檔「完成檔 \\ ch4-2B.accdb ch4-2B.accdb 」」

【【 AccessAccess上機實作上機實作 11】】

Page 16: 第 四 章 資料庫正規化

【【 Access Access 上機實作上機實作】】請建立「正規化」後的兩個表格, 「選課表」與「課程收費對照表」,並請建立「正規化」後的兩個表格, 「選課表」與「課程收費對照表」,並

建立關聯圖建立關聯圖

學號學號 課號課號S0001S0001 C001C001

S0002S0002 C002C002

S0003S0003 C001C001

S0004S0004 C003C003

S0005S0005 C002C002

選課表選課表課號課號 學分費學分費

C001C001 30003000

C002C002 40004000

C003C003 50005000

課程收費對照表課程收費對照表

資料庫名稱:資料庫名稱: ch4-2B.accdbch4-2B.accdb

Page 17: 第 四 章 資料庫正規化

4-3 4-3 功能相依功能相依 (Functional (Functional

Dependence; FD)Dependence; FD)   一、功能相依的概念一、功能相依的概念

【【定義定義】】

是指資料表中各欄位之間的相依性。亦即某欄位不能單獨存在,是指資料表中各欄位之間的相依性。亦即某欄位不能單獨存在,

必須要和其他欄位一起存在時才有意義,稱這兩個欄位具有功能相依。必須要和其他欄位一起存在時才有意義,稱這兩個欄位具有功能相依。

【【例如例如】】學生資料表學生資料表

【【說明說明】】

在上面的資料表中在上面的資料表中 , , 「姓名」欄位「姓名」欄位的值必須搭配的值必須搭配「學號」欄位「學號」欄位才有意才有意

義義 , , 則我們說則我們說『『姓名欄位姓名欄位相依相依於於學號欄位學號欄位』』。。

姓名姓名 學號學號 性別性別 系所系所 電話電話 地址地址

Page 18: 第 四 章 資料庫正規化

換言之,在「學生資料表」中,換言之,在「學生資料表」中,「學號」「學號」決定了決定了「姓名」「姓名」,也決定了,也決定了

「性別」、「系所」、「電話」、「地址」「性別」、「系所」、「電話」、「地址」等資訊,我們可以用以下圖等資訊,我們可以用以下圖

示的方法來表示這些示的方法來表示這些功能相依性功能相依性。。

【【分析分析】】

1. 1. 學號 學號 → → 姓名姓名

2. 2. 學號 學號 → → {{ 姓名,性別,系所,電話,地址姓名,性別,系所,電話,地址 }}

3. 3. 學號學號:為:為決定因素決定因素 ((∵∵學號學號姓名姓名 ))

4. 4. 姓名,性別,系所,電話,地址姓名,性別,系所,電話,地址:為:為相依因素相依因素

因此,因此,「學號」「學號」欄位為欄位為主鍵主鍵 , , 做為做為唯一辨識該筆記錄的欄位唯一辨識該筆記錄的欄位。。「姓名」「姓名」欄欄

位必須要位必須要相依相依於於「學號」「學號」欄位欄位 , , 對此資料表來說對此資料表來說「姓名」「姓名」欄位才有意義;同理欄位才有意義;同理

可證可證 ,, 「地址」欄位亦必須「地址」欄位亦必須相依相依於於「學號」「學號」欄位欄位 , , 才有意義。才有意義。

Page 19: 第 四 章 資料庫正規化

二、功能相依二、功能相依 (FD)(FD) 的表示方式的表示方式

1.1.假設有一個假設有一個資料表資料表 RR ,並且有三個欄位,分別為,並且有三個欄位,分別為 X,Y,ZX,Y,Z ,因此,我,因此,我

們就 們就

可以利用一條數學式來表示:可以利用一條數學式來表示: RR={={X,Y,ZX,Y,Z}}2.2.假設在假設在 R={X,Y,Z}R={X,Y,Z} 數學式中,數學式中, XX 和和 YY 之間存在「功能相依」時,之間存在「功能相依」時,

並且並且

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

(1) Y (1) Y ∝∝ X (Y X (Y 功能相依於功能相依於 X)X)

(2) X(2) XY (XY (X 決定決定 Y)Y)

若若 XXYY 時,在時,在 FDFD 的的左邊左邊 XX 稱為稱為決定因素決定因素 (Determinant)(Determinant)

在在 FDFD 的的右邊右邊 YY 稱為稱為相依因素相依因素 (Dependent)(Dependent)

3.3.示意圖:示意圖:學號 (X) 姓名 (Y)

Page 20: 第 四 章 資料庫正規化

4-3.1 4-3.1 完全功能相依完全功能相依 (( Full Functional DependencyFull Functional Dependency ))  【【定義定義】】

假設在關聯表假設在關聯表 R(X,Y,Z)R(X,Y,Z) 中,包含一組功能相依中,包含一組功能相依 (X,Y)(X,Y)ZZ ,如果我們,如果我們

從關聯表從關聯表 RR 中中移除任一屬性移除任一屬性 XX 或或 YY 時,則使得這個功能相依時,則使得這個功能相依

(X,Y)(X,Y)ZZ 不存在不存在,此時我們稱,此時我們稱 ZZ 為「完全功能相依」於為「完全功能相依」於 (X,Y)(X,Y) 。。

反之,反之,若若 (X,Y)(X,Y)ZZ 存在存在,我們稱,我們稱 ZZ 為「部份功能相依」於為「部份功能相依」於 (X,Y) (X,Y) 。。

【【例如例如】】

{{ 學號學號 (X)(X) ,課號,課號 (Y)} (Y)} → → 成績成績 (Z)(Z) 這是這是「完全功能相依」「完全功能相依」

如果從關聯表中移除如果從關聯表中移除課號課號 (Y)(Y) ,則,則功能相依功能相依 (X)(X) Z Z 不存在不存在

因為,「學號」和「課號」兩者一起決定了「成績」,缺一不可。因為,「學號」和「課號」兩者一起決定了「成績」,缺一不可。否則,只有一個學號對應一個成績,無法得知該成績是那一門課程的分數。否則,只有一個學號對應一個成績,無法得知該成績是那一門課程的分數。

亦即亦即成績成績 (Z)(Z) 完全功能相依完全功能相依於於 {{ 學號學號 (X)(X) ,課號,課號 (Y)} (Y)}

Page 21: 第 四 章 資料庫正規化

4-3.2 4-3.2 部份功能相依部份功能相依 (( Partial Functional Partial Functional

DependencyDependency))  【【定義定義】】

假設在關聯表假設在關聯表 R(X,Y,Z)R(X,Y,Z) 中包含一組功能相依中包含一組功能相依 (X,Y)(X,Y)ZZ ,如果我們從,如果我們從

關聯表關聯表 RR 中中移除任一屬性移除任一屬性 XX 或或 YY 時時,則使得這個,則使得這個功能相依功能相依 (X,Y)(X,Y)ZZ

存在存在,此時我們稱,此時我們稱 ZZ 為「部份功能相依」於為「部份功能相依」於 (X,Y)(X,Y) 。 。

【【例如例如】】

{{ 學號學號 (X) (X) ,身份證字號,身份證字號 (Y)} (Y)} → → 姓名姓名 (Z)(Z) 這是這是「部份功能相「部份功能相

依」依」

如果從關聯表中移除如果從關聯表中移除身份證字號身份證字號 (Y)(Y) ,則,則功能相依功能相依 (X)(X)ZZ 存在存在

因為,「學號」也可以決定「姓名」,他們之間也具有功能相依性。因為,「學號」也可以決定「姓名」,他們之間也具有功能相依性。

Page 22: 第 四 章 資料庫正規化

4-3.3 4-3.3 遞移相依遞移相依 (( Transitive DependencyTransitive Dependency ))  【【定義定義】】

是指在是指在二個欄位間二個欄位間並並非非直接相依直接相依 , , 而是而是借助第三個欄位借助第三個欄位來達成資料來達成資料

相依的關係相依的關係。。

【【例如例如】】

Y Y 相依於相依於 XX ;而;而 Z Z 又相依於又相依於 Y, Y, 如此如此 X X 與與 Z Z 之間就是之間就是遞移相遞移相

依的關係依的關係。。

【【示意圖示意圖】】

在上面的關聯表在上面的關聯表 R(X,Y,Z)R(X,Y,Z) 中包含一組相依中包含一組相依 XXY,YY,YZZ ,則,則 XXZZ ,,

此時我們稱此時我們稱 ZZ 遞移相依於遞移相依於 XX 。。

Page 23: 第 四 章 資料庫正規化

【【舉例舉例】】  課程代號 課程代號 → → 老師編號老師編號

老師編號老師編號→ → 老師姓名老師姓名 這是遞移相依這是遞移相依

因為,「課程代號」可以決定「老師編號」,並且「老師編號」又可以因為,「課程代號」可以決定「老師編號」,並且「老師編號」又可以

決定「老師姓名」,因此,「課程代號」與「老師姓名」之間存在遞移決定「老師姓名」,因此,「課程代號」與「老師姓名」之間存在遞移

相依性。相依性。遞移相依性遞移相依性

Page 24: 第 四 章 資料庫正規化

4-4 4-4 資料庫正規化資料庫正規化(Normalization)(Normalization)   【【定義定義】】

是指將是指將原先關聯原先關聯 (( 表格表格 )) 的所有資訊,在的所有資訊,在「分解」「分解」之後,仍能由之後,仍能由數個新數個新

關聯關聯 (( 表格表格 )) 中經過中經過「合併」「合併」得到得到相同的資訊相同的資訊。即所謂的「無損失分解。即所謂的「無損失分解

(Lossless decomposition)(Lossless decomposition) 」的觀念。」的觀念。

【【無損失分解觀念無損失分解觀念】】

當當關聯表關聯表 RR 被被「分解」「分解」成數個關聯表成數個關聯表 R1, R2, …, Rn R1, R2, …, Rn 時,則可以再時,則可以再

透過透過「合併」「合併」 R1 R2 … RnR1 R2 … Rn 得到得到相同的資訊相同的資訊 RR 。如下圖所。如下圖所

示。示。

分解分解合併合併 合併合併 合併合併

分解分解

分解分解

Page 25: 第 四 章 資料庫正規化

【【實例實例】】

分解分解 合併合併

註:註:分解:是指透過「正規化」技術,將一個大資料表分割成二個小資料表。分解:是指透過「正規化」技術,將一個大資料表分割成二個小資料表。

《《本章介紹本章介紹》》

合併:是指透過「合併」理論,將數個小資料表整合成一個大資料表。合併:是指透過「合併」理論,將數個小資料表整合成一個大資料表。

《《第八章介紹第八章介紹》》

Page 26: 第 四 章 資料庫正規化

題目:題目:利用「分割」後的表格,再進行「合併」利用「分割」後的表格,再進行「合併」 先備技能:先備技能: 1.1.參考附錄一 參考附錄一 Access 2010Access 2010 的基本操作的基本操作

2.2. 建立關聯式資料庫建立關聯式資料庫

實作步驟:實作步驟:

步驟一:開啟資料庫步驟一:開啟資料庫

開啟附書光碟中「開啟附書光碟中「 01_Access 2010(01_Access 2010( 範例資料庫範例資料庫 )\ch4\)\ch4\素材檔素材檔 \\ ch4-4.accdbch4-4.accdb 」」

步驟二:步驟二: 將分割後的兩個表格,利用 將分割後的兩個表格,利用 SQLSQL 合併合併 (( 已完成已完成 ))

步驟三:以證明步驟三:以證明無損失分解觀念,亦即將無損失分解觀念,亦即將原先關聯原先關聯 (( 表格表格 )) 的所有資訊,在的所有資訊,在「分解」「分解」之後,仍能由之後,仍能由數數

個新個新

關聯關聯 (( 表格表格 )) 中經過中經過「合併」「合併」得到得到相同的資訊相同的資訊。。

您可以參考您可以參考「完成檔「完成檔 \\ ch4-4.accdb ch4-4.accdb 」」

【【 AccessAccess上機實作上機實作 22】】

Page 27: 第 四 章 資料庫正規化

4-4.1 4-4.1 正規化示意圖 正規化示意圖 正規化就是對一個正規化就是對一個「非正規化」「非正規化」的的原始資料表原始資料表,進行,進行一連串的「分割」一連串的「分割」,,

並且分割成並且分割成數個「不重複」數個「不重複」儲存的資料表。如下圖所示:儲存的資料表。如下圖所示:

在上圖中,利用一連串的在上圖中,利用一連串的「分割」「分割」,亦即利用所謂的,亦即利用所謂的「正規化的規則」「正規化的規則」,,

循序漸進的將循序漸進的將一個一個「重複性高」的資料表「重複性高」的資料表分割成分割成數個數個「重複性低」「重複性低」或或

「沒有重複性」「沒有重複性」的資料表。的資料表。

分割分割

Page 28: 第 四 章 資料庫正規化

4-4.2 4-4.2 正規化的規則 正規化的規則  引言 引言

資料庫在正規化時會有一些規則,並且資料庫在正規化時會有一些規則,並且每條規則每條規則都稱為都稱為「正規形「正規形

式」式」。如果。如果符合第一條規則符合第一條規則,則資料庫就稱為「,則資料庫就稱為「第一正規化形式第一正規化形式

(1NF)(1NF) 」」。如果。如果符合前二條規則符合前二條規則,則資料庫就被視為屬於「,則資料庫就被視為屬於「第二正規第二正規

化形式化形式 (2NF)(2NF) 」。雖然資料庫的」。雖然資料庫的正規化最多正規化最多可以進行到可以進行到第五正規化形第五正規化形

式式,但是,但是在實務上在實務上,, BCNFBCNF 被視為大部分應用程式所需的被視為大部分應用程式所需的最高階正規最高階正規

形式形式。。

Page 29: 第 四 章 資料庫正規化

從上圖中,我們可以清楚得知,正規化是從上圖中,我們可以清楚得知,正規化是循序漸進的過程循序漸進的過程,亦即資,亦即資

料表必須料表必須滿足第一正規化的條件滿足第一正規化的條件之後,才能進行之後,才能進行第二正規化第二正規化。換言之,。換言之,

第二正規化第二正規化必須建立在必須建立在符合第一正規化的資料表上符合第一正規化的資料表上,依此類推。,依此類推。

Page 30: 第 四 章 資料庫正規化

正規化步驟正規化步驟   在資料表在資料表正規化的過程正規化的過程 (1NF (1NF 到到 BCNF) BCNF) 中中 , , 每一個階段都是每一個階段都是以欄以欄

位的「位的「相依性相依性」」 , , 做為做為分割資料表的依據分割資料表的依據之一。其完整的正規化步驟如之一。其完整的正規化步驟如

下圖所示:下圖所示:

Page 31: 第 四 章 資料庫正規化

正規化步驟正規化步驟 << 續續 >>   1.1. 第一正規化第一正規化 (First Normal Form; 1NF) (First Normal Form; 1NF) :由:由 E.F.Codd E.F.Codd 提提

出。出。

滿足所有記錄中的滿足所有記錄中的屬性內含值屬性內含值都是都是基元值基元值 (Atomic Value)(Atomic Value) 。。

即即無重覆項目群無重覆項目群。。

2.2. 第二正規化第二正規化 (Second Normal Form; 2NF) (Second Normal Form; 2NF) :由:由 E.F.Codd E.F.Codd

提出。提出。

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

即即不可「部分功能相依」於不可「部分功能相依」於主鍵主鍵。 。

3.3. 第三正規化第三正規化 (Third Normal Form; 3NF) (Third Normal Form; 3NF) :由:由 E.F.Codd E.F.Codd 提提

出。出。

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

即即除去「遞移相依」問題。除去「遞移相依」問題。

Page 32: 第 四 章 資料庫正規化

正規化步驟正規化步驟 << 續續 >>   4.Boyce-Codd4.Boyce-Codd 正規化型式正規化型式 (Boyce-Codd Normal (Boyce-Codd Normal

Form ;Form ;BCBCNF) NF) ::

由由 R.F. R.F. BBoyce oyce 與與 E.F.E.F.CCodd odd 共同提出。共同提出。

符合符合 3NF3NF 且且每一決定因素每一決定因素 (Determinant)(Determinant) 皆是皆是候選鍵候選鍵,簡稱為,簡稱為

BCNFBCNF 。。

5.5. 第四正規化第四正規化 (Fourth Normal Form; 4NF) (Fourth Normal Form; 4NF) :由:由 R. Fagin R. Fagin 提提

出。出。

符合符合 BCNFBCNF ,再,再除去所有的多值相依除去所有的多值相依。。

6.6. 第五正規化第五正規化 (Fifth Normal Form; 5NF) (Fifth Normal Form; 5NF) :由:由 R. Fagin R. Fagin 提出。提出。

符合符合 4NF4NF ,且,且沒有合併相依沒有合併相依。。

Page 33: 第 四 章 資料庫正規化

4-4.3 4-4.3 第一正規化第一正規化 (1NF)(1NF)   【【定義定義】】

是指在資料表中的所有記錄之是指在資料表中的所有記錄之屬性內含值屬性內含值都是都是基元值基元值 (Atomic (Atomic

Value)Value) 。 。

亦即亦即無重覆項目群無重覆項目群。。【【實例實例】】

假設現在有一份某某科技大學的學生選課資料表,如表假設現在有一份某某科技大學的學生選課資料表,如表 4-1(a)4-1(a) 所示:所示:表表 4-1(a) 4-1(a) 學生選課資料表學生選課資料表

Page 34: 第 四 章 資料庫正規化

我們可以將我們可以將表表 4-1(a)4-1(a) 的原始資料利用的原始資料利用二維表格二維表格來儲存,如來儲存,如表表 4-1(b)4-1(b) 。。

表表 4-1(a) 4-1(a) 學生選課資料表學生選課資料表

表表 4-1(b)4-1(b)未正規化的資料表:學生選課資料報表未正規化的資料表:學生選課資料報表二維表格二維表格來儲存來儲存

Page 35: 第 四 章 資料庫正規化

因此,我們發現有因此,我們發現有許多屬性的內含值許多屬性的內含值都具有都具有二個或二個以上的值二個或二個以上的值 (( 亦稱亦稱

為為重複資料項目重複資料項目 )) ,其原因:,其原因:尚未進行第一正規化尚未進行第一正規化。。

表表 4-1(b)4-1(b)未正規化的資料表:學生選課資料報表未正規化的資料表:學生選課資料報表

■■ 未符合未符合 1NF 1NF 資料表的「缺點」資料表的「缺點」

以上資料表中的以上資料表中的『『課程代碼課程代碼』』、、『『課程名稱課程名稱』』、、『『學分數學分數』』、、『『必選必選

修修』』、、『『成績成績』』、、『『老師編號老師編號』』及「老師姓名」及「老師姓名」欄位的長度欄位的長度無法確定無法確定,,

因為學生要因為學生要選修多少門課程選修多少門課程,,無法事先得知無法事先得知 (( 李碩安同學選了李碩安同學選了 22 門,李碩崴同門,李碩崴同

學選了學選了 33 門門 )) ,因此,必須要,因此,必須要預留很大的空間預留很大的空間給這給這七個欄位七個欄位 , , 如此反而如此反而造造

成儲存空間的浪費成儲存空間的浪費。。

重複資料項目重複資料項目

Page 36: 第 四 章 資料庫正規化

第一正規化的規則 第一正規化的規則 1.1.每一個欄位每一個欄位只能有一個只能有一個基元值基元值 (Atomic)(Atomic) 即單一值。即單一值。

例如:例如:課程名稱欄位課程名稱欄位中不能存入中不能存入兩科或兩科以上兩科或兩科以上的課程名稱。的課程名稱。

2. 2. 沒有任何兩筆以上沒有任何兩筆以上的資料是的資料是完全重覆完全重覆。。

3.3. 資料表中有主鍵資料表中有主鍵 , , 而其他而其他所有的欄位所有的欄位都都相依相依於「主鍵」。於「主鍵」。

例如例如 11 ::姓名與性別欄位姓名與性別欄位都都相依相依於於「學號」欄位「學號」欄位。。

例如例如 22 ::課程名稱、學分數、必選修、老師編號及老師姓名課程名稱、學分數、必選修、老師編號及老師姓名相依相依於於「課程代「課程代

碼」欄位碼」欄位。。

例如例如 33 ::「成績」欄位「成績」欄位相依於相依於「學號」與「課程代碼」欄位「學號」與「課程代碼」欄位。。

《《深入探討在下一頁深入探討在下一頁》》

Page 37: 第 四 章 資料庫正規化

《《深入探討深入探討 》 》   QQ :為什麼「:為什麼「成績」欄位一定要成績」欄位一定要相依於相依於「學號」與「課程代碼」欄位?「學號」與「課程代碼」欄位?分析一:分析一:

如果「成績」欄位本身如果「成績」欄位本身單獨存在單獨存在時,則沒有意義,因為只有「成績」卻無法讓時,則沒有意義,因為只有「成績」卻無法讓

同學或老師清楚得知該「成績」是屬於同學或老師清楚得知該「成績」是屬於哪一位學生哪一位學生的的哪一門課哪一門課的成績。的成績。

分析二:分析二:

如果「成績」欄位如果「成績」欄位只相依於「課程編號」只相依於「課程編號」也是沒有意義的,因為只有「成績」也是沒有意義的,因為只有「成績」

也是無法讓同學或老師清楚得知該「成績」是屬於也是無法讓同學或老師清楚得知該「成績」是屬於哪一位學生哪一位學生所修課的成績。所修課的成績。

課程代碼課程代碼 成績成績

C001C001 7474

C002C002 9393

沒有意義沒有意義

成績成績

7474

9393

沒有意義沒有意義

Page 38: 第 四 章 資料庫正規化

分析三:分析三:

如果「成績」欄位如果「成績」欄位只相依於「學號」只相依於「學號」也是沒有意義的,因為只有「成績」也是也是沒有意義的,因為只有「成績」也是

無法讓同學或老師清楚得知該「成績」是屬於無法讓同學或老師清楚得知該「成績」是屬於哪一門課哪一門課的成績。的成績。

分析四:分析四:

但是,如果「成績」欄位相依於但是,如果「成績」欄位相依於「課程編號」及「學號」二個欄位「課程編號」及「學號」二個欄位時時 , , 就可就可

以了解以了解某個學生某個學生修修某堂課某堂課的成績的成績 , , 這樣的成績資料才有意義。這樣的成績資料才有意義。

學號學號 課程代碼課程代碼 成績成績

001001 C001C001 7474

001001 C002C002 9393 有意義有意義

學號學號 成績成績

001001 7474

001001 9393 沒有意義沒有意義

Page 39: 第 四 章 資料庫正規化

第一正規化的作法: 第一正規化的作法: 【【作法作法】】將將重複的資料項重複的資料項分別分別儲存到不同的記錄儲存到不同的記錄中中 , , 並並加上適當的主鍵加上適當的主鍵。。

步驟一步驟一:檢查是否存在「重複資料項」 :檢查是否存在「重複資料項」

Page 40: 第 四 章 資料庫正規化

步驟二步驟二:將:將重複資料項重複資料項分別分別儲存到不同的記錄儲存到不同的記錄中中 , , 並並加上適當的主鍵加上適當的主鍵

未經正規化未經正規化前的學生選課表前的學生選課表

經過經過正規化後正規化後的學生選課表的學生選課表 (1NF)(1NF)

重複資料項重複資料項

儲存到不同的記錄儲存到不同的記錄

Page 41: 第 四 章 資料庫正規化

經過經過正規化後正規化後的學生選課表的學生選課表 (1NF)(1NF)

在經由第一正規化之後,使得在經由第一正規化之後,使得每一個欄位每一個欄位內內只能有一個資料只能有一個資料 (( 基元值基元值 )) 。。

雖然雖然增加了許多記錄增加了許多記錄 , , 但每一個欄位的但每一個欄位的「長度」及「數目」「長度」及「數目」都可以都可以固固

定定 , , 而且我們可用而且我們可用「課程代碼」「課程代碼」欄位加上欄位加上「學號」「學號」欄位當作主鍵欄位當作主鍵 ,, 使得使得

在查詢某學生修某課程的在查詢某學生修某課程的「成績」「成績」時時 , , 就非常方便而快速了。就非常方便而快速了。

Page 42: 第 四 章 資料庫正規化

題目:題目:第一正規化後的結果第一正規化後的結果 先備技能:先備技能: 1.1.參考附錄一 參考附錄一 Access 2010Access 2010 的基本操作的基本操作

2.2. 建立關聯式資料庫建立關聯式資料庫

實作步驟:實作步驟:

步驟一:開啟資料庫步驟一:開啟資料庫

開啟附書光碟中「開啟附書光碟中「 01_Access 2010(01_Access 2010( 範例資料庫範例資料庫 )\ch4\)\ch4\素材檔素材檔 \\ ch4-4-3(1NF) ch4-4-3(1NF) 」」

步驟二:步驟二: 以證明在 以證明在 1NF1NF 之後,之後,

1.1.每一個欄位每一個欄位只能有一個只能有一個基元值基元值。。

例如:例如:課程名稱欄位課程名稱欄位中不能存入中不能存入兩科或兩科以上兩科或兩科以上的課程名稱。的課程名稱。

2. 2. 沒有任何兩筆以上沒有任何兩筆以上的資料是的資料是完全重覆完全重覆。。

3.3. 資料表中有主鍵資料表中有主鍵 , , 而其他而其他所有的欄位所有的欄位都都相依相依於「主鍵」於「主鍵」

您可以參考您可以參考「完成檔「完成檔 \\ ch4-4-3(1NF) ch4-4-3(1NF) 」」

【【 AccessAccess上機實作上機實作 33】】

Page 43: 第 四 章 資料庫正規化

4-4.4 4-4.4 第二正規化第二正規化 (2NF)(2NF)    在完成了在完成了第一正規化之後第一正規化之後,讀者是否發現在資料表中,讀者是否發現在資料表中產生許多重複產生許多重複

的資料的資料。如此。如此 , , 不但不但浪費儲存的空間浪費儲存的空間 , , 更容易造成更容易造成新增、修改及刪除新增、修改及刪除

資料時的資料時的異常狀況異常狀況,說明如下。,說明如下。

(1) (1) 新增異常檢查新增異常檢查 (Insert Anomaly)(Insert Anomaly)

無法先新增無法先新增課程資料,如「課程代碼」及「課程名稱」,課程資料,如「課程代碼」及「課程名稱」,要等選課之後要等選課之後,,才能新增才能新增。。

原因:以上的新增動作原因:以上的新增動作違反「實體完整性規則」違反「實體完整性規則」,因為,,因為,主鍵主鍵或或複合主鍵複合主鍵不可以為空值不可以為空值

NULLNULL 。。

Page 44: 第 四 章 資料庫正規化

(2)(2) 修改異常檢查修改異常檢查 (Update Anomaly)(Update Anomaly)

「網頁設計」「網頁設計」課程課程重覆多次重覆多次,因此,修改「網頁設計」課程的,因此,修改「網頁設計」課程的成績成績時,時,

可能有些記錄可能有些記錄未修改到未修改到,造成,造成資料的不一致現象資料的不一致現象。。

例如:有選例如:有選「網頁設計」「網頁設計」課程的同學之課程的同學之成績各加成績各加 55 分分,可能會,可能會有些同學有些同學

有加分有加分,而,而有些同學卻沒有加分有些同學卻沒有加分,導致,導致資料不一致的情況資料不一致的情況。。

Page 45: 第 四 章 資料庫正規化

(3)(3) 刪除異常檢查刪除異常檢查 (Delete Anomaly)(Delete Anomaly)

當當刪除刪除 #4#4 學生的記錄時,同時也會學生的記錄時,同時也會刪除刪除課程名稱、學分數及相關的資課程名稱、學分數及相關的資

料料。。

所以導致所以導致「計概」課程的「計概」課程的 22 學分數學分數也也同時被刪除同時被刪除了。了。

綜合上述的三種異常現象,所以綜合上述的三種異常現象,所以 , , 我們必須我們必須

進行「第二階正規化」進行「第二階正規化」 , , 來消除這些問題。來消除這些問題。

Page 46: 第 四 章 資料庫正規化

第二正規化的規則 第二正規化的規則 如果資料表符合以下的條件如果資料表符合以下的條件 , , 我們說這個資料表我們說這個資料表符合第二階正規化符合第二階正規化的形的形

式式 (Second Normal Form, (Second Normal Form, 簡稱簡稱 2NF)2NF) ::

符合符合 1NF1NF

每一非鍵屬性每一非鍵屬性 (( 如:姓名、性別如:姓名、性別…… )) 必須「完全相依」於必須「完全相依」於主鍵主鍵 (( 學學

號號 )) ;即;即不可「部分功能相依」於主鍵不可「部分功能相依」於主鍵。。

換言之,換言之,「部分功能相依」「部分功能相依」只有當只有當「主鍵」「主鍵」是由是由「多個欄位」「多個欄位」組組

成時才會發生成時才會發生 (( 亦即亦即複合主鍵複合主鍵 )) ,也就是當,也就是當某些欄位某些欄位只與「只與「主鍵中的部主鍵中的部

分欄位分欄位」有」有「相依性」「相依性」 , , 而與而與另一部分的欄位另一部分的欄位沒有相依性沒有相依性。。

Page 47: 第 四 章 資料庫正規化

第二正規化的作法 第二正規化的作法  分割資料表分割資料表;亦即將;亦即將「部分功能相依」「部分功能相依」的欄位的欄位「分割」出去「分割」出去,,

再另外組成再另外組成「新的資料表」「新的資料表」。其步驟如下:。其步驟如下:

步驟一:步驟一:檢查是否存在「檢查是否存在「部分功能相依部分功能相依」」

「姓名」「姓名」只相依只相依於「學號」 於「學號」 「課程名稱」「課程名稱」只相依只相依於「課程代碼」於「課程代碼」

在上面的資料表中,在上面的資料表中,主鍵主鍵是由是由「「學號學號 ++ 課程代碼課程代碼」」兩個欄位所組成,但兩個欄位所組成,但「姓名」和「性別」「姓名」和「性別」

只與「只與「學號學號」有「」有「相依性相依性」,亦即」,亦即 (( 姓名,性別姓名,性別 )) 相依於相依於學號學號,而「,而「課程名稱課程名稱」只與「」只與「課程代碼課程代碼」」

有「有「相依性相依性」,亦即」,亦即 (( 課程名稱,學分數,必選修,老師編號,老師姓名課程名稱,學分數,必選修,老師編號,老師姓名 )) 相依於相依於課程代碼課程代碼。。

因此,因此,學號學號是是複合主鍵複合主鍵 (( 學號學號 ,, 課程代碼課程代碼 )) 的一部份。 的一部份。 ∴存在部分功能相依。∴存在部分功能相依。

Page 48: 第 四 章 資料庫正規化

步驟二步驟二: 將「部分功能相依」的欄位: 將「部分功能相依」的欄位分割出去分割出去,再另外,再另外組成新的資料表組成新的資料表

我們將「選課資料表」分割成三個較小的資料表我們將「選課資料表」分割成三個較小的資料表 (( 加「底線」的欄位為加「底線」的欄位為

主鍵主鍵 )) ::

一、學生資料表一、學生資料表 (( 學號學號,姓名,性別,姓名,性別 ))

二、成績資料表二、成績資料表 (( 學號,課程代碼學號,課程代碼,成績,成績 ))

學號學號 姓名姓名 性別性別

001001 李碩安李碩安 男男

002002 李碩崴李碩崴 男男

學號學號 課程代碼課程代碼 成績成績

001001 C001C001 7474

001001 C002C002 9393

002002 C002C002 6363

002002 C003C003 8282

002002 C005C005 9494

Page 49: 第 四 章 資料庫正規化

三、課程資料表三、課程資料表 (( 課程代碼課程代碼,課程名稱,學分數,必選修,,課程名稱,學分數,必選修,

老師編號,老師姓名老師編號,老師姓名 ))

在第二正規化之後,產生三個資料表,分別為學生資料表、成績資料表在第二正規化之後,產生三個資料表,分別為學生資料表、成績資料表

及課程資料表,及課程資料表,除了「課程資料表」之外除了「課程資料表」之外,,其餘兩個資料表其餘兩個資料表 (( 學生資料學生資料

表與成績資料表表與成績資料表 )) 都已符合都已符合 2NF, 3NF2NF, 3NF及及 BCNFBCNF 。。

課程代碼課程代碼 課程名稱課程名稱 學分數學分數 必選修必選修 老師編號老師編號 老師姓名老師姓名

C001C001 程式語言程式語言 44 必必 T001T001 李安李安C002C002 網頁設計網頁設計 33 選選 T002T002 張三張三C003C003 計  概計  概 22 必必 T003T003 李四李四C005C005 網路教學網路教學 44 選選 T005T005 王五王五

Page 50: 第 四 章 資料庫正規化

題目:題目:第二正規化後的結果第二正規化後的結果 先備技能:先備技能: 1.1.參考附錄一 參考附錄一 Access 2010Access 2010 的基本操作的基本操作

2.2. 建立關聯式資料庫建立關聯式資料庫

實作步驟:實作步驟:

步驟一:開啟資料庫步驟一:開啟資料庫

開啟附書光碟中「開啟附書光碟中「 01_Access 2010(01_Access 2010( 範例資料庫範例資料庫 )\ch4\)\ch4\素材檔素材檔 \\ ch4-4-3(2NF) ch4-4-3(2NF) 」」

步驟二:步驟二: 以證明在 以證明在 2NF2NF 之後,之後,

將將「部分功能相依」「部分功能相依」的欄位的欄位「分割」出去「分割」出去,另外分割成三個資料表,另外分割成三個資料表「學生資料表」、「學生資料表」、

「成績資料表」及「課程資料表」。「成績資料表」及「課程資料表」。

您可以參考您可以參考「完成檔「完成檔 \\ ch4-4-3(2NF) ch4-4-3(2NF) 」」

【【 AccessAccess上機實作上機實作 44】】

Page 51: 第 四 章 資料庫正規化

4-4.5 4-4.5 第三正規化第三正規化 (3NF)(3NF)   在完成了在完成了第二正規化之後第二正規化之後,其實還存在以下,其實還存在以下三種異常現象三種異常現象 ,, 亦即亦即新增、新增、

刪除或更新刪除或更新資料時的異常狀況,說明如下:資料時的異常狀況,說明如下:

(1)(1) 新增異常新增異常 (Insert Anomaly)(Insert Anomaly)

以上以上無法先新增無法先新增老師資料,老師資料,要等確定課程代碼之後要等確定課程代碼之後,,才能輸入才能輸入。。

原因為:新增動作原因為:新增動作違反「實體完整性規則」 違反「實體完整性規則」 ,因為,因為主鍵或複合主鍵主鍵或複合主鍵不可以為空值不可以為空值 NULLNULL 。。

Page 52: 第 四 章 資料庫正規化

(2)(2) 修改異常修改異常 (Update Anomaly)(Update Anomaly)

假如「李安」老師開設多門課程時,則欲修改「李安」老師姓名假如「李安」老師開設多門課程時,則欲修改「李安」老師姓名

為「李碩安」時,可能有些記錄為「李碩安」時,可能有些記錄未修改到未修改到,造成,造成資料的不一致現象資料的不一致現象。。

未修改到未修改到

Page 53: 第 四 章 資料庫正規化

(3)(3) 刪除異常刪除異常 (Delete Anomaly)(Delete Anomaly)

當當刪除刪除 #1#1 課程的記錄時,同時也課程的記錄時,同時也刪除刪除老師編號老師編號 T001T001 。。

所以導致所以導致老師編號老師編號 T001T001 及及老師姓名的資料老師姓名的資料也同時被刪除了。也同時被刪除了。

綜合上述的三種異常現象,所以綜合上述的三種異常現象,所以 , , 我們必須我們必須進行「第三階正規化」進行「第三階正規化」 , , 來消除這些問題。來消除這些問題。

記錄記錄 課程代碼課程代碼 課程名稱課程名稱 學分數學分數 必選修必選修 老師編號老師編號 老師姓名老師姓名

#1#1 C001C001 程式語言程式語言 44 必必 T001T001 李安李安

#2#2 C002C002 網頁設計網頁設計 33 選選 T002T002 張三張三

#3#3 C003C003 計  概計  概 22 必必 T003T003 李四李四

#4#4 C005C005 網路教學網路教學 44 選選 T005T005 王五王五

Page 54: 第 四 章 資料庫正規化

第三正規化的規則 第三正規化的規則 如果資料表符合以下條件如果資料表符合以下條件 , , 我們就說這個資料表我們就說這個資料表符合第三階正規化符合第三階正規化的形的形

式式 (Third Normal Form, (Third Normal Form, 簡稱簡稱 3NF)3NF) ::

符合符合 2NF2NF

各欄位與「主鍵」之間各欄位與「主鍵」之間沒有「遞移相依」沒有「遞移相依」的關係。的關係。

【【如何找遞移相依呢? 如何找遞移相依呢? 】】

若要找出資料表中若要找出資料表中各欄位與「主鍵」之間各欄位與「主鍵」之間的遞移相依性的遞移相依性 , , 最簡單的方法最簡單的方法

就是就是從左到右掃瞄從左到右掃瞄資料表中各欄位有沒有資料表中各欄位有沒有『『與主鍵無關的相依性與主鍵無關的相依性』』存在。存在。

可能的情況如下:可能的情況如下:

1.1.如果有如果有存在存在時,則代表時,則代表有「遞移相依」有「遞移相依」的關係的關係

2. 2. 如果有如果有不存在不存在時,則代表時,則代表沒有「遞移相依」沒有「遞移相依」的關係的關係

Page 55: 第 四 章 資料庫正規化

第三正規化的作法 第三正規化的作法  分割資料表;亦即將分割資料表;亦即將「遞移相依」「遞移相依」或或「間接相依」「間接相依」的欄位的欄位「分割」「分割」

出去出去,再另外組成,再另外組成「新的資料表」「新的資料表」。其步驟如下:。其步驟如下:

步驟一步驟一:檢查是否存在:檢查是否存在「遞移相依」「遞移相依」

由於每一門課程都會有授課的老師由於每一門課程都會有授課的老師 ,, 因此,因此,「老師編號」「老師編號」相依於相依於「課程「課程

代碼」代碼」。並且。並且「老師姓名」「老師姓名」相依於相依於「教師編號」「教師編號」 ,, 因此,存在有因此,存在有『『與主與主

鍵無關的相依性鍵無關的相依性』』。亦即存在。亦即存在「老師姓名」「老師姓名」與與主鍵主鍵 (( 課程代碼課程代碼 )) 無關的無關的

相依性。相依性。

∴∴存在遞移相依。存在遞移相依。

Page 56: 第 四 章 資料庫正規化

 

上述「課程資料表」中的上述「課程資料表」中的 [[ 課程名稱課程名稱 ]] 、、 [[ 學分數學分數 ]] 、、 [[ 必選修必選修 ]] 、、

[[ 老師編號老師編號 ]] 都都直接相依直接相依於於主鍵主鍵 [[ 課程代碼課程代碼 ](]( 簡單的說,這些都是課程簡單的說,這些都是課程

資料的必需欄位資料的必需欄位 )) ,而,而 [[ 老師姓名老師姓名 ]] 是是直接相依直接相依於於 [[ 老師編號老師編號 ]] ,然後,然後

才才間接相依間接相依於於 [[ 課程代碼課程代碼 ]] ,它並,它並不是不是直接相依直接相依於於 [[ 課程代碼課程代碼 ]] ,稱為,稱為

「遞移相依」「遞移相依」『『 Transitive DependencyTransitive Dependency』』或「或「間接相依間接相依」。例如:」。例如:

當當 AAB, BB, BCC ,則,則 AAC(C( 稱為稱為遞移相依遞移相依 )) 。因此,在「課程資料。因此,在「課程資料

表」中表」中存在「遞移相依」關係現象存在「遞移相依」關係現象,,

Page 57: 第 四 章 資料庫正規化

步驟二:步驟二:將將「遞移相依」的欄位「分割」出去「遞移相依」的欄位「分割」出去,再另外組成,再另外組成「新的資料表」「新的資料表」

因此,我們將「課程資料表」因此,我們將「課程資料表」分割分割為為二個資料表二個資料表,並且利用,並且利用外鍵外鍵

(F.K.)(F.K.) 來連接來連接二個資料表二個資料表。如下圖所示。。如下圖所示。

Page 58: 第 四 章 資料庫正規化

在我們完成第三正規化後,共產生了在我們完成第三正規化後,共產生了四個表格四個表格,如下表所示:,如下表所示:

第三正規化後的四個表格 第三正規化後的四個表格 

第二正規化產生的表格第二正規化產生的表格

第三正規化產生的表格第三正規化產生的表格

Page 59: 第 四 章 資料庫正規化

題目:題目:第三正規化後的結果,並建立關聯圖第三正規化後的結果,並建立關聯圖 先備技能:先備技能: 1.1.參考附錄一 參考附錄一 Access 2010Access 2010 的基本操作的基本操作

2.2. 建立關聯式資料庫建立關聯式資料庫

實作步驟:實作步驟:

步驟一:開啟資料庫步驟一:開啟資料庫

開啟附書光碟中「開啟附書光碟中「 01_Access 2010(01_Access 2010( 範例資料庫範例資料庫 )\ch4\)\ch4\素材檔素材檔 \\ ch4-4-3(3NF) ch4-4-3(3NF) 」」

步驟二:步驟二: 以證明在 以證明在 3NF3NF 之後,之後,

將將「遞移相依」的欄位「分割」出去「遞移相依」的欄位「分割」出去,再另外組成,再另外組成「新的資料表」。「新的資料表」。因此,我們將「課程資因此,我們將「課程資

料表」料表」分割分割為為二個資料表二個資料表,分別為「課程資料表」與「老師資料表」。,分別為「課程資料表」與「老師資料表」。

步驟三:在步驟三:在 3NF3NF 之後,總共產生了四個資料表之後,總共產生了四個資料表 (( 「學生資料表」、「成績資料表」、「課程資料表」「學生資料表」、「成績資料表」、「課程資料表」

與「老師資料表」與「老師資料表」 ))

您可以參考您可以參考「完成檔「完成檔 \\ ch4-4-3(3NF) ch4-4-3(3NF) 」」

【【 AccessAccess上機實作上機實作 55】】

Page 60: 第 四 章 資料庫正規化

4-4.6 BCNF4-4.6 BCNF 正規化 正規化  是由是由 BoyceBoyce和和 CoddCodd於於 19741974 年所提出來的年所提出來的 3NF3NF 的改良式的改良式。其。其

條件比條件比 3NF3NF 更加嚴苛。因此更加嚴苛。因此每一個符合每一個符合 BCNFBCNF 的關聯的關聯一定也是一定也是 3NF3NF 。。

對於大部分資料庫來說對於大部分資料庫來說 , , 通常只需要執行到第三階段的正規化就足夠了。通常只需要執行到第三階段的正規化就足夠了。

【【適用時機適用時機】】

如果資料表的如果資料表的「主鍵」「主鍵」是由是由「多個欄位」組成「多個欄位」組成的的 , , 則必須則必須再執行再執行

Boyce-Codd Boyce-Codd 正規化。正規化。

Page 61: 第 四 章 資料庫正規化

BCNFBCNF 的規則 的規則  如果資料表的如果資料表的「主鍵」「主鍵」只由「只由「單一欄位」單一欄位」組合而成組合而成 , , 則則符合第三階符合第三階

正正

規化規化的資料表的資料表 , , 亦亦符合符合 BCNF(Boyce-Codd Normal Form)BCNF(Boyce-Codd Normal Form)

正規化正規化。。

如果資料表的如果資料表的「主鍵」「主鍵」由由「多個欄位」「多個欄位」組成組成 (( 又稱為又稱為複合主鍵複合主鍵 ), ), 則則

資料資料

表表就必須要符合以下條件就必須要符合以下條件 , , 我們就說這個資料表符合我們就說這個資料表符合

BCNF(Boyce-BCNF(Boyce-

Codd Normal Form)Codd Normal Form) 正規化的形式。正規化的形式。

1.1.符合符合 3NF 3NF 的格式的格式。。

2.2. 「主鍵」中的各欄位「主鍵」中的各欄位不可以相依於不可以相依於其他其他非主鍵的欄位非主鍵的欄位。。

Page 62: 第 四 章 資料庫正規化

檢驗「成績資料表」是否滿足檢驗「成績資料表」是否滿足 BCNF BCNF 規規範範  由於在我們完成第三正規化之後,已經分割成四個資料表,其中「成績由於在我們完成第三正規化之後,已經分割成四個資料表,其中「成績

資料表」的主鍵是由資料表」的主鍵是由「多個欄位」「多個欄位」組成組成 (( 又稱為又稱為複合主鍵複合主鍵 )) 。。

因此,我們利用因此,我們利用 BCNF(Boyce-Codd Normal Form)BCNF(Boyce-Codd Normal Form) 正規正規

化的條件化的條件 , , 來檢驗「成績資料表」:來檢驗「成績資料表」:

成績資料表成績資料表 (( 學號,課程代碼學號,課程代碼,成績,成績 ))

說明:說明:

「成績」欄位「成績」欄位相依於相依於「課程代碼」及「課程代碼」及「學號」欄位「學號」欄位,對,對「課程代碼」欄位「課程代碼」欄位而言而言 , , 並沒有相並沒有相

依於依於「成績」欄位「成績」欄位;對;對「學號」欄位「學號」欄位而言而言 , , 也沒有相依於也沒有相依於「成績」欄位「成績」欄位。所以。所以成績資料成績資料

表表是是符合符合『『 Boyce-Codd Boyce-Codd 正規化的形式正規化的形式』』的資料表的資料表。。

學號學號 課程代碼課程代碼 成績成績001001 C001C001 7474

001001 C002C002 9393

002002 C002C002 6363

002002 C003C003 8282

002002 C005C005 9494

Page 63: 第 四 章 資料庫正規化

4-4.7 4-4.7 怎樣才叫做是好的關聯?怎樣才叫做是好的關聯?   正規化就是將一個正規化就是將一個大資料表大資料表「分割」「分割」成數個成數個不重複的小資料表不重複的小資料表。從。從

1NF1NF到到 3NF3NF ,再利用,再利用 BCNFBCNF 來逐步檢驗來逐步檢驗資料表中資料表中「主鍵」「主鍵」由由「多個「多個

欄位」欄位」組成的相依性問題,這是一連串改良關聯的過程。組成的相依性問題,這是一連串改良關聯的過程。

可是,究竟要做到哪一個程度才算「足夠好」呢?通常我們會要可是,究竟要做到哪一個程度才算「足夠好」呢?通常我們會要

求:就算求:就算不能作到不能作到 BCNFBCNF ,也要,也要做到做到 3NF3NF才可以才可以。。

Page 64: 第 四 章 資料庫正規化

4-5 4-5 反正規化 反正規化 【【引言引言】】

正規化只是正規化只是建立資料表的原則建立資料表的原則,,而非鐵律而非鐵律。如果。如果過度正規化過度正規化,反而,反而

導致資料導致資料存取的效率下降存取的效率下降。因此,如果要以。因此,如果要以執行效率執行效率 (( 查詢速度查詢速度 )) 為優為優

先先考量時,則我們還必須考量時,則我們還必須適當的反正規化適當的反正規化(( De-normalizationDe-normalization )。)。

有時,有時,過度的正規化過度的正規化,反而會造成,反而會造成資料處理速度上的困擾資料處理速度上的困擾,因此,,因此,

當我們在當我們在進行資料庫正規化進行資料庫正規化的的同時同時,可能也必須要,可能也必須要測試系統執行效率測試系統執行效率,,

當效率不理想時當效率不理想時,必須做,必須做適當的反正規化適當的反正規化,亦即將原來的,亦即將原來的第三階正規化第三階正規化

降級降級為為第二階正規化第二階正規化,甚至,甚至降到降到第一階正規化第一階正規化。但是,在進行。但是,在進行反正規化反正規化

的同時,可能也會的同時,可能也會造成的資料重覆性問題造成的資料重覆性問題。。

Page 65: 第 四 章 資料庫正規化

4-5 4-5 反正規化反正規化 << 續續 >>   【【定義定義】】將原來的將原來的第三階正規化第三階正規化降級降級為為第二階正規化第二階正規化,甚至,甚至降到降到第一階第一階

正規化正規化。。

【【使用時機使用時機】】查詢比例較大查詢比例較大的環境。的環境。

【【分析分析】】

1.1.對「資料異動」觀點對「資料異動」觀點

當當正規化愈多層正規化愈多層,,愈有利於資料的異動愈有利於資料的異動 (( 包括:新增、修改及刪除包括:新增、修改及刪除 )) ,,

因為因為異動異動時時只需針對只需針對某一個某一個較小的資料表較小的資料表,可以,可以避免資料的異常現避免資料的異常現

象象。。

2.2.對「資料查詢」觀點對「資料查詢」觀點

當當正規化愈多層正規化愈多層,,愈不利於資料的查詢愈不利於資料的查詢功能,因為資料功能,因為資料查詢時查詢時往往 往往

會會合併合併許多個資料表許多個資料表,,導致查詢效能降低導致查詢效能降低。。

因此,因此,「正規化論理」「正規化論理」與與「查詢合併原理」「查詢合併原理」是是存在相互衝突存在相互衝突。。

Page 66: 第 四 章 資料庫正規化

【【舉例舉例】】

假設我們在進行正規化時,特別將「客戶資料表」中的「地址」分割成假設我們在進行正規化時,特別將「客戶資料表」中的「地址」分割成

以下欄位:以下欄位:

<1><1> 正規化關聯正規化關聯

客戶資料表客戶資料表 (( 編號編號,姓名,郵遞區號,姓名,郵遞區號 ))

地址明細表地址明細表 (( 郵遞區號郵遞區號、城市、路名、城市、路名 ))

【【優點優點】】可以直接從每一個欄位當作「關鍵字」來查詢。可以直接從每一個欄位當作「關鍵字」來查詢。

【【例如例如】】查詢「高雄市」或查詢「查詢「高雄市」或查詢「 806806 」或查詢「和平路」等。」或查詢「和平路」等。

【【適用時機適用時機】】租屋網站;可以讓使用者進行「進階」查詢。租屋網站;可以讓使用者進行「進階」查詢。

【【缺點缺點】】如果要查詢的資訊是要如果要查詢的資訊是要合併多個資料表合併多個資料表時,將會時,將會影響執行效率影響執行效率。。

因此,一般的做法還是讓因此,一般的做法還是讓地址地址「「反正規化反正規化」。」。<2><2> 反正規化關聯反正規化關聯

客戶資料表客戶資料表 (( 編號編號,姓名,,姓名,郵遞區號郵遞區號、城市、路名、城市、路名 ))

Page 67: 第 四 章 資料庫正規化

4-6 4-6 結語 結語 基本上,基本上,建立建立 E-R ModelE-R Model 後已經可以達到後已經可以達到正規化的前三階正規化的前三階

(1NF,2NF,3NF)(1NF,2NF,3NF) 或是或是 BCNFBCNF 的步驟的步驟。因此,我們必須瞭解建立完整的。因此,我們必須瞭解建立完整的

資料庫結構,可以用兩種方法來建構:資料庫結構,可以用兩種方法來建構:

1. E-R Model 1. E-R Model (( 第三章介紹第三章介紹 ))

2. 2. 資料庫正規化 資料庫正規化 (( 第四章介紹第四章介紹 )) 驗證驗證 E-R ModelE-R Model 是否達到是否達到最佳最佳

化化資料需求分析

(情境)

需求訪談

建立實體關係模式

(ER)

轉換

關聯式資料模式

(Table)

對映 正規化

(Normalization)

驗證

表格是否相同?否 是

完成資料表重新檢查步驟三及步驟四

步驟一 步驟二 步驟三 步驟四

Page 68: 第 四 章 資料庫正規化

4-6 4-6 結語結語 << 續續 >>   1.1. 如果是如果是剛成立的企業剛成立的企業想要電腦化,則是要從想要電腦化,則是要從需求訪談開始需求訪談開始,將訪談,將訪談

的資料需求進行的資料需求進行分析分析 (( 情境情境 )) ,然後建立,然後建立實體關係模式實體關係模式 (ER(ER圖圖 )) ,接下,接下

來依照關聯式的規則,對映成來依照關聯式的規則,對映成資料表資料表。筆者認為如果步驟一到步驟三都。筆者認為如果步驟一到步驟三都

有確實時,對映後的資料表會與有確實時,對映後的資料表會與正規化的表格正規化的表格是是一樣的一樣的。所以,正規化。所以,正規化

的步驟就的步驟就不一定要進行不一定要進行。如下圖所示:。如下圖所示:

資料需求分析

(情境)

需求訪談

建立實體關係模式

(ER)

轉換

關聯式資料模式

(Table)

對映 正規化

(Normalization)

驗證

表格是否相同?否 是

完成資料表重新檢查步驟三及步驟四

步驟一 步驟二 步驟三 步驟四

Page 69: 第 四 章 資料庫正規化

4-6 4-6 結語結語 << 續續 >>   2.2. 如果某一企業早期如果某一企業早期已經人工作業已經人工作業,並且使用,並且使用許多表單許多表單,筆者建議,,筆者建議,

可以可以直接進行正規化直接進行正規化。但是,如果人工作業的表單。但是,如果人工作業的表單沒有完全依照企業的沒有完全依照企業的

需求需求的設計時,則筆者建議,還是要依照的設計時,則筆者建議,還是要依照步驟一步驟一到到步驟三步驟三來進行。如下來進行。如下

圖所示:圖所示:

資料需求分析

(情境)

需求訪談

建立實體關係模式

(ER)

轉換

關聯式資料模式

(Table)

對映 正規化

(Normalization)

驗證

表格是否相同?否 是

完成資料表重新檢查步驟三及步驟四

步驟一 步驟二 步驟三 步驟四