數據庫三範式

數據庫範式
範式的級別
      設計關係數據庫時,聽從不一樣的規範要求,設計出合理的關係型數據庫,這些不一樣的規範要求被稱爲不一樣的範式,各類範式呈遞次規範,越高的範式數據庫冗餘越小。
      目前關係數據庫有六種範式:第一範式(1NF)、第二範式(2NF)、第三範式(3NF)、巴斯-科德範式(BCNF)、第四範式(4NF)和第五範式(5NF,又稱完美範式)。
      範式越高,冗餘最低,通常到三範式,再往上,表越多,可能致使查詢效率降低。因此有時爲了提升運行效率,可讓數據冗餘(反三範式,通常某個數據常常被訪問時,好比數據表裏存放了語文數學英語成績,可是若是在某個時間常常要獲得它的總分,每次都要進行計算會下降性能,能夠加上總分這個冗餘字段)。
      後面的範式是在知足前面範式的基礎上,好比知足第二範式的必定知足第一範式。
第一範式(1NF):確保每一列的原子性
若是每一列都是不可再分的最小數據單元,則知足第一範式。
 
id
地址
1
中國廣東
2
中國雲南
上面的表地址字段其實能夠繼續分:
 
id
國家
省份
1
中國
廣東
2
中國
雲南
可是具體地址到底要不要拆分 還要看具體情形,好比看看未來會不會按國家或者省市進行分類彙總或者排序,若是須要,最好就拆,若是不須要而僅僅起字符串的做用,能夠不拆,操做起來更方便。
第二範式:非鍵字段必須依賴於鍵字段
若是一個關係知足1NF,而且除了主鍵之外的其它列,都依賴與該主鍵,則知足二範式(2NF),第二範式要求每一個表只描述一件事。
例如:
 
字段
例子
訂單編號
001
產品編號
a011
訂購日期
2017-4-8
價格
¥30
而實際上,產品編號與訂單編號並無明確的關係,訂購日期與訂單編號有關係,由於一旦訂單編號肯定下來了,訂購日期也肯定了,價格與訂單編號也沒有直接關係,而與產品有關,因此上面的表實際上能夠拆分:
訂單表:
 
訂單編號
001
日期
2017-4-8
 
產品表:
 
產品編號
a011
價格
¥30
第三範式:在1NF基礎上,除了主鍵之外的其它列都不傳遞依賴於主鍵列,或者說: 任何非主屬性不依賴於其它非主屬性
(在2NF基礎上消除傳遞依賴)
例如:
 
字段
例子
訂單編號
001
訂購日期
2017-4-8
顧客編號
a01
顧客姓名
howard
上面的知足第一和第二範式,可是不知足第三範式,緣由以下:
經過顧客編號能夠肯定顧客姓名,經過顧客姓名能夠肯定顧客編號,即在這個訂單表裏,這兩個字段存在傳遞依賴,只須要一個就夠了。
又如:
 
主鍵
學號
姓名
成績
1
111
howard
90
2
222
tom
90
 
上面的表,學號和姓名存在傳遞依賴,由於(學號,姓名)->成績,學號->成績,姓名->成績。因此學號和姓名有一個冗餘了,只須要保留一個。
相關文章
相關標籤/搜索