关系数据库的范式

Table of Contents

1 函数依赖

函数依赖: 设R(U)是属性集U上的关系模式。X,Y是U的子集。若对于R(U)的任意一个 可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不相等, 则称X函数确定Y或者Y函数依赖于X。记为X->Y。

完全函数依赖: 在R(U)中,如果Y函数依赖于X,并且对于X的任何一个真子集X',都有 Y不函数依赖于X', 则称Y对X完全函数依赖。否则称Y对X部分函数依赖。

传递函数依赖: 在R(U)中,如果X->Y, Y->Z, 则称Z对X传递函数依赖。

2 第一范式

第一范式规定关系的每一个量必须是一个不可分的数据项。下面给出不是第一范式 的例子。

Customer ID First Name Surname Telephone Number
123 Pooja Patel 555-861-2025, 192-122-1111
456 Zhang San (555) 403-1659 Ext. 53; 182-929-2929
789 John Doe 555-808-9633

可以将其重新设计以符合第一范式。

Customer ID First Name Surname Telephone Number
123 Pooja Patel 555-861-2025
123 Pooja Patel 192-122-1111
456 Zhang San 182-929-2929
456 Zhang San (555) 403-1659 Ext. 53
789 John Doe 555-808-9633

3 第二范式

数据库表中不存在非关键字段对任一候选键的部分函数依赖,也即所有非关键字段都 完全依赖于任意一组候选关键字。

判断一个表是否是第二范式的方法分为四个步骤:

  • 第一步:找出数据表中所有的码。
  • 第二步:根据第一步所得到的码,找出所有的主属性。
  • 第三步:数据表中,除去所有的主属性,剩下的就都是非主属性了。
  • 第四步:查看是否存在非主属性对码的部分函数依赖。

下面的表不符合第二范式。虽然表格的设计者可以将<Moduel Full Name>作为主键, 但<Manufacturer,Model>也是一个候选键,<Manufacturer Country>完全函数依赖于 它的子集,即<Manufacturer>。

Manufacturer Model Model Full Name Manufacturer Country
Forte X-Prime Forte X-Prime Italy
Forte Ultraclean Forte Ultraclean Italy
Dent-o-Fresh EZbrush Dent-o-Fresh EZbrush USA
Kobayashi ST-60 Kobayashi ST-60 Japan
Hoch Toothmaster Hoch Toothmaster Germany
Hoch X-Prime Hoch X-Prime Germany

可以将其拆分成两个表以符合第二范式。

Manufacturer Manufacturer Country
Forte Italy
Dent-o-Fresh USA
Kobayashi Japan
Hoch Germany
Manufacturer Model Model Full Name
Forte X-Prime Forte X-Prime
Forte Ultraclean Forte Ultraclean
Dent-o-Fresh EZbrush Dent-o-Fresh EZbrush
Kobayashi ST-60 Kobayashi ST-60
Hoch Toothmaster Hoch Toothmaster
Hoch X-Prime Hoch X-Prime

4 第三范式

在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函 数依赖则符合第三范式。也可以描述为:表中不存在可以确定其他非关键字的非键字 段。

下面的表格不符合第三范式。<Tournament, Year>是这张表的候选键,而 <Winner Date of Birth>函数依赖于<Winner>。

Tournament Year Winner Winner Date of Birth
Indiana Invitational 1998 Al Fredrickson 21 July 1975
Cleveland Open 1999 Bob Albertson 28 September 1968
Des Moines Masters 1999 Al Fredrickson 21 July 1975
Indiana Invitational 1999 Chip Masterson 14 March 1977

要修改为第三范式,需拆分为两张表。

Tournament Year Winner
Indiana Invitational 1998 Al Fredrickson
Cleveland Open 1999 Bob Albertson
Des Moines Masters 1999 Al Fredrickson
Indiana Invitational 1999 Chip Masterson
Winner Date of Birth
Chip Masterson 14 March 1977
Al Fredrickson 21 July 1975
Bob Albertson 28 September 1968

5 BC范式

如果对于关系模式R中存在的任意一个非平凡函数依赖X->A,都满足X是R的一个超键, 那么关系模式R就属于BCNF。

BCNF意味着在关系模式中每一个决定因素都包含候选键,也就是说,只要属性或属性 组A能够决定任何一个属性B,则A的子集中必须有候选键。BCNF范式排除了任何属性( 不光是非主属性,2NF和3NF所限制的都是非主属性)对候选键的传递依赖与部分依赖。

下面的表不符合第三范式。

Court Start Time End Time Rate Type
1 09:30 10:30 SAVER
1 11:00 12:00 SAVER
1 14:00 15:30 STANDARD
2 10:00 11:30 PREMIUM-B
2 11:30 13:30 PREMIUM-B
2 15:00 16:30 PREMIUM-A

这张表的超键包括:

  • S1 = {Court, Start Time}
  • S2 = {Court, End Time}
  • S3 = {Rate Type, Start Time}
  • S4 = {Rate Type, End Time}
  • S5 = {Court, Start Time, End Time}
  • S6 = {Rate Type, Start Time, End Time}
  • S7 = {Court, Rate Type, Start Time}
  • S8 = {Court, Rate Type, End Time}
  • ST = {Court, Rate Type, Start Time, End Time}, the trivial superkey

而显然<Rate Type> -> <Court>。可将其修改以符合BCNF。

Rate Type Court Join
SAVER 1 Yes
STANDARD 1 No
PREMIUM-A 2 Yes
PREMIUM-B 2 No
Join Court Start Time End Time
Yes 1 09:30 10:30
Yes 1 11:00 12:00
No 1 14:00 15:30
No 2 10:00 11:30
No 2 11:30 13:30
Yes 2 15:00 16:30

By .