You are on page 1of 12

正規化

Normalization

1
正規化的目的
• 決定是否需要再切割成較小的關聯表
• 減少關聯表重複的儲存空間
• 避免更新異常
– 新增異常
• 新增某些資料時必須同時新增其他的資料
– 刪除異常
• 刪除某些資料時必須同時刪除其他的資料
– 修改異常
• 修改某些資料時必須一併修改其他的資料

2
階層式的正規化格式
• 第一階正規化格式(1NF)
• 第二階正規化格式(2NF)
• 第三階正規化格式(3NF)
• Boyce-Codd正規化格式(BCNF)
• 階層式限制
– 是BCNF則是3NF
– 是3NF則是2NF
– 是2NF則是1NF
3
功能相依
• 功能相依(函數相依,functional
dependency)
– 關聯表R中兩組屬性X及Y
– X → Y表示X在功能上決定Y或Y功能相依於X
– 對R中的任何兩個值組r1及r2,如果 r1[X] =
r2[X] 則 r1[Y] = r2[Y]
• 完全功能相依
– 如果由X中移除任何屬性X → Y就不成立

4
1NF
• 1NF的定義
– 屬性值只能是不可分割的單一值
• 關聯表定義的一部分
• 下列的班級關聯表就不是1NF

班級編號 導師編號 教室
C303 T17 {A102, C301}
C402 T23 B202

5
2NF
• 2NF的定義
– 是1NF
– 所有不屬於任何鍵的屬性都沒有部分相依於任何鍵
• 不是2NF的例子
學生-老師 (學號, 老師編號, 面談日期, 學生姓名, 老師姓
名)
FD1: 學號 → 學生姓名
FD2: 老師編號 → 老師姓名
FD3: {學號,老師編號} → 面談日期

6
2NF
• 切割成2NF
學生 (學號, 學生姓名)
FD1: 學號 → 學生姓名
老師 (老師編號, 老師姓名)
FD2: 老師編號 → 老師姓名
面談 (學號, 老師編號, 面談日期)
FD3: {學號,老師編號} → 面談日期

7
3NF
• 3NF的定義
– 是2NF
– X → Y 是任何一個功能相依則
• X是鍵或
• Y是任何鍵的屬性
• 不是3NF的例子
學生-老師 (學號, 學生姓名, 導師編號, 老師姓名)
FD1: 學號 → {學生姓名, 導師編號}
FD2: 導師編號 → 老師姓名

8
3NF
• 分割成3NF的關聯表
學生 (學號, 學生姓名, 導師編號)
FD1: 學號 → {學生姓名, 導師編號}
老師 (導師編號, 老師姓名)
FD2: 導師編號 → 老師姓名

9
BCNF
• BCNF的定義
– 是3NF
– X → Y 是任何一個功能相依則X是鍵
• 是3NF但不是BCNF的例子
R (A, B, C)
FD1: {A, B} → C
FD2: C → B

10
BCNF
• 不是BCNF的例子
R (A, B, C, D)
FD1: A → {B, C, D}
FD2: {B, C} → {A, D}
FD3: D → B
• 分割成BCNF的關聯表
R1 (A, C, D)
FD1: A → {C, D}
R2(D, B)
FD3: D → B
• FD2消失了

11
反正規化
• 為了增加效能,在綱要中增加不必要的屬
性或關聯
• 向下反正規化:父屬性加到子關聯
• 向上反正規化:子關聯的摘要加到父關聯
• 關聯內反正規化:新增屬性(Z=X+Y)
• 切割反正規化
• 合併反正規化

12

You might also like