牛文穎 紀寧 大連科技學院
設計出一個合理實用的數(shù)據(jù)庫系統(tǒng)是目前應用領域一個非常重要的課題,而范式分析理論正是數(shù)據(jù)庫設計的一個理論指導,它可以判斷設計出的數(shù)據(jù)庫是否是一個好的數(shù)據(jù)庫模式。本文深入淺出地討論范式理論,以及如何將一個不好的關系模式轉換成好的關系模式,同時舉出實例分析研究。
任何一個關系模式都應該滿足第一范式。第一范式是指關系中的所有屬性都是不可再分的數(shù)據(jù)項[1]。比如下表對屬性電話進行了分解,使得該關系不能成為第一范式。
姓名 電話年齡手機 座機大寶 13612345678 021-9876543 22
又如關系模式:單位(單位號,員工號,單位地址,單位電話),一個單位有多個員工,所以員工號有多個值,也使得該關系模式不能成為第一范式。綜上兩個實例滿足第一范式的關系,其屬性和屬性值都不能再分。
第一范式存在的問題:
對關系模式選課(學號,姓名,性別,出生日期,系號,系名,系地址,課程號,課程名,學分,成績)進行范式分析。
數(shù)據(jù)插入異常:關系模型選課滿足第一范式。主鍵是(學號,課程號)?,F(xiàn)有需求如下:一個新生報道,還沒有選修課程。該新生信息(3,王芳,女,1990-3-3),是否能插入到選課關系中。根據(jù)實體完整性約束,主鍵的每個屬性都不能為null的原則。該新生沒有選課,不能插入到選課關系中,所以對于第一范式存在插入異常。
數(shù)據(jù)刪除異常:如果某個學生只選修了一門課,由于某種原因,這個學生不選課了,因此要刪除該學生的選課記錄。這次刪除意味著學生的信息也不復存在了。這種情況稱為刪除異常。
數(shù)據(jù)修改異常:如果某個學生選課信息發(fā)生變化,比如1號“莉莉”由D1改為D2,不僅要修改課程號,同時還要修改課程名及學分。這樣使修改變得復雜,容易產(chǎn)生數(shù)據(jù)不一致。
對上述第一范式產(chǎn)生的問題,實質是把學生實體信息和課程實體信息合在了一起,失去了各自實體數(shù)據(jù)操作的獨立性,對其中一個實體操作勢必影響另一個實體。從范式理論上稱這種關系為部分函數(shù)依賴。下面具體分析第一范式的函數(shù)依賴關系:提煉出所有的非主屬性和主鍵的關系。在上例中:非主屬性“姓名”、“性別”、“出生日期”,“系號”,“系名”,“系地址”屬性只與主鍵中的學號有關,所以它們部分依賴于主鍵;非主屬性“課程名”、“學分”屬性只與主鍵中的課程號有關,所以它們部分依賴于主鍵;而非主屬性“成績”即與學號有關,又與課程號有關,所以說成績完全依賴于主鍵。
解決第一范式的問題,就是在上述分析依賴關系基礎上對關系進行分解。消除部分函數(shù)依賴。使其轉換為第二范式。
第二范式一定是第一范式,并且不存在非主屬性部分函數(shù)依賴于主鍵。
將上例進一步轉換為第二范式,將部分函數(shù)依賴關系中的主屬性和非主屬性從關系中提取出來,單獨構成一個關系模式:學生(學號,姓名,性別,出生日期,系號,系名,系地址);課程(課程號,課程名,學分);將關系模式中余下的屬性,加上主關鍵字,構成另一個關系。選課(學號,課程號,成績)。
分解之后解決了第一范式提到的數(shù)據(jù)操作異常。可以向學生關系中插入沒有選課的學生信息,可以在選課關系中刪除學生的選課信息,可以在選課表里修改學生的選課信息。
插入異常:例如學生關系模式中:學生(學號,姓名,性別,出生日期,系號,系名,系地址)如果新開了一個系,該系還沒有學生,那么該系的信息是不能插入到學生關系中的,因為做為主鍵的學生不能為空。
刪除異常:如果某些學生退學,要刪除學生的記錄,就會連帶刪除系的信息,產(chǎn)生刪除異常。
修改異常:因為多個學生可以在同一個系,系的其他信息也會重復出現(xiàn),如果系的電話發(fā)生變化,就需要多次修改,容易產(chǎn)生數(shù)據(jù)不一致。
下面具體分析第二范式的函數(shù)依賴關系:在上例中:非主屬性“系名”,“系電話”,“系地址”直接依賴于“系號”,而“系號”直接依賴于主鍵“學號”。所以說非主屬性“系名”,“系電話”,“系地址”傳遞依賴于主鍵“學號”。
解決第二范式的問題,就是在上述分析依賴關系基礎上對關系進行分解。消除傳遞函數(shù)依賴。使其轉換為第三范式。
第三范式一定是第二范式,并且不存在非主屬性傳遞函數(shù)依賴于主鍵。
將上例進一步轉換為第三范式,將起傳遞作用的非主屬性和直接傳遞依賴的非主屬性構成一個新關系模式:系(系號,系名,系地址),該關系中主鍵為系號。將關系模式中余下的屬性,加上新表中的主鍵,構成另一個關系:學生(學號,姓名,性別,出生日期,系號),該關系中主鍵為學號,外鍵為系號。最終將學生關系模式轉換為以下兩個關系模式:
系(系號,系名,系地址)
學生(學號,姓名,性別,出生日期,系號)。
分解之后解決了第二范式提到的數(shù)據(jù)操作異常。
[1]鄧麗,數(shù)據(jù)庫簡明教程[M],東軟電子出版社,2012(105)