第一范式,第二范式,第三范式


第一范式

存在非主屬性對碼的部分依賴關系 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或優、良,這樣就可以方便更改,所以我一般優先使用與業務無關的字段作為關鍵字。

 

一般滿足前三個范式就可以避免數據冗余。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM