數據庫的範式模型

  • 本文中的出現的‘對象’,可以理解爲數據庫中的一條記錄。
    本文中的出現的‘屬性’,可以理解爲數據庫中的一條記錄中的字段。
    主屬性可以理解爲數據庫中的一條記錄的主鍵。
    非主屬性可以理解爲數據庫中的一條記錄的主鍵以外的字段。

函數依賴

定義一:Method(x)=y,x、y是一個對象,x在經過一個函數後會得到y。
我們就說:x函數確定y,y函數依賴x。x值決定y值,記成:x->y
例如:

(學號,課程號)->(成績)
(學號,課程號)->(姓名)
(學號,課程號)->(學號)
(學號)->(姓名)

上面的都是x->y模型。

定義二:x->y,x、y是一個對象,x在經過一個函數後會得到y,y不是x的子集
我們就說:x->y是非平凡函數,否則爲平凡函數
例如:

(學號,課程號)->(成績)是非平凡函數
(學號,課程號)->(姓名)是非平凡函數
(學號,課程號)->(學號)是平凡函數
(學號)->(姓名)是非平凡函數

任何對象都存在平凡函數,一般我們就只討論非平凡函數的情況。

定義三:x->y,x、y是一個對象,x的任何真子集x'都不能x'->y。
我們就說:x完全屬性函數確定y,y完全函數依賴x。完全x對象值決定y值,記成:(full)x->y
x存在一個真子集x'能得到x'->y。
我們就說:x非完全屬性函數確定y,y非完全函數依賴x。非完全x對象值決定y值,記成:(part)x->y
例如:

(學號,課程號)->(成績)是(full)x->y
(學號,課程號)->(姓名)是(part)x->y,因爲存在(學號)->(姓名)
(學號)->(姓名)是(full)x->y

定義四:x->y,y->z,且y->x不成立。
我們就說:x傳遞函數確定z。
例如:
(學號)->(系別),(系別)->(系主任)

範式和規範化

第一範式
定義:一個對象的所有屬性不可再分,符合第一範式,記:1NF
例如:

(員工編號,姓名,(基本工資、職務工資)),其中的一個屬性可以再分,就不符合第一範式。改成:
(員工編號,姓名,基本工資,職務工資),符合第一範式

第二範式
定義:符合第一範式後,一個對象的非主屬性完全函數依賴主屬性,符合第二範式,記:2NF
例如:

(學號,課程號,姓名,成績)

其中的主屬性是學號和課程號,應該(full)(學號,課程號)->(姓名,成績)必須成立才行,

可惜存在(學號)->(姓名),即存在就不符合第二範式。

改成:
(學號,課程號,成績)和(學號,姓名),符合第二範式

第三範式
定義:符合第二範式後,一個對象的非主屬性不傳遞依賴主屬性,符合第三範式,記:3NF
例如:

(員工編號,宿舍編號,宿舍費用),

其中存在一個依賴關係:

(員工編號)->(宿舍編號),(宿舍編號)->(宿舍費用),就不符合第三範式。改成:
(員工編號,宿舍編號)和(宿舍編號,宿舍費用),符合第三範式

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