第二范式

第二范式(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

检查资料表里的每个字段,确认它们是不是都和关键词完全相关, 这样才能知道这个资料表是不是符合第二范式; 如果不是的话,就把那些不完全相关的字段独立出一个资料表。 接下来的步骤是要确保所有不是键的字段都和彼此没有依赖关系,这就叫做第三范式

参考文献

外部链接