數據的三大范式以及什么是反三大范式


一:首先說一下什么是三大范式:


  1.第一范式(1NF):確保每一列的原子性(做到每列不可拆分)

  2.第二范式(2NF):在第一范式的基礎上,非主字段必須依賴於主字段(一個表只做一件事)

  3.第三范式(3NF):在第二范式的基礎上,消除傳遞依賴

  上面都是官話 ,對於設計表來說  第一范式是什么意思呢  看表1-1

    

 

             1-1

  上面的用戶表明顯就不符合三大范式的第一范式:為什么呢?address字段列的數據中是"中國-北京";這是可以拆分的  可以拆分成如下表,為什么要拆分呢,當我統計地區分類時,這樣明顯是不好統計,我們可以改成表1-2的形式,這就符合了第一范式的要求.

        

 

            1-2

 

   那什么又是第二范式,第二范式建立在第一范式的基礎之上(在第一范式的基礎上,非主字段必須依賴於主字段,一個表只做一件事),看表1-3

    

 

              1-3

  我們在后面又添加了數學成績,英語成績,家產等一系列的字段,如果這樣設計的話,一張表可以滿足一個項目所需要的所有字段,都合成在一張表中(后面無限加字段),這樣就很亂了,也違背了第二范式

 

  那什么又是第三范式,第三范式建立在第一范式的基礎之上(消除傳遞依賴),看表1-4

    

             1-4

  我們有一張訂單表,里面有數量,單機,以及總價一些字段,但總價這個不應該有,總價是可以通過數量乘以單價得到,這就沒有遵守第三范式(消除傳遞依賴)),如果沒有理解清楚,我們再看表1-5與表1-6

    

 

             1-5

    

 

             1-6

  在用戶表中,正確來說我們用戶表只該存一個企業id,企業名稱這個字段是我們推導出來的,企業名稱應該是去企業表中去查詢,這就明顯不符合第三范式;

一:再說什么是反三大范式:

  說完三大范式,我們再說一下什么是反三范式,就拿第三范式來說,看表1-7

    

 

   如果我們有數以萬計的數據,每次查詢完數據之后想要總價這個屬性,我們就要進行數以萬計次的計算,這明顯會拖慢服務性能,就拿表1-5和1-6來說,我們每此查詢用戶的時候,回顯企業信息的時候,還要去查詢企業表,這樣多了一次查詢,也會拖慢服務器的性能.

  總結來說呢:反三范式是基於第三范式所調整的,沒有冗余的數據庫未必是好的數據庫,有時為了提高運行效率,就必須降低 范式標准,適當保留冗余數據。基於業務的需要合理設計數據庫

  注釋:博客中的部分數據來自於江蘇傳智播客.


免責聲明!

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



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