首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >3NF Vs 2NF,哪个更严格?

3NF Vs 2NF,哪个更严格?
EN

Database Administration用户
提问于 2010-02-01 21:48:09
回答 3查看 5.4K关注 0票数 2

其中哪一个是正确的:

  1. 如果一个表是第二范式,那么它必须是第三范式。
  2. 如果一个表是第三范式,那么它必须是第二范式。

我知道只有一个是正确的,如果这是第一个,这是合理的。如果是第二个-对我来说没有任何意义。也许是个例子?

EN

回答 3

Database Administration用户

发布于 2010-02-01 21:59:17

3NF中的数据库也在2NF中。简单的助记符是:

  • 关键
  • 整把钥匙
  • 除了钥匙什么都没有
  • 所以帮我科德

2NF声明表不包含逻辑上是主键一部分的函数的字段。3NF表示,表不包含逻辑上属于表中任何字段的函数的字段,而是包含“整体”键的字段。3NF可以看作是2NF的一种专门化。

票数 10
EN

Database Administration用户

发布于 2010-02-01 21:56:34

NFs应该类似于增量需求。要成为2NF,它必须是1NF,并遵循一些更多的限制。要成为3NF,必须是2NF,并遵循一些更多的限制。每个NF都是“先前”NF的一个专门化。

以下是3NF的几个定义:

来自about.com的定义:为了处于第三范式,关系必须首先满足第二范式的要求。此外,必须消除所有不依赖主键的属性。

维基百科的定义

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

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

所以,3NF也必须是2NF。

票数 6
EN

Database Administration用户

发布于 2010-02-01 21:50:37

如果一个表是3NF,那么它肯定在2NF中,但反之亦然。

虽然至少有5NF,但这仍然有效。理论上,6NF对7NF也应该是正确的,但至少在我最后一次听到的时候,很难肯定地说7NF --包括即使用给定的数据集证明数据集是否在7NF中,如果不是,也很难将它转换为7NF。

编辑: 3NF对2NF的具体情况:

首先,你是对的,这两种形式显然不是建立在彼此之上的,就像大多数其他的普通形式一样。2NF只处理一个复合键(即至少有两个列作为表的键),但是有一个真正只适用于该键的一部分的关联字段。经典的例子是一行,包括“部件#,数量,制造商,部门,部门地址”,其中“部分#”和“制造商”被视为关键。在这种情况下,部门和部门地址实际上只适用于制造商,因此要将数据放入2NF中,您应该将数据分成两个表,一个以“部件#、数量、制造商”(和“部件#”为关键),另一个表“制造商”、“部门”和“部门地址”(以制造商为键)。这样,您就只有一份关于部件源的数据副本,而不管您从它们那里购买了多少部件。

这将数据转换为第二范式,而不是第三范式。3NF要求每个非键字段提供一个关于密钥的事实。在上述情况下,制造商可以有多个部门,每个部门都有自己的地址。尽管数据是第二范式,但除法地址提供了一个关于除法的事实,这是一个非键字段。要将数据转换为3NF,我们有两种选择:我们可以将制造商和部门视为一个复合密钥,地址是关于整个密钥的事实,或者我们可以将地址分离到另一个表中,因此我们最终得到一个表,其中一个表给出了制造商和部门,另一个表给出了部门和部门地址。

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

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

复制
相关文章

相似问题

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