數據庫 三大範式 通俗解釋

1、三大範式通俗解釋:數據庫

(1)簡單概括:架構

  第一範式(1NF):字段不可分;
  第二範式(2NF):有主鍵,非主鍵字段依賴主鍵;
  第三範式(3NF):非主鍵字段不能相互依賴。編碼

(2)解釋:設計

  1NF:原子性。 字段不可再分,不然就不是關係數據庫;;
  2NF:惟一性 。一個表只說明一個事物;
  3NF:每列都與主鍵有直接關係,不存在傳遞依賴。事務

2、例子說明基礎

  (1)不符合第一字段的例子數據

                                                                             表:字段1, 字段2(字段2.1,字段2.2), 字段3

字段2能夠拆分紅字段2.1和字段2.2,不符合第一範式。

  (2)不符合第二範式的例子 

                                                                            表:學號, 姓名, 年齡, 課程名稱, 成績, 學分 

這個代表顯說明了兩個事務:學生信息, 課程信息。異常

  1)存在如下問題:計算機

                               a、數據冗餘:每條記錄都含有相同信息; 
                               b、刪除異常:刪除全部學生成績,就把課程信息全刪除了; 
                               c、插入異常:學生未選課,沒法記錄進數據庫; 
                               d、更新異常:調整課程學分,全部行都調整。
  2)修正:
                               學生表:學號, 姓名, 年齡 集合

                               課程表:課程名稱,學分     

                               選課關係表:學號, 課程名稱, 成績


  (3)不符合第二範式的例子 


                                                                         表:學號, 姓名, 年齡, 所在學院, 學院聯繫電話

其中關鍵字爲單一關鍵字"學號"。存在依賴傳遞::(學號) → (所在學院) → (學院聯繫電話) 。

  1)存在問題::
      a、數據冗餘:有重複值; 
      b、更新異常:有重複的冗餘信息,修改時須要同時修改多條記錄,不然會出現數據不一致的狀況 
      c、刪除異常 
  2)修正: 
                      學生表:學號, 姓名, 年齡, 所在學院;
                      學院表:學院, 電話 

 

一範式就是屬性不可分割。屬性是什麼?就是表中的字段。 
不可分割的意思就按字面理解就是最小單位,不能再分紅更小單位了。 
這個字段只能是一個值,不能被拆分紅多個字段,不然的話,它就是可分割的,就不符合一範式。 
不過能不能分割並無絕對的答案,看需求,也就是看你的設計目標而定。 
舉例: 
學生信息組成學生信息表,有姓名、年齡、性別、學號等信息組成。 
姓名不可拆分吧?因此能夠做爲該表的一個字段。 
但我要說這個表要在國外使用呢?人家姓和名要分開,都有特別的意義,因此姓名字段是可拆分的,分爲姓字段和名字段。 
簡單來講,一範式是關係數據庫的基礎,但字段是否真的不可拆分,根據你的設計目標而定。 

二範式就是要有主鍵,要求其餘字段都依賴於主鍵。 
爲何要有主鍵?沒有主鍵就沒有惟一性,沒有惟一性在集合中就定位不到這行記錄,因此要主鍵。 
其餘字段爲何要依賴於主鍵?由於不依賴於主鍵,就找不到他們。更重要的是,其餘字段組成的這行記錄和主鍵表示的是同一個東西,而主鍵是惟一的,它們只須要依賴於主鍵,也就成了惟一的。 
若是有同窗不理解依賴這個詞,能夠勉強用「相關」這個詞代替,也就是說其餘字段必須和它們的主鍵相關。由於不相關的東西不該該放在一行記錄裏。 
舉例: 
學生信息組成學生表,姓名能夠作主鍵麼? 
不能!由於同名的話,就不惟一了,因此須要學號這樣的惟一編碼才行。 
那麼其餘字段依賴於主鍵是什麼意思? 
就是「張三」同窗的年齡和性別等字段,不能存儲別人的年齡性別,必須是他本身的,由於張三的學號信息就決定了,這行記錄歸張三全部,不能給無關人員使用。 

三範式就是要消除傳遞依賴,方便理解,能夠看作是「消除冗餘」。 消除冗餘應該比較好理解一些,就是各類信息只在一個地方存儲,不出如今多張表中。 好比說大學分了不少系(中文系、英語系、計算機系……),這個系別管理表信息有如下字段組成: 系編號,系主任,系簡介,系架構。 那麼再回到學生信息表,張三同窗的年齡、性別、學號都有了,我能不能把他的系編號,系主任、系簡介也一塊兒存着? 若是你問三範式,固然不行,由於三範式不一樣意。 由於系編號,系主任、系簡介已經存在系別管理表中,你再存入學生信息表,就是冗餘了。 三範式中說的傳遞依賴,就出現了。 這個時候學生信息表中,系主任信息是否是依賴於系編號了?而這個表的主鍵但是學號啊! 因此按照三範式,處理這個問題的時候,學生表就只能增長一個系編號字段。 這樣既能根據系編號找到系別信息,又避免了冗餘存儲的問題。 

相關文章
相關標籤/搜索