注: 表在定義中被稱為關(guān)系,記作R 字段在定義中被稱作屬性 模式:數(shù)據(jù)庫中有三種模式,外模式,內(nèi)模式,模式 粗體是關(guān)鍵字的意思 斜體為外鍵
第一范式 定義:如果關(guān)系R 中所有屬性的值域都是單純域,,那么關(guān)系模式R是第一范式的 那么符合第一模式的特點就有 1)有主關(guān)鍵字 2)主鍵不能為空, 3)主鍵不能重復(fù), 4)字段不可以再分 例如: StudyNo | Name | Sex | Contact 20040901 john Male Email:[email protected],phone:222456 20040901 mary famale email:[email protected] phone:123455 以上的表就不符合,,第一范式:主鍵重復(fù)(實際中數(shù)據(jù)庫不允許重復(fù)的),,而且Contact字段可以再分 所以變更為正確的是 StudyNo | Name | Sex | Email | Phone 20040901 john Male [email protected] 222456 20040902 mary famale [email protected] 123455
第二范式: 定義:如果關(guān)系模式R是第一范式的,而且關(guān)系中每一個非主屬性不部分依賴于主鍵,,稱R是第二范式的,。 所以第二范式的主要任務(wù)就是 滿足第一范式的前提下,消除部分函數(shù)依賴,。 StudyNo | Name | Sex | Email | Phone | ClassNo | ClassAddress 01 john Male [email protected] 222456 200401 A樓2 01 mary famale [email protected] 123455 200402 A樓3 這個表完全滿足于第一范式, 主鍵由StudyNo和ClassNo組成,,這樣才能定位到指定行 但是,ClassAddress部分依賴于關(guān)鍵字(ClassNo-〉ClassAddress), 所以要變?yōu)閮蓚€表 表一 StudyNo | Name | Sex | Email | Phone | ClassNo 01 john Male [email protected] 222456 200401 01 mary famale [email protected] 123455 200402 表二 ClassNo | ClassAddress 200401 A樓2 200402 A樓3
第三范式: 滿足第二范式的前提下,消除傳遞依賴,。 例: StudyNo | Name | Sex | Email | bounsLevel | bouns 20040901 john Male [email protected] 優(yōu)秀 $1000 20040902 mary famale [email protected] 良 $600 這個完全滿足了第二范式,但是bounsLevel和bouns存在傳遞依賴 更改為: StudyNo | Name | Sex | Email | bouunsNo 20040901 john Male [email protected] 1 20040902 mary famale [email protected] 2 bounsNo | bounsLevel | bouns 1 優(yōu)秀 $1000 2 良 $600 這里我比較喜歡用bounsNo作為主鍵,, 基于兩個原因 1)不要用字符作為主鍵??赡苡腥苏f:如果我的等級一開始就用數(shù)值就代替呢,? 2)但是如果等級名稱更改了,不叫 1,,2 ,,3或優(yōu),、良,這樣就可以方便更改,,所以我一般優(yōu)先使用與業(yè)務(wù)無關(guān)的字段作為關(guān)鍵字,。
一般滿足前三個范式就可以避免數(shù)據(jù)冗余。
第四范式: 主要任務(wù):滿足第三范式的前提下,,消除多值依賴 product | agent | factory Car A1 F1 Bus A1 F2 Car A2 F2 在這里,,Car的定位,必須由 agent 和 Factory才能得到(所以主鍵由agent和factory組成),可以通過 product依賴了agent和factory兩個屬性 所以正確的是 表1 表2: product | agent factory | product Car A1 F1 Car Bus A1 F2 Car Car A2 F2 Bus
第五范式: 定義: 如果關(guān)系模式R中的每一個連接依賴, 都是由R的候選鍵所蘊含, 稱R是第五范式的 看到定義,,就知道是要消除連接依賴,并且必須保證數(shù)據(jù)完整 例子 A | B | C a1 b1 c1 a2 b1 c2 a1 b2 c1 a2 b2 c2 如果要定位到特定行,,必須三個屬性都為關(guān)鍵字。 所以關(guān)系要變?yōu)?三個關(guān)系,,分別是A 和B,B和C ,,C和A 如下: 表1 表2 表3 A | B B | C C | A a1 b1 b1 c1 c1 a1 a1 b2 b1 c2 c1 a2 范式可以避免數(shù)據(jù)冗余,減少數(shù)據(jù)庫的空間,,減輕維護數(shù)據(jù)完整性的麻煩,,但是操作難,因為需要聯(lián)系多個表才能得到所需要數(shù)據(jù),,而且越高范式性能就會越差,。要權(quán)衡是否使用更高范式是比較麻煩。 一般我在做項目中都,,用得最多的也就是第三范式,,我認為使用到第三范式也就足夠了,性能好而且方便管理數(shù)據(jù),。 |
|