1 前言
關系數據庫中的關系必須滿足一定的要求,即滿足不同的范式。
目前關系數據庫有六種范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。
滿足最低要求的范式是第一范式(1NF)。在第一范式的基礎上進一步滿足更多要求的稱為第二范式(2NF),其余范式以次類推。
一般說來,數據庫只需滿足第三范式(3NF)就行了。
2 簡介
很多資料上的范式都講的很難理解,這里總結一下三大范式,便於讀者簡易的理解。
1NF:字段是原子性的,不可分(即列不可分)
2NF:有主鍵,非主鍵字段依賴主鍵。確保一個表只說明一個事物(即不存在部分依賴)
3NF:非主鍵字段不能相互依賴。 每列都與主鍵有直接關系,不存在傳遞的依賴(即不存在傳遞依賴)
第一范式:不符合第一范式的例子:
表:字段1、 字段2(字段2.1、字段2.2)、字段3 ......
第二范式:不符合第二范式的例子:
表:學號、課程號、姓名、學分;
這個表明顯說明了兩個事務:學生信息, 課程信息;由於非主鍵字段必須依賴主鍵,這里學分依賴課程號,姓名依賴與學號,所以不符合二范式。
第三范式:不符合第三范式的例子:
表:學號、姓名、 年齡、 所在學院、學院聯系電話、學院聯系電話
存在依賴傳遞: (學號) → (所在學院) → (學院地點, 學院電話)
3 解釋
1NF:原子性,即字段不可以再分。
2NF:唯一性,不可以把多種數據保存在同一張表中,即一張表只能保存“一種”數據。
不符合第二范式的表:學號, 姓名, 年齡, 課程名稱, 成績, 學分;
可能會存在問題:
數據冗余,每條記錄都含有相同信息;
刪除異常:刪除所有學生成績,就把課程信息全刪除了;
插入異常:學生未選課,無法記錄進數據庫;
更新異常:調整課程學分,所有行都調整。
正確做法:
學生:Student(學號, 姓名, 年齡);
課程:Course(課程名稱, 學分);
選課關系:StudentCourse(學號, 課程名稱, 成績)。
3NF:直接性,每一列都和主鍵直接相關,而不能間接相關。(依賴不准傳遞)
不符合第三范式的表: 學號, 姓名, 年齡, 學院名稱, 學院電話,因為存在依賴傳遞: (學號) → (學生)→(所在學院) → (學院電話) 。
可能會存在問題:
數據冗余:有重復值;
更新異常:有重復的冗余信息,修改時需要同時修改多條記錄,否則會出現數據不一致的情況
正確做法:
學生:(學號, 姓名, 年齡, 所在學院);
學院:(學院, 電話)。
參考:
1.https://blog.csdn.net/andywuchuanlong/article/details/25913235
2.https://blog.csdn.net/chenyyhh92/article/details/51174343