270 likes | 478 Views
第三章 正規化 ( Normalization ). Chapter 3 Outline. 引言 - 為何需要正規化 3-1 關聯式模式概念 3-2 關聯表的特性 3-3 關聯式限制 3-4 關聯表設計之要點 3-5 功能相依 3-6 正規化型式 3-7 本章總結. 為何需要正規化. 在關聯式資料庫中的關聯表必須 滿足某些限制特性才能避免發生一些已知的資料更新 ( 新增、刪除、修改 ) 問題。而正規化 (Normalization) 程序就是將關聯表轉換成符合限制特性的過程;或者說是為了要消除這些已知會引發問題的可能性。.
E N D
Chapter 3 Outline • 引言-為何需要正規化 • 3-1 關聯式模式概念 • 3-2 關聯表的特性 • 3-3 關聯式限制 • 3-4 關聯表設計之要點 • 3-5 功能相依 • 3-6 正規化型式 • 3-7 本章總結
為何需要正規化 • 在關聯式資料庫中的關聯表必須滿足某些限制特性才能避免發生一些已知的資料更新(新增、刪除、修改)問題。而正規化(Normalization)程序就是將關聯表轉換成符合限制特性的過程;或者說是為了要消除這些已知會引發問題的可能性。
3-1 關聯式模式概念-1 • 關聯式模式主要目的 • 達成高度的資料獨立(Data Independence) • 減少資料重複性(Data Redundancy)與資料一致性(Data Consistency) 。可經由正規化(Normalization)及整合限制(Integrity Constraints)達成此目標。 • 達成宣告式程式語言而非傳統程序式程式語言,而宣告式程式語言為SQL。 • 在關聯式模式中,資料庫是一群「關聯表」的集合
3-1 關聯式模式概念-2 • 值域:為一群單元值 (Atomic Values) 所成的集合,主要用途為定義資料的有效範圍 • 關聯綱要:是由一個關聯表名稱 R 和一群屬性 A1, A2, …, An 所組成,每一個屬性 Ai 均有值域 Di 所對應 • 關聯表:一個關聯綱要 R(A1, A2, …, An)的關聯表 r,記號為 r(R) 為一群值組 (Tuples) 所成的集合 • 主鍵:由一個或一個以上的屬性所組成,具有唯一性
3-1 關聯式模式概念-3 • 關聯表的正式定義 • 標題(Heading):為關聯表R的綱要,包含了關聯表名稱(name)及一組屬性(attributes) • 本體(body):指關聯表中資料部份,它是由值組(tuples)所組成,值組之內容與關聯表之基數(cardinality)是會隨時間變化。
3-2 關聯表的特性 • 關聯表的值組是沒有順序的 • 關聯表不含重覆的數值 • 關聯表的屬性是沒有順序的 • 關聯表中的屬性值是單元值
3-3 關聯式限制-1 • 值域限制:規範關聯式綱要中每一屬性對應的值域有效範圍包括 • 資料型態(data type):限制值域的資料型態。 • 資料長度(data length):限制值域之資料「長度」之有效範圍。 • 資料範圍(data range):限制值域之資料有效範圍。
3-3 關聯式限制-2 • 個體整合限制(Entity Integrity Constraint):限制主鍵不能為空值。 • 參考整合限制(Referential Integrity Constraint):相對於值域限制和個體整合限制是規範個別關聯表的限制,參考整合限制是規範兩個關聯表中的值組間的限制。 • 外鍵(Foreign Key/FK):外鍵是用來規範兩個關聯式綱要之間的參考整合限制。
3-4 關聯表設計之要點 • 屬性的語意 • 所謂屬性的語意是指儲存在關聯表中之屬性值的解釋意義,亦即是屬性間的關係。 • 減少重覆的值組 • 新增不正常(Insertion Anomalies) • 刪除不正常(Deletion Anomalies) • 修改不正常(Modification Anomalies) • 減少空值 • 當某些屬性不能在每一值組中均能解釋其語意時,則會產生空值(Null values)的情況。
X Y 3-5 功能相依-1 • 功能相依 (Functional Dependencies/FD):若且為若關聯表R中的X資料值可唯一決定Y的資料值時,稱Y功能相依於X,記為X→Y,(讀做X功能決定Y),其中X和Y為R中兩個屬性集合 。 • FD:X→Y可用右圖表示 • 例如:工作表中專案編號可以唯一專案名稱,所以這就是一條FD。
Y X1 X2 3-5 功能相依-2 • 部份功能相依(Partial Functional Dependencies/PFD):關聯表R上存在一個功能相依FD:X→Y,如果從屬性集合X中移除任一屬性A時,則使得這個功能相依不存在,我們稱Y完全功能相依(Fully Functional Dependencies)於X;否則就稱Y部份功能相依於X。 表示法如下:
3-6 正規化型式 • 第一正規化型式(First Normal Form/1NF) • 第二正規化型式(Second Normal Form/2NF) • 第三正規化型式(Third Normal Form/3NF) • Boyce/Codd正規化型式(Boyce/Codd Normal Form/BCNF) • 第四正規化型式(Fourth Normal Form/4NF) • 第五正規化型式(Fifth Normal Form/簡稱5NF)
1NF 2NF 3NF BCNF 4NF 5NF 3-6 正規化型式-關係圖 • 1NF~5NF的關係是子集的關係,也就是說限制越來越嚴格
3-6.1第一正規化型式 • 一個關聯表R為第一正規化型式,若且唯若R所有屬性的相對值域只包含單元值。 屬性contact為一個多值屬性,所以原始型式的關聯表distributor不是1NF 這是1NF嗎?Why?
3-6.2第二正規化型式 • 一個關聯表R是第二正規化型式,若且唯若R為第一正規化型式,且所有不為主鍵的屬性都「完全功能相依」於關聯表R的主鍵。 該關聯表為1NF,但是為2NF嗎?Why?
3.6.2 1NF->2NF • 轉換原則 :將關聯表分割成兩個(或兩個以上)關聯表,而且分割後的關聯表必須維持「不失真」
3-6.3 第三正規化型式 • 一個關聯表R為第三正規化型式,若且唯若R為第二正規化型式,而且所有非鍵屬性彼此間都不存在功能相依。 運費,新加入之欄位 該關聯表為2NF,但是為3NF嗎?Why?
3.6.1非3NF所引發之問題 • 新增不正常:無法加入一個地區的運費,而該地區目前沒有供應商存在 • 刪除不正常:如果distributor第一個值組刪除,則連帶的亦把“台北之運費為150”的資訊刪除掉。 • 更新不正常:將第二個值組的資料"新竹的運費更改為400",如果沒有將第三個值組的資料一併更新,則會產生資料不一致的情況。
3.6.3 2NF->3NF • 將2NF關聯表distributor分割成兩張關聯表,如下:
範例:工作表 工作表(專案編號,專案名稱,員工編號,姓名,工作類別,時薪,工作時數) 1NF
範例:工作表 • 1NF • 1NF->2NF 專案表(專案編號,專案名稱) 員工表 (員工編號,姓名,工作類別,時薪) 工時表 (專案名稱,員工編號,工作時數)
範例:工作表 2NF 2NF->3NF 員工表 (員工編號,姓名,工作類別) 時薪表 (工作類別,時薪)
範例:工作表 3NF 專案表 (專案編號,專案名稱) 員工表 (員工編號,姓名,工作類別) 時薪表 (工作類別,時薪) 工時表 (專案名稱,員工編號,工作時數)
3-7 本章總結 • 正規化 (Normalization) • 消除資料重覆性 • 去除更新不正常的情況 • 簡化關聯表之屬性間限制條件 • 正規化型式的目的 • 1NF:去除非單元值屬性 • 1NF→2NF:去除非鍵屬性的部份功能相依 • 2NF→3NF:去除非鍵屬性的遞移功能相依