3278 7840

          1100111010001110 1001010010001010

          數據庫范式實例

          第一范式
          定義:如果關系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是第一范式的,而且關系中每一個非主屬性不部分依賴于主鍵,稱R是第二范式的。
          所以第二范式的主要任務就是
          滿足第一范式的前提下,消除部分函數依賴。
          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部分依賴于關鍵字(ClassNo-〉ClassAddress),
          所以要變為兩個表
          表一
          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 優秀                    $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或優、良,這樣就可以方便更改,所以我一般優先使用與業務無關的字段作為關鍵字。

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

          第四范式:
          主要任務:滿足第三范式的前提下,消除多值依賴
          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

          第五范式:
          定義: 如果關系模式R中的每一個連接依賴, 都是由R的候選鍵所蘊含, 稱R是第五范式的
          看到定義,就知道是要消除連接依賴,并且必須保證數據完整
          例子
          A | B   | C
          a1    b1 c1
          a2    b1 c2
          a1    b2 c1
          a2    b2 c2
          如果要定位到特定行,必須三個屬性都為關鍵字。
          所以關系要變為 三個關系,分別是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 逍遙晨空 閱讀(830) 評論(0)  編輯  收藏 所屬分類: SQL


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


          網站導航:
           
          主站蜘蛛池模板: 泰和县| 汝城县| 平武县| 镇远县| 商丘市| 麦盖提县| 大悟县| 革吉县| 灵丘县| 瑞金市| 秭归县| 罗定市| 宜昌市| 韶关市| 溆浦县| 望城县| 盐边县| 璧山县| 昌邑市| 抚远县| 合作市| 全州县| 三门县| 吉安市| 汉源县| 全州县| 邯郸市| 布拖县| 曲沃县| 平谷区| 保靖县| 乳源| 嫩江县| 翁源县| 马龙县| 樟树市| 仙桃市| 宝兴县| 邛崃市| 安岳县| 长寿区|