Boyce–Codd 范式 (BCNF)

rdbmsdatabasemysql

BCNF 是第三范式 (3NF) 的扩展,比 3NF 略强。

如果 P -> Q 是平凡函数依赖关系,且 P 是 R 的超键,则关系 R 符合 BCNF。

如果关系符合 BCNF,则意味着基于函数依赖关系的冗余已被删除,但仍存在一些冗余。

让我们看一个例子 −

<SportsClub>

Ground
Begin_Time
End_Time
Package
G01
07:00
09:00
Gold
G01
10:00
12:00
Gold
G01
10:30
11:00
Bronze
G02
10:15
11:15
Silver
G02
08:00
09:00
Silver


上述关系符合 1NF、2NF、3NF,但不符合 BCNF。原因如下 −

函数依赖 {Package->Ground

Ground 所依赖的确定性属性 Package 既不是候选键也不是候选键的超集。

<Package>

Package
Ground
Gold
G01
Silver
G02
Bronze
G01


<TomorrowBookings>

Ground
Begin_Time
End_Time
G01
07:00
09:00
G01
10:00
12:00
G01
10:30
11:00
G02
10:15
11:15
G02
08:00
09:00


现在上面的表都符合 BCNF 规范。

<Package> 表的候选键是 Package 和 Ground

<TomorrowBookings>  表的候选键是  {Ground, Begin_Time {Ground, End_Time

由于我们在 <Package> 关系中使用了 Package 作为键,因此消除了异常。


相关文章