第三正規化
![本頁使用了標題或全文手工轉換](http://images.weserv.nl/?url=//upload.wikimedia.org/wikipedia/commons/thumb/c/cd/Zh_conversion_icon_m.svg/35px-Zh_conversion_icon_m.svg.png)
![]() | 此條目翻譯自英語維基百科,需要相關領域的編者協助校對翻譯。 |
第三範式(3NF)是資料庫正規化所使用的正規形式,要求所有非主鍵屬性都只和候選鍵有相關性,也就是說非主鍵屬性之間應該是獨立無關的。
如果再對第三正規化做進一步加強就成了BC正規化,強調的重點在於「資料間的關係是奠基在主鍵上、以整個主鍵為考量、而且除了主鍵之外不考慮其他因素」。
正規定義
令:
- 關係R(表)滿足第二範式 (2NF);
- R的每個非鍵屬性是R的每個候選鍵的非傳遞依賴。
Carlo Zaniolo於1982年給出的一個等價定義為[2][3]:
如果對於 這種型式的函數依賴而言,下列敘述任一為真的話,則可以稱 符合第三正規化:
任何一個具有部份相依性或是轉移相依性的關係都違反了第三正規化。
範例
以下面這個定義機械元件的關係為例:
元件編號 (主鍵) |
製造商名稱 | 製造商地址 |
---|---|---|
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 Order.Total FROM Order 需改成 SELECT UnitPrice * Quantity FROM Order )。
訂單編號(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 (頁面存檔備份,存於網際網路檔案館)
- ^ Codd, E. F. "Further Normalization of the Data Base Relational Model". (Presented at Courant Computer Science Symposia Series 6, "Data Base Systems", New York City, May 24–25, 1971.) IBM Research Report RJ909 (August 31, 1971). Republished in Randall J. Rustin (ed.), Data Base Systems: Courant Computer Science Symposia Series 6. Prentice-Hall, 1972.
- ^ Zaniolo, Carlo. "A New Normal Form for the Design of Relational Database Schemata". ACM Transactions on Database Systems 7(3), September 1982.
- ^ Abraham Silberschatz, Henry F. Korth, S. Sudarshan, Database System Concepts (頁面存檔備份,存於網際網路檔案館) (5th edition), p. 276–277.