Jason ---分享,共同進步

          激情成就夢想,努力創造未來
          隨筆 - 53, 文章 - 1, 評論 - 45, 引用 - 0
          數據加載中……

          數據庫設計范式

          構造數據庫必須遵循一定的規則。在關系數據庫中,這種規則就是范式。

          范式是符合某一種級別的關系模式的集合。關系數據庫中的關系必須滿足一定的要求,即滿足不同的范式。
          目前關系數據庫有六種范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。滿足最低要求的范式是第一范式(1NF)。在第一范式的基礎上進一步滿足更多要求的稱為第二范式(2NF),其余范式以次類推。一般說來,數據庫只需滿足第三范式(3NF)就行了。
          下面我們舉例介紹第一范式(1NF)、第二范式(2NF)和第三范式(3NF)。 

          1, 第一范式(1NF)
          在任何一個關系數據庫中,第一范式(1NF)是對關系模式的基本要求,不滿足第一范式(1NF)的數據庫就不是關系數據庫。
          所謂第一范式(1NF)是指數據庫表的每一列都是不可分割的基本數據項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重復的屬性。如果出現重復的屬性,就可能需要定義一個新的實體,新的實體由重復的屬性構成,新實體與原實體之間為一對多關系。在第一范式(1NF)中表的每一行只包含一個實例的信息。例如,對于圖3-2 中的員工信息表,不能將員工信息都放在一列中顯示,也不能將其中的兩列或多列在一列中顯示;員工信息表的每一行只表示一個員工的信息,一個員工的信息在表中只出現一次。簡而言之,第一范式就是無重復的列。 

          2, 第二范式(2NF)
          第二范式(2NF)是在第一范式(1NF)的基礎上建立起來的,即滿足第二范式(2NF)必須先滿足第一范式(1NF)。第二范式(2NF)要求數據庫表中的每個實例或行必須可以被惟一地區分。為實現區分通常需要為表加上一個列,以存儲各個實例的惟一標識。如
          圖3-2 員工信息表中加上了員工編號(emp_id)列,因為每個員工的員工編號是惟一的,因此每個員工可以被惟一區分。這個惟一屬性列被稱為主關鍵字或主鍵、主碼。
          第二范式(2NF)要求實體的屬性完全依賴于主關鍵字。所謂完全依賴是指不能存在僅依賴主關鍵字一部分的屬性,如果存在,那么這個屬性和主關鍵字的這一部分應該分離出來形成一個新的實體,新實體與原實體之間是一對多的關系。為實現區分通常需要為表加上一個列,以存儲各個實例的惟一標識。簡而言之,第二范式就是非主屬性非部分依賴于主關鍵字。

          3,第三范式(3NF)
          滿足第三范式(3NF)必須先滿足第二范式(2NF)。簡而言之,第三范式(3NF)要求一個數據庫表中不包含已在其它表中已包含的非主關鍵字信息。例如,存在一個部門信息表,其中每個部門有部門編號(dept_id)、部門名稱、部門簡介等信息。那么在圖3-2
          的員工信息表中列出部門編號后就不能再將部門名稱、部門簡介等與部門有關的信息再加入員工信息表中。如果不存在部門信息表,則根據第三范式(3NF)也應該構建它,否則就會有大量的數據冗余。簡而言之,第三范式就是屬性不依賴于其它非主屬性。

          posted on 2009-02-24 14:22 agun 閱讀(585) 評論(3)  編輯  收藏 所屬分類: 數據庫

          評論

          # re: 數據庫設計范式  回復  更多評論   

          這是一個非常好的規則,但是,我往往在設計數據庫的時候很難完全遵守這三個規則!
          2009-02-24 16:40 | 牛昆鵬

          # re: 數據庫設計范式[未登錄]  回復  更多評論   

          呵呵,這個規則是數據庫設計的基本原則,應該說是最基本的,如果你不這樣設計數據庫,你的數據庫一定有問題,而且這些規則也是我們實現數據存儲的必須規則。
          2009-02-27 15:37 | agun

          # re: 數據庫設計范式[未登錄]  回復  更多評論   

          很好,學習
          2009-06-08 10:48 | aa
          主站蜘蛛池模板: 化隆| 襄垣县| 大安市| 平塘县| 包头市| 奉贤区| 磐安县| 平顺县| 海兴县| 略阳县| 迭部县| 佛冈县| 宝丰县| 永泰县| 兴安盟| 碌曲县| 光泽县| 日土县| 平度市| 板桥市| 从江县| 晋城| 内乡县| 德钦县| 建湖县| 新蔡县| 疏勒县| 沛县| 建德市| 娄底市| 双桥区| 剑川县| 紫阳县| 海晏县| 务川| 揭西县| 通许县| 扎赉特旗| 岳池县| 宜黄县| 酉阳|