1. 程式人生 > >2.2 範式和反範式

2.2 範式和反範式

物理 學生 屬性 size 相同 缺點 體積 優缺點 第一範式

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·對數據的修改需要更多成本

2.2 範式和反範式