6

我有以下表格:

Blogs { BlogName }
BlogPosts { BlogName, PostTitle }

博客文章同时建模一个实体和一个关系,根据 6nf(根据第三个宣言)无效。

在 6nf 中,它将是:

Blogs { BlogName }
Posts { PostTitle }
BlogPosts { BlogName, PostTitle}

如果我想按顺序排列博客文章 nbr(只是一个例子),那将是另一个表

BlogPostsSorting { BlogName, PostTitle , SortOrder }

我说的对吗?

4

2 回答 2

6

你的桌子的钥匙是什么?根据列名,我猜 BlogPosts 的键只能是 {BlogName,PostTitle}。在这种情况下,BlogPosts 已经在 6NF 中——它没有非主属性,因此不能进行非损失分解。Blogs relvar 和 Posts relvar 是多余的——你不需要它们。

博客文章同时建模一个实体和一个关系,根据 6nf 无效(根据第三个宣言)

你能告诉我你认为第三宣言在哪里说这是无效的吗?我敢肯定不是,但我想知道你是如何得出这样的结论的。

于 2011-09-24T19:58:45.067 回答
4

sqlvogel在这个答案中是正确的。

除了这个小细节:Blogs 是否冗余取决于您是否想要/需要强制执行一个约束,即所有 Blogs 元组必须至少具有一个对应的 BlogPost 元组。你没有说明任何事情来说明这一点。

这同样适用于您的第三个 relvar 帖子,除了在这种情况下,如果 PostTitle 不作为至少一个 BlogPost 的标题出现,它是极不可能存在的。

是否需要将 SortingOrder relvar 作为额外的关联变量取决于是否存在不需要排序顺序的 BlogPost。如果不能,那么您的 SortingOrder relvar 会简单地替换 BlogPosts。如果可以,那么您可以拥有两个 relvar;或者,您仍然可以只使用SortingOrder relvar,并通过使用虚拟值(例如,始终-1)在不排序的情况下破解帖子。

于 2011-09-25T17:35:03.940 回答