第一範式(1NF):強調的是列的原子性,即列不可以再分紅其餘幾列。數據庫
我的理解:列不可分(原子性,即字段不能夠再分)blog
地址能夠再分,分紅省份,城市,和詳細地址事務
第二範式(2NF):首先是 1NF,另外包含兩部份內容,一是表必須有一個主鍵;二是沒有包含在主鍵中的列必須徹底依賴於主鍵,而不能只依賴於主鍵的一部分。get
個人理解:不存在部分依賴(惟一性,不能夠把多種數據保存在同一張表中,即一張表只能保存「一種」數據)it
表: 學號, 姓名, 年齡, 課程名稱, 成績, 學分im
問題:d3
數據冗餘,每條記錄都含有相同信息;
刪除異常:刪除全部學生成績,就把課程信息全刪除了;
插入異常:學生未選課,沒法記錄進數據庫;
更新異常:調整課程學分,全部行都調整。 數據
這個表有兩個事務:學生信息, 課程信息;因爲非主鍵字段必須依賴主鍵,這裏學分依賴課程號,姓名依賴與學號,因此不符合二範式。異常
正確作法:
學生:Student(學號, 姓名, 年齡);
課程:Course(課程名稱, 學分);
選課關係:StudentCourse(學號, 課程名稱, 成績)。 margin
第三範式(3NF):首先是 2NF,另外非主鍵列必須直接依賴於主鍵,不能存在傳遞依賴。即不能存在:非主鍵列 A 依賴於非主鍵列 B,非主鍵列 B 依賴於主鍵的狀況。
我的理解:不存在傳遞依賴(直接性,每一列都和主鍵直接相關,而不能間接相關)
表: 學號, 姓名, 年齡, 學院名稱, 學院電話
問題:
數據冗餘:有重複值;
更新異常:有重複的冗餘信息,修改時須要同時修改多條記錄,不然會出現數據不一致的狀況
由於存在依賴傳遞: (學號) → (學生)→(所在學院) → (學院電話) 。
正確作法:
學生:(學號, 姓名, 年齡, 所在學院);
學院:(學院, 電話)。