1. 程式人生 > >資料庫面試題——正規化

資料庫面試題——正規化

1、範數的定義

在設計資料庫時,為了使其冗餘較小、結構合理,設計資料庫時必須遵循一定的規則。在關係型資料庫中,這種規則被稱為範數。範數是符合某一設計規則的總結。

2、實際開發中的常見正規化

(1)第一正規化

定義:

資料庫表中的所有欄位值都是不可分割的原子值。

非第一正規化舉例:

原因:高三年1班含有年級和班級資訊,可繼續拆分,為非原子資訊。

改:

(2)第二正規化:

定義:

資料庫表中的每一列都與主鍵完全相關,而不能只與主鍵的部分相關

例子:

假定選課關係表為SelectCourse(學號, 姓名, 年齡, 課程名稱, 成績, 學分),主鍵為屬性組(學號, 課程名稱),因為存在如下決定關係

(學號, 課程名稱) → (姓名, 年齡, 成績, 學分)

這個資料庫表不滿足第二正規化,因為存在如下決定關係:

(課程名稱) → (學分) 

(學號) → (姓名, 年齡)

即非主屬性依賴於主鍵的一部分(如學分只依賴於課程名稱,而不是學號和課程名稱)。 

改:

把選課關係表SelectCourse改為如下三個表: 

學生:Student(學號, 姓名, 年齡);

課程:Course(課程名稱, 學分); 

選課關係:SelectCourse(學號, 課程名稱, 成績)。

就符合了第二正規化。

(3)第三正規化:

定義:

資料庫表中的每一列和主鍵直接相關,而不是間接相關。也就是屬性不能傳遞依賴於主屬性。

例子:

假定學生關係表為Student(學號, 姓名, 年齡, 所在學院, 學院地點, 學院電話),關鍵字為單一關鍵字"學號",因為存在如下決定關係

(學號) → (姓名, 年齡, 所在學院, 學院地點, 學院電話)

這個資料庫是符合2NF的,但是不符合3NF,因為存在如下決定關係

(學號) → (所在學院) → (學院地點, 學院電話)

改:

把學生關係表分為如下兩個表

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

學院:(學院, 地點, 電話)。