gpt4 book ai didi

database - DBMS 中的第三范式

转载 作者:搜寻专家 更新时间:2023-10-30 23:44:15 26 4
gpt4 key购买 nike

我刚刚阅读了 DBMS 中 3NF 的定义,它指出:

函数依赖 X --> A 是允许的,如果:1. X 是 super 键。2. A 是某个键的一部分。

我有两个疑问:

a:我不明白第二个条件对消除异常有何用处。为什么有 BCNF 形式,相反我们可以定义 3NF 形式来不具有第二个条件。

我明白要移除传递依赖。如果 Y --> Z 并且 X 是主键。然后存在传递依赖,因为 X --> Y --> Z 意味着我们不能存储 (X,Y) 的值,除非我们知道 Z。

b:请解释移除 3NF 中的第二个条件将如何移除异常和/或限制冗余。

最佳答案

“函数依赖 X --> A 是允许的,如果:1. X 是一个 super 键。2. A 是某个键的一部分。”

您定义的第二个条件错误A 应该是一个非素数 属性(即它不应该是满足 3NF 的 key 的一部分)。

事实上,理解 3NF 的更好方法是 -
给定函数依赖 X->Y 如果 Y 是一个非素数 属性然后 X 必须是 superkey
(请注意,这确保没有传递依赖)

另一方面 BCNF 是-
对于 每个 函数依赖 X->Y 左侧 (X) 必须是一个 super 键(无论右边(Y)是质数还是非质数都没有关系)

现在你的第一个疑问

“为什么有 BCNF 形式,而不是我们可以定义 3NF 形式来不具有第二个条件?”是的,如果你去掉 3NF 的第二个条件(即 Y 应该是非素数属性)则等价于 BCNF。但是你为什么要这样做呢? 有时您无法减少与 BCNF 的关系(因为并不总是能够获得保留依赖关系的 BCNF 分解),那么将其减少到 3NF 至少会更好然后让它在 2NF 中

例如-

R=(J,K,L)
F={JK->L,L->K}

这里我们有 2 个候选键 - JKJL 并且 R 不在 BCNF 中。 R 的任何分解都无法保留 JK->L。这意味着对 JK->L 的测试需要连接。所以有些情况下 -

  • BCNF 不保留依赖关系,并且
  • 有效检查更新的功能依赖违规很重要

解决方案:定义一个较弱的范式,称为 3NF。 3NF 中始终存在无损连接、保留依赖关系的分解。

我真的不明白你的第二个疑问 - “...3NF 如何消除异常和/或限制冗余”。 3NF 将消除冗余购买,消除任何传递依赖!

This也可能有一些帮助。

关于database - DBMS 中的第三范式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30982590/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com