正規化的概念:
指的是設計資料庫時需要遵循的一些規範。要遵循後邊的正規化要求,必須先遵循前邊的所有正規化要求。
設計關聯式資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,這些不同的規範要求被稱為不同的正規化,各種正規化呈遞次規範,越高的正規化資料庫冗餘越小。分類:目前關聯式資料庫有六種正規化:第一正規化(1nf)、第二正規化(2nf)、第三正規化(3nf)、巴斯-科德正規化(bcnf)、第四正規化(4nf)和第五正規化(5nf,又稱完美正規化)。
要求:每一列都是不可分割的原子資料項。
如下是一張學生資訊表:
顯然「系」這一列可以拆分,所以這張表不符合第一正規化。
修改之後使之符合第一正規化:
然而,現在這張表依然存在很多問題:
1.存在非常嚴重的資料冗餘(重複):姓名、系名、系主任
2.資料新增存在問題:新增新開設的系和系主任時,資料不合法
3.資料刪除存在問題:張無忌同學畢業了,刪除資料,會將系的資料一起刪除。
要想解決以上的問題,就需要第二正規化了。
要求:在1nf的基礎上,非主屬性必須完全依賴於碼(即在1nf基礎上消除非主屬性對主碼的部分函式依賴)。
是不是有些看不懂?要想搞清楚第二正規化,必須先了解幾個簡單概念——
1.依賴
若有兩個屬性,a–>b,如果通過a屬性(屬性組)的值,可以確定唯一b屬性的值,則稱b依賴於a。(依賴全稱「函式依賴」,此處即下文都省略「函式」,簡稱xx依賴。)
例如:學號–>姓名 ; (學號,課程名稱) --> 分數
2.完全依賴
a–>b, 如果a是乙個屬性組,則b屬性值的確定,需要依賴於a屬性組中所有的屬性值,則稱b完全依賴於a組。
例如:(學號,課程名稱) --> 分數
3.部分依賴
a–>b, 如果a是乙個屬性組,則b屬性值的確定,只需要依賴於a屬性組中某一些值即可。則稱b部分依賴於a組。
例如:(學號,課程名稱) – > 姓名
4.傳遞依賴
a -> b, b -> c ;如果通過a屬性(屬性組)的值,可以確定唯一b屬性的值,再通過b屬性(屬性組)的值可以確定唯一c屬性的值,則稱 c 傳遞依賴於a。
例如:學號–>系名,系名–>系主任
5.碼
如果在一張表中,乙個屬性或屬性組,被其他所有屬性完全依賴,則稱這個屬性(屬性組)為該錶的碼。
例如:下表中的碼為(學號,課程名稱)
由碼的概念引出兩種屬性:
上面的概念都很簡單吧,那麼我們用人話把第二正規化再說一遍,就是——
表中只有完全依賴,沒有部分依賴。
我們再觀察這張表,可以發現,姓名、系名、系主任這幾個非主屬性,其實只是部分依賴於碼(學號,課程名稱)的,因為它們只需要根據碼中的學號就能確定了,由於存在部分依賴,所以這張表是不符合第二正規化的。
那麼我們如何修改這張表,使之符合第二正規化呢?
先理清楚表中的完全依賴關係:姓名,系名,系主任完全依賴於學號;分數完全依賴於(學號,課程名稱)這個碼;那麼我們根據這兩則關係將表拆分為兩個表:
顯然,每乙個表都只存在完全依賴的關係了,那麼現在這兩個表都是符合第二正規化的。
回頭看之前的三個問題都解決了嗎?
1.存在非常嚴重的資料冗餘(重複):姓名、系名、系主任至此只解決了資料冗餘的問題,要解決後倆問題,需要引入第三正規化。2.資料新增存在問題:新增新開設的系和系主任時,資料不合法
3.資料刪除存在問題:張無忌同學畢業了,刪除資料,會將系的資料一起刪除。
在2nf基礎上,任何非主屬性不依賴於其它非主屬性(在2nf基礎上消除傳遞依賴)。
顯然,上面修改後的學生表中,系主任是通過系名傳遞依賴於學號的,因此還不符合第三正規化。
要繼續修改學生表,使之符合第三正規化,只需要再拆分出一張表,讓系主任完全依賴於系名即可。
如上,這三張表都不存在傳遞依賴,符合第三正規化。
回顧上面留下的兩個問題——
2.資料新增存在問題:新增新開設的系和系主任時,資料不合法現在都已經得到了解決!3.資料刪除存在問題:張無忌同學畢業了,刪除資料,會將系的資料一起刪除
資料庫設計三大正規化資料庫設計三大正規化
為了建立冗餘較小 結構合理的資料庫,設計資料庫時必須遵循一定的規則。在關係型資料庫中這種規則就稱為正規化。正規化是符合某一種設計要求的總結。要想設計乙個結構合理的關係型資料庫,必須滿足一定的正規化。在實際開發中最為常見的設計正規化有三個 1 第一正規化 確保每列保持原子性 第一正規化是最基本的正規化...
資料庫設計三大正規化
為了建立冗餘較小 結構合理的資料庫,設計資料庫時必須遵循一定的規則。在關係型資料庫中這種規則就稱為正規化。正規化是符合某一種設計要求的總結。要想設計乙個結構合理的關係型資料庫,必須滿足一定的正規化。在實際開發中最為常見的設計正規化有三個 1 第一正規化 確保每列保持原子性 第一正規化是最基本的正規化...
資料庫設計三大正規化
為了建立冗餘較小 結構合理的資料庫,設計資料庫時必須遵循一定的規則。在關係型資料庫中這種規則就稱為正規化。正規化是符合某一種設計要求的總結。要想設計乙個結構合理的關係型資料庫,必須滿足一定的正規化。在實際開發中最為常見的設計正規化有三個 1 第一正規化 確保每列保持原子性 第一正規化是最基本的正規化...