資料庫——三正規化理解

yucheng1998發表於2019-08-08

簡單來說三句話:

  • 第一正規化:列不可分;
  • 第二正規化:不存在部分依賴;
  • 第三正規化:不存在傳遞依賴。

第一正規化:原子性,每一個欄位不可再分(每一欄位資訊應該能分就分,分到不可再分為止)

例如:

在這裡插入圖片描述
第二正規化::唯一性,不可以把多種資料儲存在同一張表中,即一張表只能儲存“一種”資料。(表內資料各管各的,不能互相影響)

不符合第二正規化的表:學號, 姓名, 年齡, 課程名稱, 成績, 學分;

可能會存在問題:

  • 資料冗餘:每條記錄都含有相同資訊; (可能兩個人選擇相同的課程,學分就會重複)
  • 刪除異常:刪除所有學生成績,就把課程資訊全刪除了; (只想刪除成績資訊,課程資訊會連帶一起刪除,無法保留課程資訊)
  • 插入異常:學生未選課,無法記錄進資料庫; (只有學生資訊,沒有課程資訊,這一行資訊內容不完整,無法寫進表裡)
  • 更新異常:調整課程學分,所有行都調整。

正確做法: 學生:(學號, 姓名, 年齡); 課程:(課程名稱, 學分); 成績:(學號, 課程名稱, 成績)。

第三正規化:直接性,每一列都和主鍵直接相關,而不能間接相關。(依賴不準傳遞,決定某欄位的值必須是主鍵)

不符合第三正規化的表: 學號, 姓名, 年齡, 學院名稱, 學院電話,因為存在依賴傳遞: (學號) → (學生)→(所在學院) → (學院電話) 。 學生是由學號決定,學院電話是由學院決定,而不是學號。

可能會存在問題:

  • 資料冗餘:有重複值;
  • 更新異常:有重複的冗餘資訊,修改時需要同時修改多條記錄,否則會出現資料不一致的情況

正確做法:

學生:(學號, 姓名, 年齡, 所在學院);

學院:(學院, 電話)。

相關文章