數據庫範式學習
基本知識
超鍵 在關係型數據庫中能夠唯一標識一個元組的一個或者一組屬性的集合,例如, 學生表中有學號、姓名、性別和身份證號四個字段,則學號、學號姓名、學號姓名性別、身份證號、身份證號學號等等都可以作爲一個超鍵,因爲它們都可以唯一確定表中的一個記錄,超鍵可以有一個或多個;
候選鍵 不含有多餘屬性的超鍵,或者說最小屬性的超鍵被稱爲候選鍵, 在超鍵中刪去該屬性組, 則無法唯一表示一個記錄, 例如,學生表中的學號和身份證號是兩個候選鍵, 任何包含這兩個屬性或者其中之一的元組刪除候選鍵後,均無法唯一表示一個記錄。例如, 學生表中一個超鍵, 學號姓名性別,若刪除了學號這個候選鍵, 則僅僅有性別性別無法唯一確定一個學生表記錄, 因爲可能會有同名的學生, 而同樣對於另一個超鍵學號姓名性別身份證號, 刪去了學號和身份證號兩個候選鍵也不成立, 也就是說超鍵中至少要包含一個候選鍵;
主鍵 在候選鍵集合中選擇一個候選鍵作爲主鍵, 主鍵可以唯一標識一個記錄, 例如,學生表中可以選擇學號或者身份證號作爲主鍵;
外鍵 在關係型數據庫中, 若P2是表T1的某個屬性,同時P2是表T2的一個主鍵, 則稱P2是T1的一個外鍵, 例如, 對學生表中添加一個屬性專業代碼, 則專業代碼在學生表中只是一個屬性, 但在專業表中, 專業代碼是一個主鍵,外鍵描述了多個表之間的關係;
函數依賴 如果X和Y是關係R的兩個屬性集合,對於R中任意元組的X屬性集合相同, 則它們的Y屬性也相同,則稱X函數決定Y或者Y函數依賴於X;
平凡函數依賴&&非平凡函數依賴 在函數依賴的基礎上, 如果Y屬性集合是X屬性集合的子集合,則Y平凡函數依賴於X;若Y屬性集合與X屬性集合是R中互不相交的兩個子集合, 則Y非平凡函數依賴於X;數據庫系統中一般多研究非平凡函數依賴,因爲顯然一個屬性集合的子集合一定平凡函數依賴於該屬性集合;
完全函數依賴&&部分函數依賴 在函數依賴的基礎上, 如果Y屬性集合不函數依賴於X屬性集合的任何一個真子集, 則稱Y完全函數依賴於X,否則爲Y部分函數依賴於X;
傳遞函數依賴 如果X、Y、Z是關係R中三個互不相同的子集合, 存在Y函數依賴與X,Z函數依賴與Y,但X不函數依賴於X,則稱Z傳遞函數依賴於X。
第一範式
關係R中每一個屬性都不可再分解, 也即每個屬性都是原子性
學號 |
姓名 |
性別 |
10001 |
大雄 |
男 |
10002 |
靜香 |
女 |
以上表符合第一範式,如果把姓名和性別放在一起或者學號身份證號放在一起, 則不符合第一範式
第二範式
在滿足第一範式的基礎上, 消除非主屬性對於主屬性的部分函數依賴即爲第二範式
學號 |
姓名 |
性別 |
專業代碼 |
輔導員 |
10001 |
大雄 |
男 |
01(漢語言文學) |
張偉 |
10002 |
靜香 |
女 |
02(統計學) |
李明 |
這裏不滿足第二範式,因爲學號和專業代碼屬性集合能夠函數決定一個元組, 但其中輔導員只函數依賴於主屬性中的專業代碼屬性
修改爲兩個表
學號 |
姓名 |
性別 |
專業代碼 |
10001 |
大雄 |
男 |
01(漢語言文學) |
10002 |
靜香 |
女 |
02(統計學) |
第三範式
在第二範式的基礎上, 消除任何非主屬性之間的傳遞函數依賴, 即任何非主屬性不函數依賴於其他非主屬性
學號 |
姓名 |
性別 |
輔導員工號 |
輔導員姓名 |
10001 |
大雄 |
男 |
4001 |
張偉 |
10002 |
靜香 |
女 |
4002 |
李明 |
這裏的主屬性是學號, 其他屬性都可以由主屬性所確定, 但非主屬性中輔導員工號能夠確定輔導員的姓名, 並且輔導員工號無法確定學生學號, 則滿足第二範式確不滿足第三範式
修改爲兩個表
學號 |
姓名 |
性別 |
輔導員工號 |
10001 |
大雄 |
男 |
4001 |
10002 |
靜香 |
女 |
4002 |
輔導員工號 |
輔導員姓名 |
4001 |
張三 |
4002 |
李四 |
BC範式
如果一個關係模式滿足所有非主屬性對每一個碼是完全函數依賴,所有主屬性對每一個不包含它的碼也是完全函數依賴,沒有任何屬性完全依賴於非碼的任何屬性, 則稱關係滿足BC範式,即BC範式排除了任何屬性對主屬性的部分依賴與傳遞依賴, 而第二和第三範式只是針對非主屬性
學號 |
專業代碼 |
導師工號 |
10001(大雄) |
01 |
6001(張偉) |
10002(靜香) |
02 |
6010(李明) |
1003(小夫) |
01 |
6001(張偉) |
1004(胖虎) |
01 |
6002(王二麻子) |
1005(哆啦a夢) |
02 |
6011(二愣子) |
這裏學號和專業代碼作爲主屬性決定一個記錄, 導師工號也由主屬性唯一確定, 因爲一個專業有很多導師,一個導師只是教授一個專業的一部分學生, 但是非主屬性的導師工號能夠決定所在教學的專業,所以不滿足BCNF範式,部分主屬性依賴於非主屬性
修改爲兩張表
學號 |
專業代碼 |
10001(大雄) |
01 |
10002(靜香) |
02 |
1003(小夫) |
01 |
1004(胖虎) |
01 |
1005(哆啦a夢) |
02 |
導師工號 |
專業代碼 |
6001 |
張偉 |
6002(王二麻子) |
01 |
6010(李明) |
02 |
6011(二愣子) |
02 |
第四範式
BCNF範式消除了任何由於函數依賴導致的異常,第四範式在此基礎上要消除多值依賴
課程號 |
老師工號 |
書本名 |
01(古代文學) |
6001(張偉) |
北師大版古代文學 |
02(統計學方法) |
6010(李明) |
北大版統計學方法 |
01(古代文學) |
6001(張偉) |
華師大版古代文學 |
02(統計學方法) |
6011(二愣子) |
南大版統計學方法 |
01(古代文學) |
6002(王二麻子) |
南師版古代文學 |
所有屬性構成了主屬性,即該表只有主鍵,沒有其它字段了,但存在多值依賴。
多值依賴 一種關係,至少存在三個屬性(A、B、C),才能存在這種關係。對於每一個A值,有一組確定的B值和C值,並且這組B的值獨立於這組C的值。若爲統計學方法課程選擇一本國外統計學方法的書籍但沒有老師教授則無法維護課程和書籍之間的關係
修改爲兩張表
課程號 |
老師工號 |
01(古代文學) |
6001(張偉) |
02(統計學方法) |
6010(李明) |
01(古代文學) |
6001(張偉) |
02(統計學方法) |
6011(二愣子) |
01(古代文學) |
6002(王二麻子) |
課程號 |
書本名 |
01(古代文學) |
北師大版古代文學 |
02(統計學方法) |
北大版統計學方法 |
01(古代文學) |
華師大版古代文學 |
02(統計學方法) |
南大版統計學方法 |
01(古代文學) |
南師版古代文學 |
02(統計學方法) |
普林斯頓版統計學方法 |