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

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