前言
“學長,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 您可以隨意轉載、摘錄,但請在文章內註明作者和原文連結。
|