冗餘致使多種更新異常,也就是插入、更新和刪除行的操做困難。數據庫
規範化(normalization)是經過修改表以減小冗餘和矛盾的一系列步驟。less
在每一步以後,數據庫都達到一個特定的範式(normal form) 。函數
關係模型定義了三種範式,以著名的序數命名。spa
第一範式(1NF)orm
第二範式(2NF)ssl
第三範式(3NF)it
每一種範式都比前一種更健壯。符合3NF的數據庫也符合2NF和1NF。規範化水平越高,表的數量也越多。io
無損分解(lossless decomposition)能確保表的分割不會引發信息丟失。form
依賴-保持分解(dependency-preserving decomposition)能確保聯繫不丟失。class
當表被分割的時候,存在匹配的主鍵和外鍵列不該被認爲是多餘的數據。
規範化不是系統化,它是一個涉及重複表的分割、從新聯結和精煉的迭代過程。
知足第一範式的表:
列僅包含原子值。
沒有重複的組。
原子值(也稱爲標量值)是不能再細分的單一值。
重複的組是兩個或多個邏輯相關聯的列的集合。
當知足下列條件時,第一範式的表自動知足第二範式:
主鍵是一個列(也就是說,關鍵字不是組合的)。
表中全部的列是主鍵的一部分(單一的或組合的)。
知足第二範式的表:
知足第一範式。
非部分函數依賴。
若是表中的一些組合鍵(但不是所有)值肯定了一個非鍵列的值,則表包含部分函數依賴。
第二範式表是徹底函數依賴,意味着若是組合鍵中任何一列值改變,將致使非鍵列的值須要被更新。
知足第三範式的表:
知足第二範式。
沒有傳遞依賴。
若是一個非鍵列的值肯定了另外一個另外一個非鍵列的值,則表包含傳遞依賴。
在第三範式的表中,非鍵列相互獨立而且只依賴於主鍵列。