數據庫設計的三大範式

什麼是範式:爲了創建冗餘較小、結構合理的數據庫,設計數據庫時必須遵循必定的規則。在關係型數據庫中這種規則就稱爲範式。java

目前關係數據庫有六種範式:第一範式(1NF)、第二範式(2NF)、第三範式(3NF)、第四範式(4NF)、第五範式(5NF)和第六範式(6NF)數據庫

通常在項目中,前三種方式就知足咱們的需求了數據庫設計

第一範式:設計

  簡單的說,數據表中的每一列(每一個字段)必須是不可拆分的最小單元。每個屬性都是原子項,不可分割。
  第一範式是關係模式應具有的最起碼的條件,若是數據庫設計不能知足第一範式,就不稱爲關係型數據庫。關係數據庫設計研究的關係規範化是在1NF之上進行的。io

  例如(學生信息表):
  學生編號   姓名   性別       聯繫方式
  20080901    張三     男   email:zs@126.com,phone:88886666
  20080902    李四     女   email:ls@126.com,phone:66668888email

以上的表就不符合,第一範式:聯繫方式字段能夠再分,因此變動爲正確的是:數據

  學生編號   姓名   性別     聯繫方式     電話
  20080901    張三     男   email:zs@126.com  88886666
  20080902    李四     女   email:ls@126.com  66668888關係型數據庫

第二範式(2NF)
簡單的說,第二範式要知足如下的條件:首先要知足第一範式,要求表中的全部列,都必須依賴於主鍵,而不能有任何一列與主鍵沒有關係,也就是說一個表只描述一件事情項目

  例如(學生選課表):
  學生   課程     教師     教師職稱       教材       教室   上課時間
  李四   Spring   張老師   java講師   《Spring深刻淺出》   301   08:00
  張三   Struts    楊老師   java講師   《Struts in Action》   302   13:30規範化

這裏經過(學生,課程)能夠肯定教師、教師職稱,教材,教室和上課時間,因此能夠把(學生,課程)做爲主鍵。可是,教材並不徹底依賴於(學生,課程),只拿出課程就能夠肯定教材,由於一個課程,必定指定了某個教材。這就叫不徹底依賴,或者部分依賴。出現這種狀況,就不知足第二範式。

  修改後,選課表:
  學生   課程     教師      教師職稱   教室   上課時間
  李四   Spring   張老師   java講師   301   08:00
  張三   Struts    楊老師   java講師   302   13:30

課程表:
  課程       教材 
  Spring   《Spring深刻淺出》 
  Struts   《Struts in Action》

因此,第二範式能夠說是消除部分依賴。第二範式能夠減小插入異常,刪除異常和修改異常。

第三範式(3NF)
第三範式要知足如下的條件:首先要知足第二範式。要求:表中的每一列只與主鍵直接相關而不是間接相關,

上例中修改後的選課表中,一個教師能肯定一個教師職稱。這樣,教師依賴於(學生,課程),而教師職稱又依賴於教師,這叫傳遞依賴。第三範式就是要消除傳遞依賴。

  修改後,選課表:

  學生   課程        教師    教室   上課時間
  李四   Spring   張老師   301   08:00
  張三   Struts    楊老師   302   13:30

  

    教師表:
    教師   教師職稱
  張老師   java講師
  楊老師   java講師

這樣,新教師的職稱在沒被選課的時候也有地方存了,沒人選這個教師的課的時候教師的職稱也不至於被刪除,修改教師職稱時只修改教師表就能夠了。

簡單的說,第一範式就是原子性,字段不可再分割;第二範式就是徹底依賴,沒有部分依賴;第三範式就是沒有傳遞依賴。

相關文章
相關標籤/搜索