Boyce–Codd 范式 (BCNF)
rdbmsdatabasemysql更新于 2026/3/2 12:28:17
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 作为键,因此消除了异常。
相关文章
有用资源
mysql 参考教程 - 该教程包含有关 mysql 的更多信息:/mysql/