我和AB有R(A,B,C,D)
主键和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的关系:
广告->C
B->D类
然后我们的主键是ab,简单地说,2nf处理部分依赖,也就是说,当一个属性依赖于主键的一部分时。(所以如果我们有一个主键,它只是一个属性,而关系r已经在2nf中了!)
正式地:
给定关系r的函数依赖x->a,其中:
x是r的一组属性
a是非素数属性,不在x中
那么在2nf中,x不应该是任何键的适当子集。
回到我们的例子。主键是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的集合是:
广告->C
AB->D型
我们的主键仍然是ab,但现在关系r是第二正规形式。