第一範式,第二範式,第三範式
Level 1
定義
範式(Normal Form,NF),數據庫滿足的約束條件,並按照等級可以分爲第一範式(1NF),第二範式(2NF)和第三範式(NF)(約束程度遞增)。
範式化優勢:
- 範式化的更新操作通常比反範式化要快。
- 當數據較好地範式化時,就只有很少或者沒有重複數據,所以只需要修改更少的數據。
- 範式化的表通常更小,可以更好地存放在內存中,所以執行操作會更快。
- 很少有多餘的數據意味着檢索列表數據時更少需要DISTINCT或者GROUP BY語句。
反範式化優勢:
- 可以利用反範式避免表關聯,減小數據庫開銷。
Level 2
第一範式:
簡要來說,第一範式規定所有域都應該是原子性的。即,數據庫表中的每一列都是不可分割的;不應該是集合,數組等非原子數據項。
第二範式:
在滿足第一範式的基礎上,第二範式規定非碼屬性必須完全依賴於主碼。即,表中的字段必須完全依賴(而非部分依賴)與主碼。
第三範式:
在滿足第二範式的基礎上,第三範式規定,任何非主屬性不依賴於其它非主屬性。即,表中字段不能存在傳遞依賴1。
Level 3
錯誤示例
綠色背底:該表主鍵。
黃色背底:表中的正常字段。
肉色背底:表中不符合範式的字段。
第一範式
如圖,張三擁有兩個電話號碼,卻記錄在了同一個字段中,違反了第一範式中字段不可分割的規則。
第二範式
如圖,主鍵(複合)爲姓名+課程,出勤率和分數由主鍵唯一確定(完全依賴);但性別字段卻只依賴於姓名,與課程並無依賴關係(部分依賴)。違反了第二範式中,字段不能部分依賴的規定。
第三範式
如圖,主鍵爲姓名;學校,性別,學院爲正常字段,依賴於主鍵;但學校所在地卻依賴於學校,由學校唯一確定(傳遞依賴)。違反了第三範式中,表中屬性不能依賴於非主屬性的規定。
百度百科 數據庫範式https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E5%BA%93%E8%8C%83%E5%BC%8F/7309898 ↩︎