首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >3NF需要2NF吗?

3NF需要2NF吗?
EN

Database Administration用户
提问于 2014-04-27 15:24:53
回答 3查看 4.9K关注 0票数 2

我有点搞不懂3NF的定义。

根据维基百科:

第三范式(3NF)是一种用于数据库规范化的规范形式。3NF最初由E.F. Codd于1971年定义。Codd的定义指出,表在3NF中的当且仅当以下两种条件都成立:

  • 关系R(表)是第二范式(2NF)。
  • R的每一个非素属性都是非传递依赖于R的每个超键的。

但是,根据亚伯拉罕·西尔伯沙茨著的“数据库系统概念第六版”一书,Henry F.Korth,S.Sudarshan:

关系模式R相对于一组函数依赖集(3NF)是第三范式(3NF),如果对于表单F+的α→β中的所有功能依赖项,其中α⊆R和β⊆R至少有以下一项:

  • α→β是一个微不足道的函数依赖项。
  • α是R.
  • β−α中的每个属性A都包含在R的候选密钥中。

此外,根据Ramez Elmasri Shamkant B. Navathe的数据库系统第6版:

关系模式R是第三范式(3NF),如果当一个非平凡函数依赖X→A在R中保持时,(a) X是R的超键,或者(b) A是R的素数属性。

在阅读了上述定义之后,我不确定一个关系模式是否必须在2NF中才能在3NF中。另外,关系模式必须在3NF中才能在BCNF中吗?

EN

回答 3

Database Administration用户

回答已采纳

发布于 2014-04-28 03:58:08

规范形式是以这样一种方式指定的,即对于任何正常形式,模型也满足低编号范式的标准。所以,是的,如果你的模型是第三范式,它也是第二范式和第一范式。

当对模型进行规范化时,您通常会在下一个范式之前解析一个范式。这使得标准化更简单,错误也更少,因为您只是在时间上应用了几个规则。有可能,处于较低范式的实体也处于较高的范式中。大多数第三范式实体也是第四和第五范式。

第四、第五和第六范式超越了功能依赖。在适用的情况下,它们进一步简化了数据,而牺牲了更多的表格。它们减少了冗余,提高了数据的完整性。

票数 4
EN

Database Administration用户

发布于 2014-04-28 07:23:46

是的,Korth对3NF的定义意味着2NF。

假设有关系书

书籍{ pub_id,auth_id,publisher_name,author_name}

使用一组函数依赖项:

pub_id -> publisher_name auth_id -> author_name

这里的候选密钥是{pub_id, auth_id}

显然,这种关系不在2NF中,因为publisher_name依赖于pub_id,后者是候选键的子集(因此它在功能上并不完全依赖于唯一的候选键)。

现在,让我们尝试应用Korth对3NF的定义。

  • 这两个FDs都不是微不足道的。
  • {pub_id}{auth_id}也不是超级密钥。
  • 但是,这两个属性实际上都包含在候选键中。

因此,即使不存在传递依赖关系,这种关系也不存在于3NF中。

此外,如果我们试图将这种关系正常化为3NF,我们将被迫将这种关系分解如下:

出版商{ pub_id,publisher_name} 作者{auth_id,author_name}

这相当于图书的2NF分解。

票数 1
EN

Database Administration用户

发布于 2014-04-28 10:15:11

通过尝试实现2nf和3nf,您可能会有一个更好的主意。在实时中,您不能区分这两者,因为它们是同时发生的。当你是2nf-ing,你就不能停在那里,如果它没有定义主键或超级键的话,w3nf本身就不是了。

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

https://dba.stackexchange.com/questions/64011

复制
相关文章

相似问题

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