你還記得資料庫三範式嗎?

前言

「學長,SqlServer資料庫三範式可以簡單幫我理解一下嗎?」。

學妹的一句話把我問蒙了,因為三範式的概念早就丟到外太空去了。

但是呢,我不能直接說我忘記了,為了不影響在學妹心目中的形象(你懂的),我還特意去百度查了一下。

然後整理了一下,大家如果有和我一樣忘記了的可以看一下(概念+舉例),淺顯易懂。

資料庫三範式

  1. 第一範式(1NF):第一範式(1NF)是指資料庫表的每一列都是不可分割的基本數據項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重複的屬性。
  2. 第二範式(2NF):第二範式(2NF)是在第一範式(1NF)的基礎上建立起來的,即滿足第二範式(2NF)必須先滿足第一範式(1NF)。第二範式(2NF)要求資料庫表中的每個實例或行必須可以被惟一的區分。
  3. 第三範式(3NF):滿足第三範式(3NF)必須先滿足第二範式(2NF)。簡而言之,第三範式(3NF)要求一個資料庫表中不包含已在其它表中已包含的非主關鍵字資訊。

一般地,在進行資料庫設計時,應遵循三大原則,也就是我們通常說的三大範式,即第一範式要求確保表中每列的原子性,也就是不可拆分;

第二範式要求確保表中每列與主鍵相關,而不能只與主鍵的某部分相關(主要針對聯合主鍵),主鍵列與非主鍵列遵循完全函數依賴關係,也就是完全依賴;

第三範式確保主鍵列之間沒有傳遞函數依賴關係,也就是消除傳遞依賴。

1. 必須保證資料庫設計的合理性

  • 資料庫設計關係整個系統的架構,關係到後續的開發效率和運行效率
  • 資料庫的設計主要包含了設計表結構和表之間的聯繫

2. 如何是合理的資料庫

  • 結構合理
  • 冗餘較小
  • 盡量避免插入刪除修改異常

3. 如何才能保證資料庫設計水平

  • 遵循一定的規則
  • 在關係型資料庫中這種規則就稱為範式

4. 什麼是範式(NF,NormalForm)

  • 範式是符合某一種設計要求的總結
  • 要想設計一個結構合理的關係型資料庫,必須滿足一定的範式
  • 各個範式是依次嵌套包含的
  • 範式超高,設計品質超高,在現實設計中也越難實現
  • 一般資料庫設計,只要達到第三範式,即可避免異常的出現

 

舉例說明

第一範式(概念+舉例)

1. 要求

  • 最基本的範式
  • 資料庫表每一列都是不可分割的基本數據,同一列中不能有多個值
  • 簡單說就是要確保每列保持原子性
  • 第一範式的合理遵循需要根據系統的實際需求來定

2. 示例

第二範式(概念+舉例)

1. 要求

  • 第二範式需要確保資料庫表中的每一列都和主鍵相關,而不能只與主鍵的某一部分相關(主要針對聯合主鍵而言)
  • 即在一個資料庫表中只能保存一種數據,不可以把多種數據保存在同一張資料庫表中

2. 示例

 

在上面第一範式示例表中的數據看出,這不符合第二範式,所以進行拆分如下,

 

第一張主鍵相關為(學號、課程名稱),第二張表為(學號),它們都是完全依賴的,因此符合第二範式。

 

         

第三範式(概念+舉例)

1. 要求

  • 確保數據表中的每一列數據都和主鍵直接相關,而不能間接相關
  • 屬性不依賴於其他非主屬性(消除依賴)

 2. 示例

注意看第二範式的學生表:存在系主任依賴於系名 (系名---> 系主任),所以不符合第三範式,繼續進行拆分如下:

    

總結

我們看到,第三範式規則查找以消除沒有直接依賴於第一範式和第二範式形成的表的主鍵的屬性。
我們為沒有與表的主鍵關聯的所有資訊建立了一張新表。
每張新表保存了來自源表的資訊和它們所依賴的主鍵。 


資料庫設計規範化能讓我們更好地適應變化,使你能夠改變業務規則、需求和數據而不需要重新構造整個系統。

參考文獻

三範式:百度百科

三大範式://zhuanlan.zhihu.com/p/28528655

資料庫設計三大範式://www.cnblogs.com/linjiqin/archive/2012/04/01/2428695.html#undefined

 

 
歡迎關注訂閱微信公眾號【熊澤有話說】,更多好玩易學知識等你來取
作者:熊澤-學習中的苦與樂
公眾號:熊澤有話說
出處: //www.cnblogs.com/xiongze520/p/15433197.html
您可以隨意轉載、摘錄,但請在文章內註明作者和原文鏈接。