博伊斯·科德范式(BCNF)

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

如果P-> Q是琐碎的功能依赖性,并且P是R的超键,则关系R在BCNF中。

如果在BCNF中存在关系,则意味着基于功能依赖性的冗余已被删除,但仍有一些冗余。

让我们看一个例子-

<体育俱乐部>

地面
开始时间
时间结束

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


以上关系在1NF,2NF,3NF中,但在BCNF中不存在。这是原因-

功能依赖性 {Package-> Ground}

它的行列式属性Package依赖于Ground既不是候选关键字也不是候选关键字的超集。

<包装>


地面

G01

G02
青铜
G01


<明天预订>

地面
开始时间
时间结束
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>关系中的键,因此消除了异常。