數據庫邏輯設計之三大範式通俗理解,一看就懂,書上說的太晦澀

1、第一範式

1NF是對屬性的原子性,要求屬性具備原子性,不可再分解;數據庫

表:字段一、 字段2(字段2.一、字段2.2)、字段3 ......

如學生(學號,姓名,性別,出生年月日),若是認爲最後一列還能夠再分紅(出生年,出生月,出生日),它就不是一範式了,不然就是;數據庫設計

2、第二範式

2NF是對記錄的唯一性,要求記錄有唯一標識,即實體的唯一性,即不存在部分依賴;ui

表:學號、課程號、姓名、學分;

這個代表顯說明了兩個事務:學生信息, 課程信息;因爲非主鍵字段必須依賴主鍵,這裏學分依賴課程號姓名依賴與學號,因此不符合二範式。spa

可能會存在問題:.net

  • 數據冗餘:,每條記錄都含有相同信息;
  • 刪除異常:刪除全部學生成績,就把課程信息全刪除了;
  • 插入異常:學生未選課,沒法記錄進數據庫;
  • 更新異常:調整課程學分,全部行都調整。

正確作法:
學生:Student(學號, 姓名);
課程:Course(課程號, 學分);
選課關係:StudentCourse(學號, 課程號, 成績)。設計

3、第三範式

3NF是對字段的冗餘性,要求任何字段不能由其餘字段派生出來,它要求字段沒有冗餘,即不存在傳遞依賴;code

表: 學號, 姓名, 年齡, 學院名稱, 學院電話

由於存在依賴傳遞: (學號) → (學生)→(所在學院) → (學院電話) 。blog

可能會存在問題:事務

  • 數據冗餘:有重複值;
  • 更新異常:有重複的冗餘信息,修改時須要同時修改多條記錄,不然會出現數據不一致的狀況

正確作法:ip

學生:(學號, 姓名, 年齡, 所在學院);

學院:(學院, 電話)。

4、反範式化

通常說來,數據庫只需知足第三範式(3NF)就好了。

沒有冗餘的數據庫設計能夠作到。可是,沒有冗餘的數據庫未必是最好的數據庫,有時爲了提升運行效率,就必須下降範式標準,適當保留冗餘數據。具體作法是:在概念數據模型設計時遵照第三範式,下降範式標準的工做放到物理數據模型設計時考慮。下降範式就是增長字段,容許冗餘,達到以空間換時間的目的

〖例〗:有一張存放商品的基本表,如表1所示。「金額」這個字段的存在,代表該表的設計不知足第三範式,由於「金額」能夠由「單價」乘以「數量」獲得,說明「金額」是冗餘字段。可是,增長「金額」這個冗餘字段,能夠提升查詢統計的速度,這就是以空間換時間的做法。

Rose 2002中,規定列有兩種類型:數據列計算列。「金額」這樣的列被稱爲「計算列」,而「單價」和「數量」這樣的列被稱爲「數據列」。

5、範式化設計和反範式化設計的優缺點

5.1 範式化

優勢:

clipboard.png

缺點:

clipboard.png

5.2 反範式化

優勢:

clipboard.png

缺點:

clipboard.png

參考資料以下:

一、通俗地理解數據庫三個範式
二、數據庫模型設計,第一範式、第二範式、第三範式簡單例子理解
三、數據庫三大範式最簡單的解釋

相關文章
相關標籤/搜索