![]() |
1
2
非4nf&non-5nf关系由于jds而出现更新异常;4nf表示二进制jds&5nf没有异常,表示任何arity的jds没有异常。维基百科的4nf规范化示例去掉了二进制jd——这种关系是一个有问题的双向连接。对5nf的规范化消除了一个3路JD——这种关系是一个有问题的3路连接。(因为它是在4nf中启动的,所以它不可能有任何问题的二进制JD。) 关系(值或变量)在5nf中,当它可以以各种方式无损分解(即转换为连接回它的投影)(即相应的jd(连接依赖项)保持)时,组件可以以某种顺序连接回,其中每个连接的公共列是原始连接的超键。(法金的pj/nf纸的成员算法)4nf的定义是相同的,除了它可以无损分解为 二 预测很重要(即对应的JD是二进制的)(即对应的MVD(多值依赖关系)持有)。 (这种允许的JD具有这样的连接序列被称为“由CKS(候选密钥)隐含的”)。 我们的想法是,如果我们能够分解成连接回原始的投影,那么我们应该这样做,除非超键上的连接不会导致任何问题/异常。 当fd(函数依赖项)s->a与属性集r保持关系时,该关系可以在s u a&r-a上无损分解。所以JD S U A,R A Holds&MVD S->A Holds。 从 Which highest normal form is this table in?
|
![]() |
2
1
区别并不重要,因为4NF本身并不重要,除非您对数据库设计理论的历史感兴趣。 5nf要求表满足的每个连接依赖项(jd)必须由该表的超级键隐含。4NF只涉及多值依赖(MVD)的概念,但由于MVD总是意味着存在相应的JD,因此根本不需要关注4NF。4nF的存在的历史原因是它碰巧是先被发明的,然后被5nF有效地取代,就像3nF被eknf/bcnf取代一样。 |
![]() |
3
0
这里还有一个问题需要澄清5nF的性质,它还有一个更实际的例子需要参考: How to understand the 5th Normal Form? . 把这里给出的更抽象的答案放在另一个问题的“实际案例”旁边可能会有所帮助。 |
![]() |
Community wiki · SQL语法新手 1 年前 |
![]() |
KateMak · 是否将多行中的多列与唯一id组合? 1 年前 |
![]() |
Karuna · SQL中列内的筛选器[重复] 1 年前 |
![]() |
Irvan Affandy · 为另一个选择选择声明的键 1 年前 |
![]() |
Community wiki · 这个MySQL语句出了什么问题? 1 年前 |
![]() |
Community wiki · 优化从同一表中提取的多列的查询 1 年前 |