一個資料表符合第二正規化若且唯若
- 它符合第一正規化
- 所有非主鍵的欄位都一定和主鍵有關
有一個資料表記錄了設備元件的資訊,如下所示:
元件 ID (主鍵) | 供應商 ID (主鍵) | 供應商名稱 | 價格 | 供應商住址 |
---|---|---|---|---|
65 | 2 | Stylized Parts | 59.99 | VA |
73 | 2 | Stylized Parts | 20.00 | VA |
65 | 1 | ACME Industries | 69.99 | CA |
這個資料表的每個值都是單一值,所以它符合第一正規化。因為同一個元件有可能由不同的供應商提供,所以得把元件 ID 和供應商 ID 合在一起組成一個主鍵。
主鍵和價格之間的關係很正確:同一個元件在不同供應商有可能會有不同的報價,所以價格確實和主鍵完全相關(完全依賴)。
另一方面,供應商的名稱和住址就只和供應商 ID 有關(部分依賴),這不符合第二正規化的原則。仔細看就會發現 "Stylized Parts" 這個名稱和 "VA" 這個住址重複出現了兩次;要是它改名了或是被其他公司併購了怎麼辦?這時候最好把這些資料存到第二個資料表中:
供應商 ID (主鍵) | 名稱 | 住址 |
---|---|---|
1 | ACME Industries | CA |
2 | Stylized Parts | VA |
這麼一來,原本的 "元件來源" 資料表就得要做相對應的更動:
元件 ID (主鍵) | 供應商 ID (主鍵) | 價格 |
---|---|---|
65 | 2 | 59.99 |
73 | 2 | 20.00 |
65 | 1 | 69.99 |
檢查資料表裡的每個欄位,確認它們是不是都和主鍵完全相關,這樣才能知道這個資料表是不是符合第二正規化;如果不是的話,就把那些不完全相關的欄位移到獨立的資料表裡。接下來的步驟是要確保所有不是鍵的欄位都和彼此沒有相依關係,這就叫做第三正規化。
沒有留言:
張貼留言