1. 程式人生 > >什麼是正規化?第一正規化、第二正規化、第三正規化的區別?

什麼是正規化?第一正規化、第二正規化、第三正規化的區別?

參考連結:
https://www.zhihu.com/question/24696366
總結:
正規化的含義:
符合某種級別的關係模式的集合。表示一個關係內部的各屬性之間聯絡的合理化程度。可以理解為:資料表的表結構所符合的某種設計標準的級別。
第一正規化:是對關係模式的基本要求。不滿足第一正規化的關係,不能稱為關係型資料庫。符合第一正規化的關係,每個屬性都不可以再分割。
但是如果僅僅滿足第一正規化:仍然存在資料冗餘過大、插入異常、刪除異常、修改異常等的問題。
第二正規化:建立在第一正規化的基礎上,首先滿足第一正規化。
消除了非主屬性對碼的部分函式依賴。
概念解析:
函式依賴,在一張表中,屬性x(可能為一個屬性也可能為一個屬性組)確定的情況下,Y的取值必定可以確定。我們就說Y依賴於X。跟y=f(x)的關係很相似。
衍生三個函式依賴 的概念:
完全函式依賴,部分函式依賴,傳遞函式依賴。
屬性Y依賴於屬性X。X可能為一個屬性或者一個屬性組。
完全函式依賴:

:如果X為一個屬性,那麼Y對於X就是完全函式依賴。如果X為一個屬性組,對於X的任何一個真子集X”,Y都不能依賴於它。那麼函式Y對於X完全函式依賴。
部分函式依賴:
如果,X為一個屬性組。對於X的某個真子集,Y依賴於它。那麼就成函式Y對於X部分函式依賴。
傳遞函式依賴::如果Z函式依賴於Y,Y函式依賴於X;X不依賴於Y,Y不包含於X。那麼我們就稱之為Z傳遞依賴於X。
碼:
假設K為表中某個屬性或者某個屬性組。對於除了K以外的其他的屬性,都完全依賴函式依賴於K。我們就稱K為候選碼,簡稱 。加入K中的屬性確定的情況下,其他的屬性,完全都能確定,如果K不確定或者K中的任何一個屬性不確定,其他的屬性不能確定,我們就說K為
。一張表中可以有超過一個碼。
包含在任何一個碼中的屬性稱為主屬性。其餘的稱為非主屬性,即任何一個碼中都不包含的屬性,成為非主屬性。
如何判斷一個數據表,是否滿足第二正規化:
第一步:先找出資料庫中所有的碼。
先找出單個屬性,再找出兩個屬性的組合,再找出三個屬性的….
技巧:如果某個屬性或者屬性組是碼,記為K。那麼包含這個K的屬性組一定不是碼。
第二步:根據碼找出所有的主屬性,去除所有的主屬性,剩下的就是非主屬性了。
第三步:檢視非主屬性,是否有對碼。檢視非主屬性,對碼是否是完全函式依賴。如果是,就是符合第二正規化。否則就不符合。

第三正規化:3NF在2NF的基礎之上,消除了非主屬性對於碼的傳遞函式依賴。