第二范式
外观
第二正规化(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 (主键) | 名称 | 住址 |
---|---|---|
1 | Stylized Parts | VA |
2 | ACME Industries | CA |
这么一来,原本的 "元件来源" 资料表就得要做相对应的改动:
元件 ID (主键) | 价格 | 供应商 ID(主键、非关键词) |
---|---|---|
65 | 59.99 | 1 |
73 | 20.00 | 1 |
65 | 69.99 | 2 |
检查资料表里的每个栏位,确认它们是不是都和关键词完全相关, 这样才能知道这个资料表是不是符合第二正规化; 如果不是的话,就把那些不完全相关的栏位独立出一个资料表。 接下来的步骤是要确保所有不是键的栏位都和彼此没有相依关系,这就叫做第三正规化。
参考文献
[编辑]- Litt's Tips: Normalization (页面存档备份,存于互联网档案馆)
- Rules Of Data Normalization
- Date, C. J., & Lorentzos, N., & Darwen, H. (2002). Temporal Data & the Relational Model Archive.is的存档,存档日期2012-12-09 (1st ed.). Morgan Kaufmann. ISBN 1-55860-855-9.
- 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 (页面存档备份,存于互联网档案馆)
- H.-J. Schek, P.Pistor Data Structures for an Integrated Data Base Management and Information Retrieval System
外部链接
[编辑]- Database Nomalization 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