- 本文中的出現的‘對象’,可以理解爲數據庫中的一條記錄。
本文中的出現的‘屬性’,可以理解爲數據庫中的一條記錄中的字段。
主屬性可以理解爲數據庫中的一條記錄的主鍵。
非主屬性可以理解爲數據庫中的一條記錄的主鍵以外的字段。
函數依賴
定義一: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
例如:
(員工編號,宿舍編號,宿舍費用),
其中存在一個依賴關係:
(員工編號)->(宿舍編號),(宿舍編號)->(宿舍費用),就不符合第三範式。改成:
(員工編號,宿舍編號)和(宿舍編號,宿舍費用),符合第三範式