前言
“學長,SqlServer數據庫三范式可以簡單幫我理解一下嗎?”。
學妹的一句話把我問蒙了,因為三范式的概念早就丟到外太空去了。
但是呢,我不能直接說我忘記了,為了不影響在學妹心目中的形象(你懂的),我還特意去百度查了一下。
然后整理了一下,大家如果有和我一樣忘記了的可以看一下(概念+舉例),淺顯易懂。
數據庫三范式
- 第一范式(1NF):第一范式(1NF)是指數據庫表的每一列都是不可分割的基本數據項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重復的屬性。
- 第二范式(2NF):第二范式(2NF)是在第一范式(1NF)的基礎上建立起來的,即滿足第二范式(2NF)必須先滿足第一范式(1NF)。第二范式(2NF)要求數據庫表中的每個實例或行必須可以被惟一的區分。
- 第三范式(3NF):滿足第三范式(3NF)必須先滿足第二范式(2NF)。簡而言之,第三范式(3NF)要求一個數據庫表中不包含已在其它表中已包含的非主關鍵字信息。
一般地,在進行數據庫設計時,應遵循三大原則,也就是我們通常說的三大范式,即第一范式要求確保表中每列的原子性,也就是不可拆分;
第二范式要求確保表中每列與主鍵相關,而不能只與主鍵的某部分相關(主要針對聯合主鍵),主鍵列與非主鍵列遵循完全函數依賴關系,也就是完全依賴;
第三范式確保主鍵列之間沒有傳遞函數依賴關系,也就是消除傳遞依賴。
1. 必須保證數據庫設計的合理性
- 數據庫設計關系整個系統的架構,關系到后續的開發效率和運行效率
- 數據庫的設計主要包含了設計表結構和表之間的聯系
2. 如何是合理的數據庫
- 結構合理
- 冗余較小
- 盡量避免插入刪除修改異常
3. 如何才能保證數據庫設計水平
- 遵循一定的規則
- 在關系型數據庫中這種規則就稱為范式
4. 什么是范式(NF,NormalForm)
- 范式是符合某一種設計要求的總結
- 要想設計一個結構合理的關系型數據庫,必須滿足一定的范式
- 各個范式是依次嵌套包含的
- 范式超高,設計質量超高,在現實設計中也越難實現
- 一般數據庫設計,只要達到第三范式,即可避免異常的出現
舉例說明
第一范式(概念+舉例)
1. 要求
- 最基本的范式
- 數據庫表每一列都是不可分割的基本數據,同一列中不能有多個值
- 簡單說就是要確保每列保持原子性
- 第一范式的合理遵循需要根據系統的實際需求來定
2. 示例
第二范式(概念+舉例)
1. 要求
- 第二范式需要確保數據庫表中的每一列都和主鍵相關,而不能只與主鍵的某一部分相關(主要針對聯合主鍵而言)
- 即在一個數據庫表中只能保存一種數據,不可以把多種數據保存在同一張數據庫表中
2. 示例
在上面第一范式示例表中的數據看出,這不符合第二范式,所以進行拆分如下,
第一張主鍵相關為(學號、課程名稱),第二張表為(學號),它們都是完全依賴的,因此符合第二范式。
第三范式(概念+舉例)
1. 要求
- 確保數據表中的每一列數據都和主鍵直接相關,而不能間接相關
- 屬性不依賴於其他非主屬性(消除依賴)
2. 示例
注意看第二范式的學生表:存在系主任依賴於系名 (系名---> 系主任),所以不符合第三范式,繼續進行拆分如下:
總結
我們看到,第三范式規則查找以消除沒有直接依賴於第一范式和第二范式形成的表的主鍵的屬性。
我們為沒有與表的主鍵關聯的所有信息建立了一張新表。
每張新表保存了來自源表的信息和它們所依賴的主鍵。
數據庫設計規范化能讓我們更好地適應變化,使你能夠改變業務規則、需求和數據而不需要重新構造整個系統。
參考文獻
三大范式:https://zhuanlan.zhihu.com/p/28528655
數據庫設計三大范式:https://www.cnblogs.com/linjiqin/archive/2012/04/01/2428695.html#undefined
歡迎關注訂閱微信公眾號【熊澤有話說】,更多好玩易學知識等你來取
作者:熊澤-學習中的苦與樂 公眾號:熊澤有話說 出處: https://www.cnblogs.com/xiongze520/p/15433197.html 您可以隨意轉載、摘錄,但請在文章內注明作者和原文鏈接。
|