第三范式

要求所有非主鍵都只和候選鍵有關聯的資料庫正規化形式

第三范式(3NF)是资料库正规化所使用的正规形式,要求所有非主键属性都只和候选键有相关性,也就是说非主键属性之间应该是独立无关的。

如果再对第三正规化做进一步加强就成了BC正规化,强调的重点在于“资料间的关系是奠基在主键上、以整个主键为考量、而且除了主键之外不考虑其他因素”。

正规定义

编辑

令:

  •   表一个关系;
  •   表维持   所需的一组函数依赖
  •    属性的子集合
  •    的一个属性

最早由埃德加·科德在1971年给出的第三范式定义为[1]

  • 关系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)
订单编号(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)
订单编号(Order Number)
(主键)
客户名称 (Customer Name) 单价 (Unit Price) 数量 (Quantity)
1000 David $35.00 3
1001 Jim $25.00 2
1002 Bob $25.00 3

参考文献

编辑

外部链接

编辑
  1. ^ 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.
  2. ^ Zaniolo, Carlo. "A New Normal Form for the Design of Relational Database Schemata". ACM Transactions on Database Systems 7(3), September 1982.
  3. ^ Abraham Silberschatz, Henry F. Korth, S. Sudarshan, Database System Concepts页面存档备份,存于互联网档案馆 (5th edition), p. 276–277.