我有一个关系:
R4 = {{T,U,V}, {T → U, U → T, T → V}}
通过查看答案,我知道这种关系在 BCNF 中。
我正在经历严格确定这种关系所遵循的正常形式的过程。我很清楚为什么这种关系在 1NF 和 2NF 中,如果我假设它在 3NF 中,那么 BCNF 很容易遵循。
但是,3NF 的定义指出:
每个非主属性都非传递地依赖于表中的每个候选键。
但是,据我所知,{T}
和{U}
都是表的候选键,{V}
因此传递依赖于{U}
.
维基百科上有 3NF 的替代定义:
Carlo Zaniolo 在 1982 年给出了一个与 Codd 等价但表达方式不同的 3NF 定义。该定义表明一个表在 3NF 中当且仅当对于它的每个函数依赖 X → A,至少有一个以下条件成立:
- X 包含 A(即 X → A 是平凡的函数依赖)
- X 是一个超级键
- AX 的每个元素,即 A 和 X 之间的集合差,是一个素数属性(即,AX 中的每一列都包含在某个候选键中)
根据这个定义,这种关系显然在 3NF 中(所有的函数依赖都被“X 是一个超级键”覆盖)。
那么为什么会出现差异呢?我如何误用定义?请不要以我不想要的方式给我提供答案的捷径,除非您也帮助我理解为什么我的 3NF 应用(如所述)不准确。
错误在于您对传递依赖的理解。来自维基百科:传递依赖
但是,在您的情况下,(2)不成立:
因此
{V}
不传递依赖于{U}
。根据您提供的关系,对于 BCNF,我们知道
{T}
并且{U}
是功能上确定的候选键{V}
。如果{U}
不是候选键,但仍然是决定因素,则会发生传递依赖。