摘要:介紹了第一、第二、第三、BCNF、第四、第五范式和域/關鍵字范式。
關鍵詞:范式 函數(shù)依賴 多值依賴
中圖分類號:TP311.132.3
文獻標識碼:A 文章編號:1002-2422(2007)06-0042-02
如圖1所示,這些范式是嵌套的,例如第三范式中的關系也滿足第一、第二范式。然而這些范式無法從理論上保證能消除所有的異常,每種范式只能消除一種異常。
關系數(shù)據(jù)庫中的關系是要滿足一定要求的,滿足不同程度要求的為不同范式。滿足最低程度要求的叫第一范式,即關系作為一張二維表,表中的每一格必須是單值的不可分的數(shù)據(jù)項。
當關系屬于第一范式時,可能會存在修改異常,需要將其進一步規(guī)范化:若關系R滿足第一范式,且每一個非主屬性完全函數(shù)依賴于碼,則R屬于第二范式。例如:關系模式s_A)_F,其屬性為SID(學號)、ACTIVITY(活動)和FEE(費用),假設允許一個學生參加多項活動,活動項目決定費用,則關鍵字為(SID,ACTIVITY),該模式滿足第一范式,但具有修改異常。如果插入一項新的運動項目和費用而還沒有學生參加則無法插入,因為學號作為關鍵字的一部分不能為空。在該關系中,存在部分函數(shù)依賴AC-TIVITY->FEE,其中ACTIVITY是關鍵字的一部分,要想消除異常,可以將S A F分解為兩個關系S_AfSID,ACTIVI-TY)和A-F(ACTIVITY,F(xiàn)EE)。這樣,兩個關系都不存在部分函數(shù)依賴,消除了異常。
第二范式中的關系也有異常,要想從第二范式關系中消除異常,必須消除傳遞依賴。例如:在關系模式S_A_F中,假設一個學生只能參加一項運動,則SID是關系的關鍵字,不存在部分依賴,但存在傳遞依賴,SID→ACTIVITY,ACTIVITY→FEE,如果刪除一個學生和其參加的活動,并且沒有其他人參加這項活動,而則該活動信息也被刪除,出現(xiàn)刪除異常。同樣可以將關系分解為兩個關系s-A和A_F來消除傳遞依賴。一個關系如果在第二范式中,且沒有傳遞依賴,則該關系在第三范式中。
然而,即使關系在第三范式中,也可能有異常。例如關系模式S_A_T,其屬性為SID(學號),ACTIVITY(活動),TEACHER(指導教師),一個學生可以參加多項活動,一個活動也可以有多個指導教師,一個教師指導一項活動,假設教師不重名。則S_A_T的關鍵字為(SID,ACTIVITY)或者(SID,TEACHER),滿足第三范式。如果刪除一個學生和活動,且該活動只有一個教師指導,則將刪除教師的指導信息,發(fā)生刪除異常。Boyce-Codd范式通常被認為是修正的第三范式,它定義為:如果一個關系的每個決定因素都包含碼,則其滿足BCNF。在S_A_T中,之所以會發(fā)生異常,是因為關系中存在TEACHER—ACTIVITY,而TEACHER不包含碼。可以將S_A_T分解為S_T(SID,TEACHER)和T_A(TEACHER,ACTIVITY),S_T和T A都不存在異常。