设计 - 第六范式

时间:2011-09-24 18:05:02

标签: sql relational-database normalization database-normalization 6nf

我有以下表格:

Blogs { BlogName }
BlogPosts { BlogName, PostTitle }

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

在6nf中,它将是:

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

如果我想通过序列nbr(只是一个例子)订购博客文章,那将是另一个表

BlogPostsSorting { BlogName, PostTitle , SortOrder }

我是否正确?

2 个答案:

答案 0 :(得分:6)

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

  

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

你能否告诉我你认为“第三宣言”说这是无效的。我确定没有,但我想知道你是如何得出这样的结论的。

答案 1 :(得分:4)

sqlvogel是正确的in this answer

除了这个小细节之外:Blogs是否冗余取决于您是否希望/需要强制约束所有Blogs元组必须至少具有一个相应的BlogPost元组。你没有陈述任何明确的内容。

同样适用于您的第三个relvar帖子,除了在这种情况下,它不太可能对PostTitle存在有效,而不会显示为至少一个BlogPost的标题。

您是否需要将SortingOrder relvar作为额外的一个取决于是否可以存在不需要排序顺序的BlogPosts。如果没有,那么您的SortingOrder relvar只是替换了BlogPosts。如果有,那么你可以拥有两个relvars;或者您仍然可以使用SortingOrder relvar,并通过使用虚拟值(例如,始终为-1)来完成没有排序的帖子的情况。