E1 和 E2 之间有什么区别,使得其中一个是 4NF,另一个是 5NF 示例?
由于 JD,非 4NF 和非 5NF 关系都表现出更新异常; 4NF 意味着二进制 JD 没有异常,5NF 意味着任何数量的 JD 都没有异常。维基百科示例标准化为 4NF 消除了二进制 JD——该关系是一个有问题的双向连接。 5NF 规范化消除了 3 路 JD——该关系是一个有问题的 3 路连接。 (由于它是从 4NF 开始的,所以它不可能有任何有问题的二进制 JD。)
关系(值或变量)在 5NF 中,当它可以无损分解(即连接回它的投影)(即相应的 JD(连接依赖)保持)时,组件可以按某种顺序连接回来,其中每个连接的公共列是原始连接的超键。 (Fagin 的 PJ/NF 论文的隶属度算法。)4NF 的定义是相同的,只是它可以无损分解为two投影很重要(即相应的 JD 是二进制的)(即相应的 MVD(多值依赖)成立)。
(具有这样的连接序列的这种允许的 JD 被称为“由 CK(候选键)隐含”。)
这个想法是,如果我们可以分解为连接回原始的投影,那么我们就应该分解,除非超级键上的连接不会导致任何问题/异常。
当 FD(函数依赖)S -> A 与属性集 R 存在关系时,该关系在 S U {A} 和 R - {A} 上可无损分解。因此 JD {S U {A}, R - {A}} 成立且 MVD S ->> {A} 成立。
From 该表采用哪种最高范式? https://stackoverflow.com/q/47729927/3404097
关系含义/谓词
另一方面,假设你知道关系的含义到
您知道它包含做出真实陈述的元组的程度
从一个(特征)谓词可以表示为合取
其他人说
ticket Ticket was submitted by a person with first name Vname
AND there is a person with name Vname Nname
AND ticket Ticket was submitted by a person with last name Nname
Join 的设计使得其输出的谓词是
其输入的谓词。所以你会知道检查是否有
原始的相应分解满足 JD (即
合取关系是否是
原件),以检查 JD 是否是原件所暗示的
CK。
归一化到更高 NF 的要点是,当
关系的谓词可以表示为其他和的合取
它们的关系是原始关系的投影,所以我们可以使用
相反,更简单的单独关系,除非我们也可以 JOIN/AND
成对共享 CK 上的关系/谓词,因为有
仍然没有更新异常。 (如果FD{x, ...} -> a
则保持一定的
MVD 持有 & 某个二元 JD 持有且谓词
关系可以表示为... AND a = f(x, ...)
.)