【发布时间】:2020-08-08 07:42:54
【问题描述】:
如果有关系:
studentColor(studentNumber, favouriteColor)
我有这个依赖:
studentNumber -> favouriteColor
所以这意味着一个学生只能有一种喜欢的颜色,但是很多学生可以选择一种喜欢的颜色,所以我理解存在多值依赖:
favouriteColor ->> studentNumber
所以这个关系只能在BCNF中。
但我想知道,如果它:
studentNumber -> favouriteColor
favouriteColor -> studentNumber
这意味着如果一个颜色被学生选择了,它就不能再被选择了,所以这里没有任何多值依赖。 因为我听说一个关系需要满足这些规则才能在 4NF 中
它应该是 Boyce-Codd 范式 (BCNF)。 该表不应该有任何多值依赖。
这是否意味着它在 4NF 中?
【问题讨论】:
-
(预制评论:)您的“我有这些 FD”没有意义。 “这些都是持有的FD”?--不可能。 “这些都是持有的不平凡的FD”?--不可能。 “这些是一些持有的FD”?--问题无法回答。找出什么是 cover 以及应用特定定义/规则/算法的确切条件。要确定 CK 和 NF,我们必须得到构成掩护的 FD。有时是最小/不可约覆盖。并且必须给出所有属性的集合。 See this answer.
-
“BCNF [...] 不应有任何 MVD”为假。每当有 FD 时,就有一定的 MVD,因为 x->y 意味着 x->>y。查找、引用和使用 BCNF、4NF、FD 和 MVD 的定义。这也不清楚。特别是不清楚你到底从什么开始,你的总体主张是什么,你的中间主张是什么以及你对每个先前主张的主张的理由是什么。解释为什么“如此”。请编辑清楚。使用足够多的单词、句子和对部分示例的引用来清楚完整地表达你的意思。 PS 只有某些 FD 违反 BCNF,只有某些 MVD 违反 4NF。
-
您对持有 MVD 的含义有一些误解。 studentNumber -> favouriteColor 意味着 studentNumber -> favouriteColor。但是你错误地认为它成立并且如果它成立那么 4NF 不成立。 (事实上,违反 BCNF 必须有重叠的 CK。) PS 为了简单地重新推理 MVD,请使用这些:给定的 MVD 保持当夫/当某个 JD 存在;一个给定的 JD 持有当且仅当一个关系值/变量是某些其他人的连接;
r JOIN s是满足r(...) AND s(...)的元组; x->y in r iff/whenr(...) IMPLIES y=f(x), 即 iff/whenr(...)是p(...) AND y=f(x)。
标签: database-normalization functional-dependencies bcnf