1.第一正規化(1nf)
第一正規化是指資料庫表中的每一列都是不可分割的基本資料項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重複的屬性。
下面看例子-學生資訊表,
每乙個屬性都只有乙個值,比如屬性-**,每個**字段只有乙個值,每一條記錄裡,每乙個屬性只有乙個值而且不會有兩個。
每乙個欄位也不能重複,下面是 符合的這一條規則的資料表,沒有相同重複的字段(field)
而下面的表顯然就不符合第一正規化,因為dbms不允許將乙個欄位再分,資料表中的字段都是單一的,不可再分的。
如果需要重複的屬性,那就可能需要定義乙個新的實體,例如,學生資訊表,乙個人可能有一部家庭**和一部移動**,這時將其規範化為1nf可以將**號碼分為「家庭**」和「移動**」兩個屬性,即學生(學號,姓名,家庭**,移動**)。
簡而言之,第一正規化就是無重複的列
2.第二正規化(2nf)
第二正規化是在第一正規化的基礎上建立的,即滿足第二正規化首先要先滿足第一正規化。
在滿足第一正規化的前提下,
一是表必須有乙個主鍵;
在學生資訊表裡,姓名可能會有重複相同的,所以為了能夠明顯地區別哪個學生是哪個學生,加上學號為主鍵,唯一標識該元組也就是標識該記錄,
二是沒有包含在主鍵中的列必須完全依賴於主鍵,而不能只依賴於主鍵的一部分。
例如,在選課關係表(學號,課程號,成績,學分),關鍵字為組合關鍵字(學號,課程號),
但由於非主屬性學分僅依賴於課程號,對關鍵字(學號,課程號)只是部分依賴,而不是完全依賴,因此此種方式會導致資料冗餘以及更新異常等問題。
解決辦法是將其分為兩個關係模式:學生表(學號,課程號,分數)和課程表(課程號,學分),新關係通過學生表中的外關鍵字課程號聯絡,在需要時進行連線。
所以,所有單關鍵字的資料表都屬於第二正規化,因為不存在組合關鍵字,也就不存在部分函式依賴。
3.第三正規化(3nf)
第三正規化是在第二正規化的基礎上建立的,即滿足第三正規化首先要先滿足第二正規化。
第三正規化是在第二正規化的前提下,消除非主屬性的傳遞函式依賴。
以學生表(學號,姓名,課程號,成績)為例,其中學生姓名無重名,
所以該錶有兩個候選碼(學號,課程號)和(姓名,課程號),
故存在函式依賴:
學號——>姓名
(學號,課程號)——>成績
唯一的非主屬性成績對碼不存在部分依賴,也不存在傳遞依賴,所以屬性屬於第三正規化。
假設有乙個關係,r(abcde), f=,候選碼為ab,e.
ab→c,c→d→ab→d
存在非主屬性d對候選鍵的傳遞函式依賴
e→ab,ab→c→e→c
存在非主屬性c對候選鍵的傳遞函式依賴
4.bcnf正規化(bcnf)
它構建在第三正規化的基礎上,如果關係模型r是第一正規化,且每個屬性都不傳遞依賴於r的候選鍵,那麼稱r為bcnf的模式。
資料庫三正規化解析
在資料庫的建立過程中需要考慮很多規則,乙個良好的資料庫設計不但要節省資料的儲存空間,方便進行資料庫應用程式的開發,而且能夠保證資料的完整性。定義乙個良好的資料庫需要這麼多的規則,那我們設計時豈不更讓人頭疼。所以為了能夠建立乙個好的資料庫在開發時就必須保證資料庫的規範化 三大正規化。為了建立冗餘較小,...
資料庫三正規化經典例項解析
資料庫的設計正規化是資料庫設計所需要滿足的規範,滿足這些規範的資料庫是簡潔的 結構明晰的,同時,不會發生插入 insert 刪除 delete 和更新 update 操作異常。反之則是亂七八糟,不僅給資料庫的程式設計人員製造麻煩,而且面目可憎,可能儲存了大量不需要的冗餘資訊。設計正規化是不是很難懂呢...
自學考試 資料庫正規化解析
看了看第一次機房收費系統的資料庫,感覺存在很多問題,最多的問題就是資料冗餘,所以想在第二次機房的時候把資料庫設計的盡可能完美,正好也是對資料庫考試的乙個總結,首先是對我當時最頭疼的正規化的總結,正規化的作用就是消除資料冗餘 更新異常 插入異常和刪除異常。1.資料依賴 反映乙個關係內部屬性與屬性之間的...