函數依賴
平凡/非平凡函數依賴
平凡函數依賴:對X→Y,Y⊆X
非平凡的函數依賴:對X→Y,Y⊈X
在后續討論中,均以非平凡函數依賴進行討論
完全/部分函數依賴
在關系模式R(U)中,若X→Y,且x的任何一個真子集X'不存在X→Y,則稱Y完全函數依賴於X
傳遞/直接函數依賴
X→Y,Y!→X,Y→Z,稱X→傳遞Z為傳遞依賴
X→Y,Y←X,稱X←→Y為直接依賴
候選碼(Candidate Key)=碼
在R(U,F)中,K為U的屬性或者屬性集合,若KU,則稱K為候選碼
超鍵(Super Key)
能夠唯一標識一條記錄的屬性或屬性集
若U部分函數依賴於K,即KU,則K為超碼
候選碼是最小的超碼
超碼包含候選鍵
超鍵不一定是碼,候選鍵和主鍵才是
主碼(Primary Key)
若R有多個候選碼,選一個作為主碼
主屬性(Prime Attribute)與非主屬性(Nonprime Attribute)
包含在任意一個候選鍵中的屬性都被稱為主屬性
不包含在任意一個的候選鍵中的屬性被稱為非主屬性
全碼(ALL-Key)
整個屬性值U就是碼(候選鍵),則U被稱為全碼
外碼(Foreign Key)
關系模式R(U,F)中屬性或屬性組X並非R的碼,但是是另外一個關系模式的碼,則X稱為外碼
規范化
關系數據庫中的關系滿足某一定的要求,不同程度的要求稱為范式
一個低一級范式的關系模式,通過模式分解(Schemm Decomposition)轉化為更高級的范式,被稱為規范化
1NF
一個關系模式R(U,F)所有屬性都是不可分割的基本數據項
不滿足第一范式的數據庫模式不能稱為關系數據模式
2NF
在1NF的基礎上,去除非主屬性對碼(候選碼)的部分函數依賴,即每一個非主屬性都是完全依賴於主鍵的
3NF
在2NF的基礎上,消除非主屬性對碼(候選碼)的傳遞依賴
BCNF
在3NF中,依然有可能存在主屬性傳遞依賴或者部分依賴的情況,如
關系模式STC(S,T,C)中,S表示學生,T表示教師,J表示課程。
函數依賴:(S,C)→T,(S,T)→C, T→C 其中,(S,C)和(S,T)都是候選碼。
可以看出STJ是屬於第三范式的,因為沒有哪一組依賴關系中,非主屬性傳遞或者部分依賴於碼(候選碼)(記住是非主屬性,T在候選碼中),但它不屬於BC范式,因為T是決定因素,T不包含碼(候選碼的任何一個真子集都不能叫候選碼)
則BCNF具有兩個特征:
1.所有非主屬性完全依賴於每一個碼
2.所有主屬性對不包含它的碼也是完全依賴
各范式存在的問題
1NF
(學號,課程號)→(學院,學院電話,成績,學分)
①部分函數依賴:課程→學分 這將導致
數據冗余:一門課程被選了N次那么學分就重復出現了N-1次
更新異常:如果一門課學分更改,則所有該課程的行都要修改
插入異常:如果要新增一門課程和它的學分,但是因為不存在學號所以不能插入
刪除異常:如果刪掉選修一門課程的所有學生的學號,那么該課程對應的學分關系也被刪除
②傳遞函數依賴:學號→學院→學院電話 (實際上學號已經決定了學院電話)
數據冗余:有N個某學院的學生,那么該學院電話重復出現了N-1次
更新異常:如果要修改學院電話,那么所以該學院的學生元組都要修改
插入異常:如果要新增一個學院和它的電話,由於缺少學號無法插入
刪除異常:如果刪除一個學院所有學號,那么學院對應的電話關系也將刪除
兩種函數依賴導致的問題內容上都是一樣的,只是引起的原因不盡相同
2NF
只有傳遞函數依賴的問題
3NF
消除了各類問題