本页使用了标题或全文手工转换

第二正規化

维基百科,自由的百科全书
跳转至: 导航搜索

第二正規化(2NF,中国大陆译作第二范式,台湾译作第二正规化)是資料庫正規化中所使用的一種正規形式。它的規則是要求資料表裡的所有資料都要和該資料表的主鍵有完全依赖关系;如果有哪些資料只和主鍵的一部份有關的話,就得把它們獨立出來變成另一個資料表。如果一個資料表的主鍵只有單一一個欄位的話,它就一定符合第二正規化。

一個資料表符合第二正規化若且唯若

  • 它符合第一正規化
  • 所有非主鍵的欄位都一定和主鍵有關

範例[编辑]

有一個資料表記錄了設備元件的資訊,如下所示:

元件來源
元件 ID (主鍵) 價格 供應商ID (主鍵) 供應商名稱 供應商住址
65 59.99 1 Stylized Parts VA
73 20.00 1 Stylized Parts VA
65 69.99 2 ACME Industries CA

這個資料表的每個值都是單一值,所以它符合第一正規化。因為同一個元件有可能由不同的供應商提供,所以得把元件 ID 和供應商 ID 合在一起組成一個主鍵。

元件(主鍵)和價格之間的關係很正確:同一個元件在不同供應商有可能會有不同的報價,所以價格確實和主鍵完全相關(完全依赖)。

另一方面,供應商的名稱和住址就只和供應商 ID 有關(部分依赖),這不符合第二正規化的原則。仔細看就會發現 "Stylized Parts" 這個名稱和 "VA" 這個住址重複出現了兩次;要是它改名了或是被其他公司併購了怎麼辦?這時候最好把這些資料存到第二個資料表中:

供應商
供應商 ID (主鍵) 名稱 住址
2 ACME Industries CA
1 Stylized Parts VA

這麼一來,原本的 "元件來源" 資料表就得要做相對應的改動:

元件來源
元件 ID (主鍵) 價格 供應商 ID(主鍵、外键)
65 59.99 1
73 20.00 1
65 69.99 2

檢查資料表裡的每個欄位,確認它們是不是都和主鍵完全相關,這樣才能知道這個資料表是不是符合第二正規化;如果不是的話,就把那些不完全相關的欄位移到獨立的資料表裡。接下來的步驟是要確保所有不是鍵的欄位都和彼此沒有相依關係,這就叫做第三正規化

参考文献[编辑]

外部連結[编辑]


数据库规范化

第一正規化 | 第二正規化 | 第三正規化
BC正規化 | 第四正規化 | 第五正規化 | DK正規化 | 第六正規化
反正規化