資料庫三大正規化 Normal Form

2022-04-05 03:33:17 字數 2166 閱讀 5619

設計資料庫時,通常需要遵從不同的規範,設計出合理的資料庫,減少資料冗餘,而這些規範稱為資料庫正規化,一般來說,只需要實現前三大正規化即可。normal form

1.欄位不可分。2.有主鍵,非主鍵字段依賴主鍵。 3.非主鍵字段不能相互依賴。2.有主鍵,非主鍵字段依賴主鍵。 3.非主鍵字段不能相互依賴。

下面說說我對這三大正規化的理解:

別小看這個表,這個表就其實已經算是符合了三大正規化哦。

第一正規化,是針對於資料表的列的規範,即資料表的每一列都是不可分割的原子資料項,而不能是陣列,集合,記錄等非原子資料項,說白了就是,不能把好幾列的資料合在一起,且每一列的資料都是不可分割的,看看兩個錯誤的例子:

將幾列資料合在一起=>錯誤

原子資料項被分割=>錯誤

第二正規化,基於第一正規化,非碼屬性必須完全依賴碼,即非主鍵資料必須依賴主鍵資料

「碼」(主鍵)是資料表用來唯一區分例項或記錄的資料項,若沒有,可人為新增。

對於第一正規化針對列來說,第二正規化則是針對於行的規範。先說說他的作用吧,從作用反推他的實現。

他的作用就是讓表的每一行都不會一樣,以便我們可以識別任何一行記錄。那怎麼實現這個作用呢?答案是給每一行分配乙個序號,或者以每一行裡肯定不會和其它行一樣的資料項來識別,這就要求其它「可能「會一樣的資料完全依賴於此序號(資料項)。

看看錯誤例項:

第三正規化,其實是第二正規化的子集,也是基於第一正規化,任何非碼屬性不依賴其他非碼屬性

這個比較抽象,還是看圖說話好了,下圖是錯誤示例

回歸主題,這個表有沒有違反第二正規化呢?沒有,( ⊙ o ⊙ )是的,並沒有。

這個表其實存在著一種依賴關係—「傳遞依賴「,girlfriend依賴著girlfriend_id,,而girlfriend_id依賴著id,如此即沒有違反第二正規化了。

但是,他就違反了第三正規化,任何非碼屬性不依賴其他非碼屬性,通俗地講,就是不能存在這種傳遞依賴關係,規範要我們怎麼做呢?將上表拆分成兩個表,如下:

表一

表二兩表之間通過grilfriend_id進行關聯

如此,便符合第三正規化了。

第一正規化的作用是要求每個關係的屬性為原子性的,不可再分。即表中不能還有表。滿足第二正規化必須滿足第一正規化。第二正規化(2nf)要求資料庫表中的每個例項或行必須可以被唯一地區分。滿足第三正規化(3nf)必須先滿足第二正規化(2nf)。簡而言之,第三正規化(3nf)要求乙個資料庫表中不包含已在其它表中已包含的非主關鍵字資訊。

資料庫設計三大正規化資料庫設計三大正規化

為了建立冗餘較小 結構合理的資料庫,設計資料庫時必須遵循一定的規則。在關係型資料庫中這種規則就稱為正規化。正規化是符合某一種設計要求的總結。要想設計乙個結構合理的關係型資料庫,必須滿足一定的正規化。在實際開發中最為常見的設計正規化有三個 1 第一正規化 確保每列保持原子性 第一正規化是最基本的正規化...

資料庫三大正規化

1 第一正規化 1nf 在任何乙個關聯式資料庫中,第一正規化 1nf 是對關係模式的基本要求,不滿足第一正規化 1nf 的資料庫就不是關聯式資料庫。所謂第一正規化 1nf 是指資料庫表的每一列都是不可分割的基本資料項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重複的屬性。如果出現...

資料庫三大正規化

第一正規化 確保每列的原子性.如果每列 或者每個屬性 都是不可再分的最小資料單元 也稱為最小的原子單元 則滿足第一正規化.例如 顧客表 姓名 編號 位址 其中 位址 列還可以細分為國家 省 市 區等。第二正規化 在第一正規化的基礎上更進一層,目標是確保表中的每列都和主鍵相關.如果乙個關係滿足第一正規...