3278 7840

          1100111010001110 1001010010001010

          數(shù)據(jù)庫范式實例

          第一范式
          定義:如果關(guān)系R 中所有屬性的值域都是單純域,那么關(guān)系模式R是第一范式的
          那么符合第一模式的特點就有
          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ù)據(jù)庫不允許重復(fù)的),而且Contact字段可以再分
          所以變更為正確的是
          StudyNo | Name | Sex |    Email       |    Phone
          20040901       john       Male   
          kkkk@ee.net   222456
          20040902     mary       famale
          kkk@fff.net 123455

          第二范式:
          定義:如果關(guān)系模式R是第一范式的,而且關(guān)系中每一個非主屬性不部分依賴于主鍵,稱R是第二范式的。
          所以第二范式的主要任務(wù)就是
          滿足第一范式的前提下,消除部分函數(shù)依賴。
          StudyNo | Name | Sex |       Email       |    Phone | ClassNo   | ClassAddress
          01                john        Male   
          kkkk@ee.net     222456    200401          A樓2
          02                   mary    famale
          kkk@fff.net    123455       200402          A樓3
          這個表完全滿足于第一范式,
          主鍵由StudyNo和ClassNo組成,這樣才能定位到指定行
          但是,ClassAddress部分依賴于關(guān)鍵字(ClassNo-〉ClassAddress),
          所以要變?yōu)閮蓚€表
          表一
          StudyNo | Name | Sex |    Email       |    Phone | ClassNo
             01          john       Male   
          kkkk@ee.net   222456 200401   
             02           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 優(yōu)秀                    $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                優(yōu)秀             $1000
          2                   良                $600
          這里我比較喜歡用bounsNo作為主鍵,
          基于兩個原因
          1)不要用字符作為主鍵。可能有人說:如果我的等級一開始就用數(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

          posted on 2009-10-17 22:45 逍遙晨空 閱讀(825) 評論(0)  編輯  收藏 所屬分類: SQL


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 乐平市| 阿瓦提县| 安西县| 哈巴河县| 进贤县| 铜鼓县| 开江县| 朔州市| 凤凰县| 长武县| 定边县| 文昌市| 阜宁县| 延边| 阆中市| 长葛市| 门头沟区| 冕宁县| 邳州市| 越西县| 洮南市| 峡江县| 金昌市| 大名县| 阳信县| 信宜市| 伊通| 内丘县| 界首市| 恩施市| 南部县| 区。| 勐海县| 庄浪县| 禄丰县| 汽车| 中卫市| 资兴市| 永泰县| 黔西| 古丈县|