gpt4 book ai didi

database - 这张表是哪个最高范式?

转载 作者:搜寻专家 更新时间:2023-10-30 20:07:55 25 4
gpt4 key购买 nike

Ticket Vname Nname
1 Oli Seitz
1 Andi Hofmann
2 Oli Seitz
2 Oli Schmidt
2 Tim Schmidt
3 Tim Hofmann

此表表示人员 ( Vname, Nname) 和票证 ( Ticket) 的映射。 VnameNname一起标识一个人,但每个人 ( Vname, Nname ) 可以有多个工单 ( Ticket ),并且一个工单可以分配给多个人。

此表中的 PK 是所有三列一起。所以这个表应该是1NF,因为一列没有多维数据。

但后来我挣扎。我认为它是 2NF 和 3NF,因为我找不到任何功能依赖项。 (希望它们在英语和德语中都被称为功能性)

有人能解释一下这张表是哪个最高的 NF 吗?为什么?我必须改变什么才能在 5NF 中实现它?

注意:这不是家庭作业,这个问题来自讨论。

最佳答案

1NF(第一范式)

"1NF" has no standard meaning.

由于根据定义,关系每行每列有一个值,因此“一列中的多维数据”的概念没有意义。随意询问人们是否有意义。随意问他们所做的一切意味着什么。

归一化到更高的 NF(范式)

对更高 NF 的规范化与“1NF”唯一有关的是它们都试图简化以改进设计。

您的关系不满足任何重要的 FD(函数依赖)。所以它在 BCNF .

您的关系不满足任何重要的 MVD(多值依赖项)。即它不满足任何重要的二进制 JD(连接依赖项)。即,除了包含自身的一对之外,它不是任何一对投影的成员的连接。所以它在 4NF .您可以通过对投影进行连接并加入它们来看到这一点。您也可以通过应用 FD 和 MVD 的定义并识别它们,然后为它们应用推理规则来做到这一点。

您的关系满足非平凡的 JD *{{Ticket, Vname}, {Vname, Nname}, {Ticket, Nname}} .因此,它是其投影集合的成员的连接,而不是包含自身的集合。但是,它的 CK 并不暗示 JD。即没有其投影的连接链,其中每个连接的公共(public)属性都包括原始的CK。所以它不在 5NF .您可以通过获取一组投影并加入它们来看到这一点。没有算法可以确定关系比蛮力更能满足复杂性的非平凡 JD。

关系含义/谓词

另一方面,假设您知道该关系的含义,因为您知道它包含的元组从一个(特征)谓词中做出一个真实的陈述,该谓词可表达为其他人的合取,比如说

    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 的设计使其输出的谓词是其输入的谓词的 AND。因此,您将知道检查原始的任何相应分解是否满足 JD(即来自合取的关系是否是原始的投影),从而检查 JD 是否由原始的 CK 隐含。

对更高 NF 进行规范化的要点是,当关系的谓词可以表示为其他谓词的合取并且它们的关系是原始关系的投影时,JD 成立,因此我们可以使用更简单的单独关系代替,除非我们不妨 JOIN/AND 成对共享 CK 上的关系/谓词,因为仍然没有更新异常。 (如果 FD {x, ...} -> a 成立,则某个 MVD 成立,并且某个二进制 JD 成立,关系的谓词可以表示为 ... AND a = f(x, ...)。)

请注意,与 5NF 是为了减少更新异常的说法相反,事实证明它们在 ETNF 中消失了,它位于 BCNF 和 5NF 之间。但是 5NF 设计仍然更简单,因为以向谓词添加 AND 为代价的关系更少。请注意,很难找到持有的 MVD 和 JD,只是因为使用它们的设计在直觉上显然很糟糕,因此它们永远不会被提出,因为它们的谓词是其他谓词的合取。因此,与 5NF 不重要的说法相反,因为违反 JD 的情况很少见,5NF 是唯一重要的 NF。 (SQL 系统不支持处理 5NF 设计可能产生的所有完整性约束,因此无知导致人们声称应该满足于 3NF。)

您需要找到 NF 的定义以及它们为何重要。

更多关于 predicates & the relational model .

(我之所以回答这个问题,是因为即使在教科书中,所获得的智慧也是一团糟。)

附录

投影和连接。 (我本来打算把 Minimal, Complete, and Verifiable Example 留给你。但是京东控股被另一位回答者提出异议,所以 here is an sqlfiddle 。)
T
1 Oli Seitz
1 Andi Hofmann
2 Oli Seitz
2 Oli Schmidt
2 Tim Schmidt
3 Tim Hofmann

project Ticket, Vname (T)
1 Oli
1 Andi
2 Oli
2 Tim
3 Tim

project Vname, Nname (T)
Oli Seitz
Andi Hofmann
Oli Schmidt
Tim Schmidt
Tim Hofmann

project Ticket, Vname (T) join project Vname, Nname (T)
1 Oli Seitz
1 Oli Schmidt
1 Andi Hofmann
2 Oli Seitz
2 Oli Schmidt
2 Tim Schmidt
2 Tim Hofmann
3 Tim Schmidt
3 Tim Hofmann

project Ticket, Nname (T)
1 Seitz
1 Hofmann
2 Seitz
2 Schmidt
3 Hofmann

project Ticket, Vname (T) join project Vname, Nname (T)
join project Ticket, Nname (T)
1 Oli Seitz
1 Andi Hofmann
2 Oli Seitz
2 Oli Schmidt
2 Tim Schmidt
3 Tim Hofmann

关于database - 这张表是哪个最高范式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47729927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com