2NF和BCNF之间的差异

use*_*622 5 relational-database database-normalization

根据维基百科示例,以下示例不是bcnf,因为存在重叠的候选键(名称和工作,以及名称和承包商)

Name   Work        Contractor
John   Plumber     Plumber industries
Ryan   Plumber     Plumber industries
Ryan   Elektrician Electro industries
Run Code Online (Sandbox Code Playgroud)

但是,这张表还不在2NF吗?考虑到Name和work组成主键,然后承包商只能从work中派生出来,那么数据库是否应该被拆分?

如果我的陈述是真的,有人可以为我提供一个(简单)数据库的例子,该数据库不是在BCNF中,而是2NF吗?

nvo*_*gel 5

这张表不是也不是 2NF 吗?

不,它不违反2NF。2NF 要求每个非属性完全依赖于每个候选键。由于您示例中的表没有非素数属性,因此它不会违反 2NF。这就是BCNF和2NF/3NF的本质区别。BCNF 要求每个属性都必须完全依赖于每个键。2NF 和 3NF 的低范式只需要非素数属性。

非主要属性是指不属于任何候选键的属性。