設計資料庫時,通常需要遵從不同的規範,設計出合理的資料庫,減少資料冗餘,而這些規範稱為資料庫正規化,一般來說,只需要實現前三大正規化即可。
下面說說我對這三大正規化的理解:
以下表為例:
別小看這個表,這個表就其實已經算是符合了三大正規化哦。
第一正規化,是針對於資料表的列的規範,即資料表的每一列都是不可分割的原子資料項,而不能是陣列,集合,記錄等非原子資料項,說白了就是,不能把好幾列的資料合在一起,且每一列的資料都是不可分割的,看看兩個錯誤的例子:
將幾列資料合在一起=>錯誤
原子資料項被分割=>錯誤
第二正規化,基於第一正規化,非碼屬性必須完全依賴碼,即非主鍵資料必須依賴主鍵資料。
「碼」(主鍵)是資料表用來唯一區分例項或記錄的資料項,若沒有,可人為新增。
對於第一正規化針對列來說,第二正規化則是針對於行的規範。先說說他的作用吧,從作用反推他的實現。
他的作用就是讓表的每一行都不會一樣,以便我們可以識別任何一行記錄。那怎麼實現這個作用呢?答案是給每一行分配乙個序號,或者以每一行裡肯定不會和其它行一樣的資料項來識別,這就要求其它「可能「會一樣的資料完全依賴於此序號(資料項)。
看看錯誤例項:
第三正規化,其實是第二正規化的子集,也是基於第一正規化,任何非碼屬性不依賴其他非碼屬性。
這個比較抽象,還是看圖說話好了,下圖是錯誤示例
咳咳,其實我還是只單身狗,沒有交過這麼多女票的,美女快來把我領回家。
回歸主題,這個表有沒有違反第二正規化呢?沒有,( ⊙ o ⊙ )是的,並沒有。
這個表其實存在著一種依賴關係—「傳遞依賴「,girlfriend依賴著girlfriend_id,,而girlfriend_id依賴著id,如此即沒有違反第二正規化了。
但是,他就違反了第三正規化,任何非碼屬性不依賴其他非碼屬性,通俗地講,就是不能存在這種傳遞依賴關係,規範要我們怎麼做呢?將上表拆分成兩個表,如下: 表一
兩表之間通過grilfriend_id進行關聯
如此,便符合第三正規化了。
資料庫設計三大正規化資料庫設計三大正規化
為了建立冗餘較小 結構合理的資料庫,設計資料庫時必須遵循一定的規則。在關係型資料庫中這種規則就稱為正規化。正規化是符合某一種設計要求的總結。要想設計乙個結構合理的關係型資料庫,必須滿足一定的正規化。在實際開發中最為常見的設計正規化有三個 1 第一正規化 確保每列保持原子性 第一正規化是最基本的正規化...
資料庫三大正規化
1 第一正規化 1nf 在任何乙個關聯式資料庫中,第一正規化 1nf 是對關係模式的基本要求,不滿足第一正規化 1nf 的資料庫就不是關聯式資料庫。所謂第一正規化 1nf 是指資料庫表的每一列都是不可分割的基本資料項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重複的屬性。如果出現...
資料庫三大正規化
第一正規化 確保每列的原子性.如果每列 或者每個屬性 都是不可再分的最小資料單元 也稱為最小的原子單元 則滿足第一正規化.例如 顧客表 姓名 編號 位址 其中 位址 列還可以細分為國家 省 市 區等。第二正規化 在第一正規化的基礎上更進一層,目標是確保表中的每列都和主鍵相關.如果乙個關係滿足第一正規...