我有 R(A,B,C,D) 和 AB 主键和AD --> C
我认为它在 2nf 中,因为你不能用 AB 的子集确定 C 来自 wiki “如果表在 1NF 中并且没有非主要属性依赖于表的任何候选键的任何适当子集,则该表在 2NF 中”
但是很多人说是在1nf中因为定义 “在 2NF 中,如果它在 1NF 中并且表的每个非主要属性都依赖于每个候选键的整体” 所以 AD 不是整个主键,而只是另一个属性不是质数的一部分
如果你也可以放一些与维基百科不同的引用资料,这样我就可以证明我的论文是否真的正确
最佳答案
您声明 AB 是给定关系 R 的主键。要实现这一点,除了 AD->C 之外,还必须至少有一个函数依赖。
为了解释 2NF,我假设缺少的 FD 是 B->D。所以我们有 R(A,B,C,D) 与 FD 的关系:
AD->C
B->D
那么我们的主键是AB。现在简单来说,2NF 处理部分依赖,即当属性依赖于主键的一部分时。 (所以如果我们有一个主键,它只是一个属性,那么关系 R 已经在 2NF 中了!)
正式地:
给定关系R的函数依赖X->A,其中:
- X 是R 的一组 属性
- A 是不在 X 中的非素数属性
然后在 2NF 中,X 应该不是任何 key 的真子集。
回到我们的例子。主键是 AB。所以主要属性是A 和B。非主要属性是 C 和 D。
让我们考虑第一个 FD,AD->C
这里的 C 是一个非主要属性。为了不违反 2NF 条件,AD 应该不是主键 AB 的真子集。 AD 不是 AB 的真子集,因此不违反 2NF 条件。
我们看下一个FD,B->D
这里 D 是一个非主属性,B 是主键 AB 的真子集,因此它违反了 2NF 条件。
因此关系 R 不符合第二范式。
另一方面,如果 R 的 FD 集是:
AD->C
AB->D
我们的主键仍然是 AB 但现在关系 R 是第二范式。
关于sql - 2nf 第二范式困难练习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35661394/