注:原文講的非常棒,知乎是個好地方。
按照教材中的定義,正規化是「符合某一種級別的關係模式的集合,表示乙個關係內部各屬性之間的聯絡的合理化程度」。很晦澀吧?實際上你可以把它粗略地理解為一張資料表的表結構所符合的某種設計標準的級別。就像家裡裝修買建材,最環保的是e0級,其次是e1級,還有e2級等等。資料庫正規化也分為1nf,2nf,3nf,bcnf,4nf,5nf。一般在我們設計關係型資料庫的時候,最多考慮到bcnf就夠。
符合高一級正規化的設計,必定符合低一級正規化,例如符合2nf的關係模式,必定符合1nf。
接下來就對每一級正規化進行一下解釋,首先是第一正規化(1nf)。符合1nf的關係(你可以理解為資料表。「關係」和「關係模式」的區別,類似於物件導向程式設計中」類「與」物件「的區別。」關係「是」關係模式「的乙個例項,你可以把」關係」理解為一張帶資料的表,而「關係模式」是這張資料表的表結構。
符合1nf的關係中的每個屬性都不可再分。表1所示的情況,就不符合1nf的要求。實際上,1nf是所有關係型資料庫的最基本要求,你在關係型資料庫管理系統(rdbms),例如sql server,oracle,mysql中建立資料表的時候,如果資料表的設計不符合這個最基本的要求,那麼操作一定是不能成功的。
在關係理論中的嚴格定義我這裡就不多介紹了(因為涉及到的鋪墊比較多),只需要了解2nf對1nf進行了哪些改進即可。其改進是,2nf在1nf的基礎之上,消除了非主屬性對於碼的部分函式依賴。接下來對這句話中涉及到的四個概念——「函式依賴」、「碼」、「非主屬性」、與「部分函式依賴」進行一下解釋。
3nf在2nf的基礎之上,消除了非主屬性對於碼的傳遞函式依賴。也就是說, 如果存在非主屬性對於碼的傳遞函式依賴,則不符合3nf的要求。
從這裡我們可以得出結論,在某些特殊情況下,即使關係模式符合 3nf 的要求,仍然存在著插入異常,修改異常與刪除異常的問題,仍然不是 」好「 的設計。造成此問題的原因:存在著主屬性對於碼的部分函式依賴與傳遞函式依賴。(在此例中就是存在主屬性【倉庫名】對於碼【(管理員,物品名)】的部分函式依賴。解決辦法就是要在 3nf 的基礎上消除主屬性對於碼的部分與傳遞函式依賴。倉庫(倉庫名,管理員)
庫存(倉庫名,物品名,數量)這樣,之前的插入異常,修改異常與刪除異常的問題就被解決了。以上就是關於 bcnf 的解釋。
資料庫(第一正規化,第二正規化,第三正規化)
正規化 英文名稱是 normal form,它是英國人 e.f.codd 關聯式資料庫的老祖宗 在上個世紀70年代提出關聯式資料庫模型後總結出來的,正規化是關聯式資料庫理論的基礎,也是我們在設計資料庫結構過程中所要遵循的規則和指導方法。目前有跡可尋的共有8種正規化,依次是 1nf,2nf,3nf,b...
資料庫(第一正規化,第二正規化,第三正規化)
正規化 英文名稱是 normal form,它是英國人 e.f.codd 關聯式資料庫的老祖宗 在上個世紀70年代提出關聯式資料庫模型後總結出來的,正規化是關聯式資料庫理論的基礎,也是我們在設計資料庫結構過程中所要遵循的規則和指導方法。目前有跡可尋的共有8種正規化,依次是 1nf,2nf,3nf,b...
資料庫(第一正規化,第二正規化,第三正規化)
正規化 英文名稱是 normal form,它是英國人 e.f.codd 關聯式資料庫的老祖宗 在上個世紀70年代提出關聯式資料庫模型後總結出來的,正規化是關聯式資料庫理論的基礎,也是我們在設計資料庫結構過程中所要遵循的規則和指導方法。目前有跡可尋的共有8種正規化,依次是 1nf,2nf,3nf,b...