首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不同版本的3NF?

不同版本的3NF?
EN

Stack Overflow用户
提问于 2022-05-01 14:52:15
回答 1查看 74关注 0票数 1

我有一个问题,关于3NF的定义,由Chris在他的书“数据库设计和关系理论”,第78页。

书中给出的定义是:“对于每个非平凡的FD X -> Y,无论X是超级键还是Y是子键,都是3NF当且仅当的。”

(对于日期,"Y是子键“意味着Y包含在候选键中,并且在日期定义中没有假设集合Y的基数。)

然而,在我看来,这个定义并不等同于通常的定义(在其他引用中可以找到),即"R在3NF中,如果对于每个FD X -> Y,FD是琐碎的,或者X是超级键,或者Y\X中的每个元素都包含在候选键中“。

现在考虑具有5个属性R(A、B、C、D、E)的relvar,其FD覆盖如下:

代码语言:javascript
复制
{A,B} -> C,
{C,D} -> E,
E -> B

这意味着{A,E} -> {B,C}。R的候选密钥是K1 = {A,B,D},K2 = {A,C,D}和K3 = {A,E,D},因此,如果使用日期的定义,则FD {A,E} -> {B,C}表明R不在3NF中。

但是,如果我们使用“通常”定义(因为每个属性实际上都包含在候选键中),那么它是在3NF中。

有什么我不明白的吗?还是日期真的使用了3NF的另一个定义(比通常的定义更强)?

EN

回答 1

Stack Overflow用户

发布于 2022-05-01 22:00:34

日期定义说:"Y是子键,意思是Y包含在键中,.“。

“通常的定义”(从哪里得到的)表示“否则Y\X中的每个元素都包含在一个键中”。

然后他们都说"Y .包含在钥匙里“。

您可以等效地将{A,E} -> {B,C}写成两个FDs {A,E} -> {B}; {A,E} -> {C}。现在,每个Y\X都“包含在候选密钥中”。

因此,您似乎在抱怨“Y中的每个元素”的措辞,其中的日期定义并不是明确的(?)或者可能是,你还没有完整地引用日期呢?

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72077768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档