數據庫設計,一二範式理解

第一範式要求確保表中每列的原子性,也就是不可拆分;

第二範式要求確保表中每列與主鍵相關,而不能只與主鍵的某部分相關(主要針對聯合主鍵),主鍵列與非主鍵列遵循完全函數依賴關係,也就是完全依賴;

第三範式確保主鍵列之間沒有傳遞函數依賴關係,也就是消除傳遞依賴。

 

第一範式(1NF)

定義:如果關係模式R的每個關係r的屬性都是不可分的數據項,那麼就稱R是第一範式的模式。

簡單的說,每一個屬性都是原子項,不可分割。

1NF是關係模式應具備的最起碼的條件,如果數據庫設計不能滿足第一範式,就不稱爲關係型數據庫。關係數據庫設計研究的關係規範化是在1NF之上進行的。

 

例如(學生信息表):

學生編號  姓名  性別  聯繫方式

20080901  張三  男   email:[email protected],phone:88886666

20080902  李四  女   email:[email protected],phone:66668888

 

以上的表就不符合,第一範式:聯繫方式字段可以再分,所以變更爲正確的是:

 

學生編號  姓名  性別  電子郵件   電話

20080901  張三  男   [email protected]  88886666

20080902  李四  女   [email protected]  66668888

 

第二範式(2NF)

定義:如果關係模式R是1NF,且每個非主屬性 完全函數依賴(往後看) 於候選鍵,那麼就稱R是第二範式。

簡單的說,第二範式要滿足以下的條件:首先要滿足第一範式,其次每個非主屬性要完全函數依賴與候選鍵,或者是主鍵。也就是說,每個非主屬性是由整個主鍵函數決定的,而不能由主鍵的一部分來決定。

 

例如(學生選課表):

學生    課程   教師    教師職稱  教材         教室  上課時間

李四    Spring  張老師   java講師  《Spring深入淺出》  301 08:00

張三    Struts  楊老師   java講師  《Struts in Action》 302 13:30

 

這裏通過(學生,課程)可以確定教師、教師職稱,教材,教室和上課時間,所以可以把(學生,課程)作爲主鍵。但是,教材並不完全依賴於(學生,課程),只拿出課程就可以確定教材,因爲一個課程,一定指定了某個教材。這就叫不完全依賴,或者部分依賴。出現這種情況,就不滿足第二範式。

 

修改後,選課表:

學生    課程   教師    教師職稱  教室  上課時間

李四    Spring  張老師   java講師  301 08:00

張三    Struts  楊老師   java講師  302 13:30

 

課程表:

課程   教材

Spring  《Spring深入淺出》

Struts  《Struts in Action》

 

所以,第二範式可以說是消除部分依賴。第二範式可以減少插入異常,刪除異常和修改異常。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章