第三正規化
维基百科,自由的百科全书
第三正規化 (3NF) 是資料庫正規化中所使用的一種正規形式,用來檢驗是否所有非鍵屬性都只和候選鍵有相關性,也就是說所有非鍵屬性互相之間應該是無關的。
第三正規化和第二正規化不同的地方在於,在第三正規化裡,所有的非鍵屬性都必須和每個候選鍵有直接相關。如果再對第三正規化做進一步加強就成了BC正規化,它所強調的重點就在於 "資料間的關係是奠基在鍵上、以整個鍵為考量、而且除了鍵之外不考慮其他因素"。
目录 |
[编辑] 正規定義
令:
- R 表一個關係;
- F 表維持 R 所需的一組功能相依性;
- X 表 R 屬性的子集合;
- A 表 R 的一個屬性
如果對於 這種型式的功能相依性而言,下列敘述任一為真的話,則可以稱 R 符合第三正規化:
;也就是說 A 是明顯功能相依性
- X 是超鍵
- A 是 R 的鍵的一部份
任何一個具有部份相依性或是轉移相依性的關係都違反了第三正規化。
[编辑] 範例
以下面這個定義機械元件的關係為例:
元件編號 (主鍵) |
製造商名稱 | 製造商地址 |
---|---|---|
1000 | Toyota | Park Avenue |
1001 | Mitsubishi | Lincoln Street |
1002 | Toyota | Park Avenue |
本例中製造商地址很明顯地不該被列在這個關係裡面,因為和元件本身比起來,製造商地址應該和製造商比較有關係;正確的做法應該是把獨立成為一個新的資料表:
製造商名稱 (主鍵) |
製造商地址 |
---|---|
Toyota | Park Avenue |
Mitsubishi | Lincoln Street |
然後把原本的資料表改成這樣:
元件編號 (主鍵) |
製造商名稱 |
---|---|
1000 | Toyota |
1001 | Mitsubishi |
1002 | Toyota |
先前那個資料表的問題在於每提到一次製造商名稱就要多存一次它的地址,而這就不符合第三正規化的原則。
下面提供了另一個例子:
訂單編號 (Order Number) (主鍵) |
客戶名稱 (Customer Name) | 單價 (Unit Price) | 數量 (Quantity) | 小計 (Total) |
---|---|---|---|---|
1000 | David | $35.00 | 3 | $105.00 |
1001 | Jim | $25.00 | 2 | $50.00 |
1002 | Bob | $25.00 | 3 | $75.00 |
在本例中,小計不應該放在這個資料表裡面,只要把單價乘上數量就可以得到小計了;如果想要符合第三正規化的話,就把小計拿掉吧 (不過在做查詢的時候,本來用 "SELECT Orders.Total FROM Orders" 就要改成用 "SELECT UnitPrice * Quantity FROM Orders" 了)。
訂單編號 (Order Number) (主鍵) |
客戶名稱 (Customer Name) | 單價 (Unit Price) | 數量 (Quantity) |
---|---|---|---|
1000 | David | $35.00 | 3 |
1001 | Jim | $25.00 | 2 |
1002 | Bob | $25.00 | 3 |
[编辑] 文獻
- Ramakrishnan, Raghu and Johannes Gehrke. "Schema Refinement and Normal Forms." Database Management Systems, Third Edition. ISBN 0-07-246563-8. McGraw Hill. August 14, 2002.
- Gupta, Gopal. "Third Normal Form (3NF)." Single Valued Normalization. 1996.
[编辑] 參考資料
- Litt's Tips: Normalization
- Rules Of Data Normalization
- Date, C. J. (1999), An Introduction to Database Systems (8th ed.). Addison-Wesley Longman. ISBN 0-321-19784-4.
- Kent, W. (1983) A Simple Guide to Five Normal Forms in Relational Database Theory, Communications of the ACM, vol. 26, pp. 120-125
- Date, C.J., & Darwen, H., & Pascal, F. Database Debunkings
[编辑] 外部連結
- Database Normalization Basics by Mike Chapple (About.com)
- An Introduction to Database Normalization by Mike Hillyer.
- Normalization by ITS, University of Texas.
- A tutorial on the first 3 normal forms by Fred Coulson
- Free PDF poster available by Marc Rettig
- Description of the database normalization basics by Microsoft
- Developing High Quality Data Models
- Generic Data Modeling
- The Gellish Language - A Universal Data Structure
資料庫正規化 |
第一正規化 | 第二正規化 | 第三正規化 |