3NF和BCNF之间的区别

作者: Laura McKinney
创建日期: 1 四月 2021
更新日期: 5 可能 2024
Anonim
Difference between 3NF and BCNF, De-normalization
视频: Difference between 3NF and BCNF, De-normalization

内容


正常化 是一种删除方法 冗余 从某种关系上看,从而最大程度地减少了降低数据库性能的插入,删除和更新异常。在本文中,我们将区分两种较高的正常形式,即3NF和BCNF。 3NF和BCNF的基本区别是 3NF 如果从关系和表中删除传递依赖关系并将其放在BCNF中,则只有X是超键时,关系中的琐碎功能依赖关系X-> Y才必须成立。

让我们借助下面显示的比较表来讨论3NF和BCNF之间的区别。

  1. 比较表
  2. 定义
  3. 关键差异
  4. 结论

比较表

比较基础3NFBCNF
概念任何非素数属性都不能可传递地依赖于候选键。对于关系R中任何琐碎的依赖关系,例如X-> Y,X应该是关系R的超键。
相依性可以在不牺牲所有依赖性的情况下获得3NF。BCNF中可能未保留依赖项。
分解在3NF中可以实现无损分解。BCNF很难实现无损分解。

3NF的定义

表或关系被认为位于 第三范式 仅当表格已经在 2NF 而且没有 非素数 属性 传递地 取决于 候选键 关系。

因此,在我讨论在3NF中标准化表格的过程之前,请允许我讨论候选密钥。一种 候选键最小超级键 即具有最少属性的超级键,可以定义关系的所有属性。因此,在规范化表的过程中,首先,您要识别给定关系的候选键。候选键的一部分属性是 主要属性,并且不属于候选关键字的属性是 非主要属性.


现在,如果我们有一个关系R(A,B,C,D,E,F),并且我们对关系R具有以下函数依赖关系。

观察功能依赖关系,我们可以得出以下结论: AB 是关系R的候选键,因为使用键AB可以搜索关系R中所有属性的值。 A,B 变成 主要属性 因为它们一起成为候选键。属性 C,D,E,F 变成 非素数 属性,因为它们都不是候选键的一部分。

该表位于2NF中,因为没有非素数属性部分取决于候选键

但是,在提供的功能依赖项中观察到传递性依赖项作为属性 F 不直接取决于候选键 AB。相反,属性 F传递地 取决于候选键 AB 通过属性 d。直到属性D具有一些值,我们可以从候选键AB达到F的属性值。如果属性D的值为NULL,我们将永远无法在候选键AB的帮助下找到/搜索F的值。这就是3NF要求从关系中删除传递依赖性的原因。

因此,要删除此传递依赖关系,我们需要划分关系R。在划分关系时,始终将候选关键字以及所有依赖于该候选关键字的属性置于第一个关系中。在下一个划分的关系中,我们将导致传递依赖的属性以及依赖于该属性的属性放在第二个关系中。

现在,表R1和R2位于3NF中,因为它没有部分和可传递的依赖性。关系 R1(A,B,C,D,E) 有一个候选键 AB 而关系 R2(D,E) 拥有 d 作为其候选键。


BCNF的定义

BCNF被认为比3NF更强。 BCNF中的关系R必须在 3NF。而无论 非平凡的功能依赖性A-> B 持有关系R,则 一种 必须是 超级键 众所周知,超级键是具有单个属性或一组属性的键,该单个属性或一组属性确定关系的整个属性。

现在,让我们继续来看一个示例,以更好地理解BCNF。让我们,假设我们有一个关系 R(A,B,C,D,F),具有以下功能依赖性。

通过观察关系R,我们可以说 一种高炉候选键 关系R的值,因为它们本身可以搜索关系R中所有属性的值。 A,B,F主要 属性,而 C d非素数 属性。在上面存在的功能相关性中未观察到传递相关性。因此,表R为3NF。

但是一个功能依赖性,即 D-> F 违反了BCNF的定义,据此,如果D-> F存在,则 d 应该是 超级键 这里不是这种情况。因此,我们将除以关系R。

现在,表R1和R2在BCNF中。关系 R1 有两个 候选人 一种,R1的琐碎功能依赖性,即A-> BCD和B-> ACD,对于BCNF成立,因为A和B是关系的超级键。关系 R2 拥有 d 就像它一样 候选键 并且功能依赖性D-> F对于BCNF也成立,因为D是超级密钥。

  1. 3NF声明,任何非素数属性都不能传递依赖于关系的候选键。另一方面,BCNF指出如果某个关系存在琐碎的功能依赖关系X-> Y;那么X必须是超级键。
  2. 可以在不牺牲关系依存性的情况下获得3NF。但是,获得BCNF时可能无法保留依赖性。
  3. 无需丢失旧表中的任何信息就可以实现3NF,而获得BCNF时,我们可能会丢失旧表中的一些信息。

结论:

BCNF比3NF的限制要多得多,这有助于进一步规范表格。 3NF中的关系具有最小的冗余,该冗余被BCNF进一步删除。