2.2 正規化和反正規化
2.2.1 第一正規化
原子性:要求屬性具有原子性,不可再分解。
如學生(學號,姓名,性別,出生年月日),如果認為最後一列還可以再分成(出生年,出生月,出生日),它就不是一正規化了,否則就是。
2.2.2 第二正規化
惟一性:要求記錄有惟一標識,即實體的惟一性,即不存在部分依賴
表:學號、課程號、姓名、學分;
這個表明顯說明了兩個事務:學生資訊, 課程資訊。由於非主鍵欄位必須依賴主鍵,這裡學分依賴課程號,姓名依賴與學號,所以不符合二正規化。
可能會存在問題:
- 資料冗餘:,每條記錄都含有相同資訊;
- 刪除異常:刪除所有學生成績,就把課程資訊全刪除了;
- 插入異常:學生未選課,無法記錄進資料庫;
-
更新異常:調整課程學分,所有行都調整。
正確做法:
學生:Student(學號, 姓名);
課程:Course(課程號, 學分);
選課關係:StudentCourse(學號, 課程號, 成績)。
2.2.3 第三正規化
冗餘性:要求任何欄位不能由其他欄位派生出來,它要求欄位沒有冗餘,即不存在傳遞依賴。
表: 學號, 姓名, 年齡, 學院名稱, 學院電話
因為存在依賴傳遞: (學號) → (學生)→(所在學院) → (學院電話) 。
可能會存在問題:
- 資料冗餘:有重複值;
- 更新異常:有重複的冗餘資訊,修改時需要同時修改多條記錄,否則會出現資料不一致的情況 。
正確做法:
學生:(學號, 姓名, 年齡, 所在學院);
學院:(學院, 電話)。
2.3.4 反正規化化
沒有冗餘的資料庫設計可以做到。但是,沒有冗餘的資料庫未必是最好的資料庫,有時為了提高執行效率,就必須降低正規化標準,適當保留冗餘資料。具體做法是:在概念資料模型設計時遵守第三正規化,降低正規化標準的工作放到物理資料模型設計時考慮。降低正規化就是增加欄位,允許冗餘,達到以空間換時間的目的。
2.3.5 正規化化設計和反正規化化設計的優缺點
正規化化
優點:
1· 可以儘量的減少資料冗餘
2·資料表更新快體積小
3·正規化化的更新操作比反正規化化更快
4·正規化化的表通常比反正規化化更小
缺點:
1·對於查詢需要對多個表進行關聯,導致效能降低
2·更難進行索引優化
反正規化化
優點:
1·可以減少表的關聯
2·可以更好地進行索引優化
缺點
1·存在資料冗餘及資料維護異常
2·對資料的修改需要更多成本