当我遇到这个我认为错误的例子时,我正在阅读我的演讲幻灯片。我的讲师无法澄清。如果我能得到一些澄清,我将不胜感激。
R = (A, B, C)
Functional Dependencies = (A -> B, B -> A)
该例子表明,上述的最高正常形式是1NF,因为A-> B形成部分依赖。
我的解决方案
AC -> BC (via augmentation axiom)
BC -> AC (via augmentation axiom)
(A,C) and (B,C) are minimal keys and (A, B, C) are prime attributes.
我是否正确地这样说:
If (A,C) is the primary key, A -> B is NOT partial FD as RHS is a prime
attribute. B -> A is a non trivial FD as LHS is not a candidate key.
我的讲师的解释是,如果选择(A,C)作为主键,我们不必将(B,C)视为关键,如果是这样,B不是主要属性,因此部分依赖性站立
假设给定的函数依赖关系是关系模式的所有函数依赖关系的掩盖,所呈现的模式在3NF中,如您所发现的。事实上,唯一的候选键是(A, C)
和(B, C)
,所以每个属性都是素数,并且根据定义,关系是3NF。 (注意,prime属性取决于候选键,而不是主键)。
一般来说,X → Y
中的依赖关系F+
(关系的依赖关系集的闭包)被称为partial,如果Y
也依赖于X
的适当子集。 (更确切地说,Y
被部分地依赖于X
。)如果每个非素数属性完全依赖于每个候选键,则关系是第二范式。在这种情况下,你是正确的说A → B
是一个非部分依赖(但不是因为B
是一个主要属性。例如,B不完全依赖于候选键A C
(因为存在部分A C → B
中的依赖性F+
。然而,事实上,B
是一个主要属性意味着模式是2NF。
换句话说,考虑到先前对部分依赖的定义,关于这部分问题:
我是否正确地这样说:
If (A,C) is the primary key, A → B is NOT partial FD as RHS is a prime attribute. B → A is a non trivial FD as LHS is not a candidate key.
我们可以说:
{A}
子集可以确定B
。{A}
不是{B}
的子集。作为最后的注释,这种关系不是Boyce-Codd Normal Form。尊重正常形式的分解是R1(A, B)
,R2(A C)
。