數據庫規范化與范式
冗余導致多種更新異常,也就是插入、更新和刪除行的操作困難。
規范化(normalization)是通過修改表以減少冗余和矛盾的一系列步驟。
在每一步之后,數據庫都達到一個特定的范式(normal form) 。
關系模型定義了三種范式,以著名的序數命名。
第一范式(1NF)
第二范式(2NF)
第三范式(3NF)
每一種范式都比前一種更健壯。符合3NF的數據庫也符合2NF和1NF。規范化水平越高,表的數量也越多。
無損分解(lossless decomposition)能確保表的分割不會引起信息丟失。
依賴-保持分解(dependency-preserving decomposition)能確保聯系不丟失。
當表被分割的時候,存在匹配的主鍵和外鍵列不應被認為是多余的數據。
規范化不是系統化,它是一個涉及重復表的分割、重新聯結和精煉的迭代過程。
第一范式(1NF)
滿足第一范式的表:
列僅包含原子值。
沒有重復的組。
原子值(也稱為標量值)是不能再細分的單一值。
重復的組是兩個或多個邏輯相關聯的列的集合。
第二范式(2NF)
當滿足下列條件時,第一范式的表自動滿足第二范式:
主鍵是一個列(也就是說,關鍵字不是組合的)。
表中所有的列是主鍵的一部分(單一的或組合的)。
滿足第二范式的表:
滿足第一范式。
非部分函數依賴。
如果表中的一些組合鍵(但不是全部)值確定了一個非鍵列的值,則表包含部分函數依賴。
第二范式表是完全函數依賴,意味着如果組合鍵中任何一列值改變,將導致非鍵列的值需要被更新。
第三范式(3NF)
滿足第三范式的表:
滿足第二范式。
沒有傳遞依賴。
如果一個非鍵列的值確定了另一個另一個非鍵列的值,則表包含傳遞依賴。
在第三范式的表中,非鍵列相互獨立並且只依賴於主鍵列。