第一范式
存在非主屬性對碼的部分依賴關系 R(A,B,C) AB是碼 C是非主屬性 B-->C B決定C C部分依賴于B
第一范式
定義:如果關系R 中所有屬性的值域都是單純域,那么關系模式R是第一范式的
那么符合第一模式的特點就有
1)有主關鍵字
2)主鍵不能為空,
3)主鍵不能重復,
4)字段不可以再分
例如:
?StudyNo?? |?? Name?? |?? Sex?? |?? Contact
20040901????? john???????? Male????? Email:kkkk@ee.net,phone:222456
20040901????? mary???????? famale??? email:kkk@fff.net phone:123455
以上的表就不符合,第一范式:主鍵重復(實際中數據庫不允許重復的),而且Contact字段可以再分
所以變更為正確的是
?StudyNo?? |?? Name?? |?? Sex?? |????? Email???????? |????? Phone
20040901????? john???????? Male?????? kkkk@ee.net ?????? 222456
20040902???? mary????????? famale????? kkk@fff.net ????? 123455
?
第二范式
存在非主屬性對碼的傳遞性依賴 R(A,B,C) A是碼 A -->B ,B-->C
定義:如果關系模式R是第一范式的,而且關系中每一個非主屬性不部分依賴于主鍵,稱R是第二范式的。
所以第二范式的主要任務就是
滿足第一范式的前提下,消除部分函數依賴。
StudyNo?? |?? Name?? |?? Sex?? |???????? Email???????? |????? Phone??? |?? ClassNo? | ClassAddress
01????????????????? john??????? Male?????? kkkk@ee.net ???? 222456????? 200401??????????? A樓2
01?????????????????? mary?????? famale??? kkk@fff.net ?????? 123455????? 200402??????????? A樓3
這個表完全滿足于第一范式,
主鍵由StudyNo和ClassNo組成,這樣才能定位到指定行
但是,ClassAddress部分依賴于關鍵字(ClassNo-〉ClassAddress),
所以要變為兩個表
表一
StudyNo?? |?? Name?? |?? Sex?? |????? Email???????? |????? Phone |?? ClassNo
????? 01??????????? john???????? Male?????? kkkk@ee.net ? 222456?? 200401?????
????? 01?????????? mary???????? famale??? kkk@fff.net ??? 123455????? 200402????
表二
?ClassNo? | ClassAddress
?200401????? A樓2
?200402????? A樓3
第三范式
不存在非主屬性對碼的傳遞性依賴以及部分性依賴 ,
StudyNo?? |?? Name?? |?? Sex?? |????? Email???????? |????? bounsLevel?? |?? bouns
20040901????? john???????? Male?????? kkkk@ee.net ?? 優秀??????????????????? $1000
20040902???? mary???????? famale??? kkk@fff.net ?????? 良???????????????????????? $600
這個完全滿足了第二范式,但是bounsLevel和bouns存在傳遞依賴
更改為:
StudyNo?? |?? Name?? |?? Sex?? |????? Email???????? |????? bouunsNo
20040901????? john???????? Male?????? kkkk@ee.net ?? 1
20040902???? mary???????? famale??? kkk@fff.net ?????? 2
bounsNo?? |?? bounsLevel?? |?? bouns
1?????????????????? 優秀??????????????? $1000
?2???????????????? 良?????????????????? $600
這里我比較喜歡用bounsNo作為主鍵,
基于兩個原因
1)不要用字符作為主鍵。可能有人說:如果我的等級一開始就用數值就代替呢?
2)但是如果等級名稱更改了,不叫 1,2 ,3或優、良,這樣就可以方便更改,所以我一般優先使用與業務無關的字段作為關鍵字。
?
一般滿足前三個范式就可以避免數據冗余。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
