第三范式
此条目翻译自英语维基百科,需要相关领域的编者协助校对翻译。 |
第三范式(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.