我有以下表格:
Blogs { BlogName }
BlogPosts { BlogName, PostTitle }
博客文章根据6nf(根据第三个宣言)同时对实体和关系进行建模,这是无效的。
在6nf中,它将是:
Blogs { BlogName }
Posts { PostTitle }
BlogPosts { BlogName, PostTitle}
如果我想通过序列nbr(只是一个例子)订购博客文章,那将是另一个表
BlogPostsSorting { BlogName, PostTitle , SortOrder }
我是否正确?
答案 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)来完成没有排序的帖子的情况。