範式分析,範式

來源:互聯網
上載者:User

範式分析,範式

1 簡介 範式理論是Codd研究並用來進行資料建模的方法,實踐證明它適用於單個關係的微觀分析,宏觀分析還是使用後來推出的ER方法為好。事實上,ER分析的強項也只是在於宏觀分析,有時僅僅利用ER方法並不能保證結果一定有效。 回憶以前的合約例子,有兩種分析做法,一種是歸納出合約和貨物兩個實體,另外一種是歸納出合約、貨物和廠商三個實體。前一種方案利用的準則是只要屬性對於某個實體的一個執行個體而言是唯一的,就歸入那個實體。後一種方案利用的準則是認為屬性只要具有獨立存在的意義和可能,就可以建立實體來表達。直接從方案來看,似乎第二種方案的實體更多而顯得麻煩,但是從最終產生的關聯式模式來看,並非如此。如: 合約(合約號,訂貨日期,廠商名稱,廠商地址) 只要廠商名稱一樣,廠商地址一定一樣,存在一定的冗餘。而第二種方案就沒有此類冗餘,如: 合約(合約號,訂貨日期,廠商號) 廠商(廠商號,廠商名稱,廠商地址)

所以實際使用中我們可以將E-R模型用來進行宏觀建模,細枝末節的東西交給範式分析解決(經過範式分析過濾一遍得到最終的合理的表結構)

應用程式資料庫範式可以帶來許多好處,但是最重要的好處歸結為三點:

1.減少資料冗餘(這是最主要的好處,其他好處都是由此而附帶的)

2.消除異常(插入異常,更新異常,刪除異常)

3.讓資料群組織的更加和諧…

範式分析就適合解決此類問題。在ER宏觀分析基礎之上,利用範式分析最終能夠得到最優並且沒有冗餘的關聯式模式(說白了範式分析就是解決關聯式模式中資料冗餘問題的)。


2 基本概念 這些基本概念是整個範式分析理論的基礎內容。

2.1 函數依賴(Functional Dependency) 在關係中,常常存在一種決定和被決定的依賴關係,如非主屬性對主屬性的依賴關係。作為對應現實世界實體的關係而言,一個關係應該代表一個完整的概念,所以非主屬性依賴於主屬性是一件基本的要求。 之所以叫做函數依賴,是因為這種依賴關係非常象函數中因變數依賴自變數的關係。

2.2 平凡函數依賴與非平凡函數依賴 屬性自己決定自己的依賴關係被稱為平凡函數依賴,顯然意義不大,所以通常情況下所說的函數依賴都是指非平凡函數依賴。所謂非平凡函數依賴是指一個屬性決定其他屬性的依賴關係。

2.3 完全函數依賴與部分函數依賴 考察下面的關係: (學號,所在系,系主任名稱,課程名,成績) 

學號    所在系   系主任名稱  課程名  成績 

000001  電腦    錢老師     Java     89 

000001  電腦    錢老師     資料庫   70 

000002  資訊      李老師     資料庫   81

000003  資訊      李老師     資訊檢索 90

說明: 一個系有若干學生, 一個學生只屬於一個系; 一個系只有一名主任; 一個學生可以選修多門課程, 每門課程有若干學生選修; 每個學生所學的每門課程都有一個成績。

關係的主鍵為(學號,課程名),非主屬性中只有成績屬性是完全受主鍵決定的,這種依賴就屬於完全函數依賴。而系別表面上受主鍵決定,但其實只受學號決定,這種依賴就屬於部分函數依賴。

2.4 傳遞函數依賴 仍然考察上述關係,其中的系主任名表面上受主鍵決定,但其實只受所在系決定,而學號決定所在系,所以這種依賴就屬於傳遞函數依賴。

不論是部分函數依賴還是傳遞函數依賴,都表現為破壞關係中的內在一致性,事實上,上述資料中系別和系主任名是明顯具有冗餘的屬性,而它們都具有非完全依賴的特點。

3 範式的使用 範式(Normal Form)就是規範的形式之意。按照達到的規範程度,可以得到不同的範式層級,如同身體體質達標一樣,有不同的標準形成不同的層級。沒有達到範式要求的關係被稱為範式違例。

3.1  2NF和3NF  2NF就是消除了部分函數依賴的範式,3NF就是消除了傳遞函數依賴的範式。 消除這些非完全依賴的方法都是一樣的,利用拆的方法將現有關係分解為一個個獨立而又完整的子關係,以實現完全依賴化。 具體步驟為: 1)找出主鍵屬性群組。 2)找出所有的依賴,即包含完全函數依賴,也包含部分函數依賴和傳遞函數依賴。

如關係:(學號,所在系,課程名,成績) 

學號 所在系 課程名 成績 

000001 電腦 Java   89 

000001 電腦 資料庫 70 

000002 資訊 資料庫   81 

000003 資訊 資訊檢索 90

主鍵屬性群組為:學號,課程名 完全函數依賴為:學號,課程名-〉成績 部分函數依賴為:學號-〉所在系 上述做法已經形成拆開的關係: (學號,課程名,成績) (學號,所在系) 上述做法消除了部分函數依賴形成2NF。

所有單關鍵字的資料庫表都符合第二範式,因為不可能存在組合關鍵字。

再如關係:(學號,所在系,系主任名稱)

學號 所在系 系主任名稱 

000001 電腦 程老師 

000001 電腦 程老師 

000002 資訊 丁老師 

000003 資訊 丁老師

主鍵屬性群組為:學號 完全函數依賴為:學號-〉所在系 傳遞函數依賴為:所在系-〉系主任名稱 上述做法已經形成拆開的關係: (學號,所在系) (所在系,系主任名稱) 上述做法消除了傳遞函數依賴形成3NF。

3.2   BCNF 不論是2NF還是3NF,都可以納入BCNF範疇之內。 BCNF是Boyce和Codd提出的一種涵蓋面更廣的範式概念。達到BCNF的標準為:任何非平凡函數依賴的左邊必須包含鍵碼。從概念上看,上述部分函數依賴和傳遞函數依賴都不滿足BCNF的要求,如果存在部分函數依賴或者傳遞函數依賴那麼必然存在某個依賴的左邊不完全包含鍵碼。所以2NF違例和3NF違例一定不是BCNF,BCNF一定是2NF和3NF(逆否定理)。上述正常化做法都是BCNF的解決做法。

3.3   4NF 上述依賴都屬於函數依賴的範疇。函數依賴是屬於資料依賴的一個種類,除此以外,資料依賴還包含多值依賴。而BCNF只能做到在函數依賴範圍內的最高程度分解,如遇到多值依賴無法解決,如同再好的抗病毒藥也不能解決基因產生的疾病。 如下面的影星資訊表明顯存在冗餘: 

影星名稱 所在街道 所在城市 電影名稱 拍攝年代 

成龍     123號    香港     城市獵人 1990 

成龍     456號    上海     城市獵人 1990 

成龍     123號    香港      醉拳 1988 

成龍     456號    上海      醉拳 1988 

成龍     123號    香港      我是誰 1995 

成龍     456號    上海      我是誰 1995 

上述冗餘產生的原因在於查詢的要求,如下面的表格雖然簡單,但是沒法滿足這樣的查詢“住在香港的影星拍過哪些電影?” 

影星名稱 所在街道 所在城市 電影名稱 拍攝年代 

成龍     123號    香港     城市獵人 1990 

成龍     123號    香港     醉拳 1988

成龍     456號    上海     我是誰 1995 

但是,從BCNF的角度來分析,沒有問題,因為主鍵屬性居然包含全部的屬性,所以不存在部分函數依賴和傳遞函數依賴等問題。 造成冗餘的原因在於它具有多值依賴,關係中明顯將兩組沒有關係的內容放在一個關係中,即影星住址和影星拍攝的電影。這也需要利用拆的方式將其正常化。 從上述問題可以看出,作為關係,如果不想出問題,應該盡量保證關係內在的一致性和完整性,主屬性完全決定非主屬性,而不要把許多本來不屬於同一個概念的內容放入一個關係內部,那樣做易產生範式違例和資料冗餘。

3.4  1NF 所謂1NF是對關聯式模式的基本要求,即一個記錄的一個欄位只能有一個值。所謂一個值即是指可以將其賦予一個變數,顯然多個值無法同時賦予一個變數。 任何關聯式模式都要滿足此條件,就像空氣是人生存的基本條件一樣。 事實上,我們使用的關係型資料庫管理系統不可能做出不滿足1NF要求的記錄。理解此範式的主要內容在於如何處理哪些具有多個值的欄位。 如學生基本情況資訊表包括如下欄位: (學號,姓名,性別,生日,家庭成員) 對於家庭成員欄位而言,從邏輯上看,必須為一個值。雖然使用者可能會輸入多個值,如“父親:張XX,母親:李XX”,但是既然作為一個欄位處理,那就代表一個家庭成員的資訊。 如果需要進行個別家庭成員的查詢,顯然這時從邏輯上看,這個欄位就不再是一個值。簡單的單欄位處理既不方便查詢,也難以準確表達多個成員的區別。 相應的處理方案有兩個: 一是橫向擴充,如: (學號,姓名,性別,生日,父親,母親) 這種方案較為簡單,設計思路是將邏輯上不是整體的欄位繼續分割為邏輯上為整體的欄位。但是存在不易擴充的問題,難以有效表達更多的家庭成員,既便可以表達,冗餘也會很多。 二是縱向擴充,如: (學號,姓名,性別,生日) (學號,家庭成員類別,姓名) 這個思路是採用ER分析方法,將其分為學生和家庭成員兩個實體,聯絡為一對多。

4 範式的定義 4.1 函數依賴 4.1.1 定義 設R(U)是一個屬性集U上的關係模式,X和Y是U的子集。若對於R(U)的任意一個可能的關係r,r中不可能存在兩個元組在X上的屬性值相等,而在Y上的屬性值不等, 則稱“X函數確定Y”或“Y函數依賴於X”,記作X→Y。

4.1.2 分解合并原則 如X→Y1,X→Y2,則X→Y1,Y2 主要用於規範分析時簡化依賴的表達,注意只限於函數依賴的右邊。

4.1.3 轉換規則 如X→Y,Y→Z,則X→Z 說明了傳遞函數依賴的存在,注意前提是沒有Y→X。

4.1.4 等價原則 如X→Y,Y→X,則X和Y等價,記為X←→Y。 等價屬性無需考慮相互之間的依賴關係,如下面的關係: 學生(學號,姓名,社會安全號碼) 不存在下述依賴:學號→社會安全號碼,社會安全號碼→姓名

4.1.5 幾個補充 1)函數依賴是針對所有關係執行個體而言的,非部分滿足。 2)函數依賴是語義範疇的概念,會因時因地因需求而變化。

4.2 平凡函數依賴和非平凡函數依賴 4.2.1 定義 在關係模式R(U)中,對於U的子集X和Y,如果X→Y,但Y屬於X,則稱X→Y是平凡的函數依賴。 若X→Y,但Y不屬於X,則稱X→Y是非平凡的函數依賴。

4.2.2 平凡依賴規則 A1,A2…,An→B1,B2…,Bm等價於A1,A2…,An→C1,C2…,Ck,其中的C是B的子集,但C不包括在A中。 如下面的函數依賴都是平凡依賴: 

學號→學號,姓名    

學號,課程號→學號,成績 

皆可以化簡為:

學號→姓名 

學號,課程號→成績

4.3 完全函數依賴和部分函數依賴 

4.3.1 定義 在關係模式R(U)中,如果X→Y,並且對於X的任何一個真子集X’,都沒有X’→Y,則稱Y完全函數依賴於X,記作X—f→Y(f表示full)。 若X→Y,但Y不完全函數依賴於X(有X’→Y),則稱Y部分函數依賴於X,記作X—p→Y(p表示partial)。

4.3.2 碼的定義 按照完全函數依賴的定義,可以給碼下個嚴格定義: 設K為關係模式R<U,F>中的屬性或屬性群組合。若K—f→U,則K稱為R的一個侯選碼(Candidate Key)。 若關係模式R有多個候選碼,則選定其中的一個做為主碼(Primary key)。 如何選擇主碼是有講究的,如: 是選學號還是社會安全號碼? 是利用流水號還是有意義的欄位?

4.4 傳遞函數依賴 在關係模式R(U)中,如果X→Y,Y→Z,且Y不包括在X中,並且沒有Y→X,則稱Z傳遞函數依賴於X。 如果Y→X,即X←→Y,則Z直接依賴於X。 

4.5 範式 

4.5.1 1NF 如果一個關係模式R的所有屬性都是不可分的基本資料項目,則R∈1NF。 第一範式是對關係模式的最起碼的要求。不滿足第一範式的資料庫模式不能稱為關聯式資料庫。但是滿足第一範式的關係模式並不一定是一個好的關係模式。

4.5.2  2NF 若關係模式R∈1NF,並且每一個非主屬性都完全函數依賴於R的碼,則R∈2NF。 從定義上看,2NF一定是1NF,反之並不一定。

4.5.3 3NF 關係模式R<U,F>中若不存在這樣的碼X、屬性群組Y及非主屬性Z(Z不屬於Y), 使得X→Y,Y→Z,但沒有Y→X成立,則稱R<U,F>∈3NF。 從定義上看,3NF一定是2NF,因為部分函數依賴也可以理解為傳遞依賴,它的左邊可以視為Y(X→Y),而右邊可以視為Z,即如果存在部分函數依賴就不滿足3NF定義要求,逆否命題即為3NF一定是2NF。 反之並不一定,即2NF不一定是3NF。

4.5.4 BCNF 關係模式R<U,F>∈1NF,如果對於R的每個函數依賴X→Y,若Y不屬於X,則X必含有候選碼,那麼R∈BCNF。 從定義上看,BCNF一定是3NF和2NF。但是3NF不一定是BCNF,雖然很罕見,如下面的關係: 

Students   Teachers   Courses 

張亮      李玉山    管理學 

張亮      劉衛國   電腦基礎 

王海      李玉山    管理學 

王海      魏芳      英語 

羅建軍    劉衛國  電腦基礎 

說明: 1)一名教師只能帶一門課程 2)一旦學生選擇了一門課程,就確定了一名教師 相應的函數依賴為: Students,Courses→Teachers Teachers→Courses 如選擇Students,Courses作為主碼,則Teachers→Courses的存在會破壞BCNF的規定,所以上述關係不是BCNF,但是在Teachers→Courses依賴中沒有任何非主屬性對碼傳遞依賴和部分依賴,滿足3NF的條件。這也說明3NF的“不徹底”性主要表現在可能存在主屬性對碼的部分依賴和傳遞依賴。

總結:範式分析主要是為了降低資料冗餘,實踐證明它適用於單個關係(即對單張表的分析)的微觀分析,宏觀分析還是使用後來推出的ER 方法為好。實際生產中,我們可以先對需求進行E-R建模,得到關係表後再用範式分析方法”過濾“一遍以得到最終合理的表結構。

範式分析的一般步驟:

①找主鍵(主屬性群組)

②找出所有非主屬性的函數依賴(決定關係),完成了上述過程即完成了表的拆分。

經驗表明,純粹的主鍵(沒有實際意義的屬性,比如自增長的序號)在進行範式分析時可以先不考慮,範式分析結束後再把這個純粹的主鍵添加到主屬性群組裡(主屬性群組和那個純粹的主鍵必然是一一對應關係)。

一直到BCNF都是只是解決的函數依賴問題,資料依賴還包括別的依賴,如多值依賴,這種問題不是BC範式能解決的。


參考文獻:

1.http://dev.yesky.com/424/2220924.shtml

2.http://www.njcie.com/bbs/dispbbs.asp?boardid=19&Id=1174

(視頻(迅雷輸入地址即可):

http://www.njcie.com/DB/files/51.wmv

http://www.njcie.com/DB/files/52.wmv

3.http://www.cnblogs.com/youring2/archive/2012/04/20/2459609.html

4.http://www.njcie.com/bbs/dispbbs.asp?boardid=19&Id=914

5.http://www.njcie.com/bbs/dispbbs.asp?boardid=19&Id=132&page=2

 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.