其中哪一个是正确的:
我知道只有一个是正确的,如果这是第一个,这是合理的。如果是第二个-对我来说没有任何意义。也许是个例子?
发布于 2010-02-01 21:59:17
3NF中的数据库也在2NF中。简单的助记符是:
2NF声明表不包含逻辑上是主键一部分的函数的字段。3NF表示,表不包含逻辑上属于表中任何字段的函数的字段,而是包含“整体”键的字段。3NF可以看作是2NF的一种专门化。
发布于 2010-02-01 21:56:34
NFs应该类似于增量需求。要成为2NF,它必须是1NF,并遵循一些更多的限制。要成为3NF,必须是2NF,并遵循一些更多的限制。每个NF都是“先前”NF的一个专门化。
以下是3NF的几个定义:
来自about.com的定义:为了处于第三范式,关系必须首先满足第二范式的要求。此外,必须消除所有不依赖主键的属性。
维基百科的定义:
第三范式(3NF)是一种用于数据库规范化的规范形式。3NF最初由E.F. Codd1于1971年定义。Codd的定义指出,表在3NF中的当且仅当以下两种条件都成立:
所以,3NF也必须是2NF。
发布于 2010-02-01 21:50:37
如果一个表是3NF,那么它肯定在2NF中,但反之亦然。
虽然至少有5NF,但这仍然有效。理论上,6NF对7NF也应该是正确的,但至少在我最后一次听到的时候,很难肯定地说7NF --包括即使用给定的数据集证明数据集是否在7NF中,如果不是,也很难将它转换为7NF。
编辑: 3NF对2NF的具体情况:
首先,你是对的,这两种形式显然不是建立在彼此之上的,就像大多数其他的普通形式一样。2NF只处理一个复合键(即至少有两个列作为表的键),但是有一个真正只适用于该键的一部分的关联字段。经典的例子是一行,包括“部件#,数量,制造商,部门,部门地址”,其中“部分#”和“制造商”被视为关键。在这种情况下,部门和部门地址实际上只适用于制造商,因此要将数据放入2NF中,您应该将数据分成两个表,一个以“部件#、数量、制造商”(和“部件#”为关键),另一个表“制造商”、“部门”和“部门地址”(以制造商为键)。这样,您就只有一份关于部件源的数据副本,而不管您从它们那里购买了多少部件。
这将数据转换为第二范式,而不是第三范式。3NF要求每个非键字段提供一个关于密钥的事实。在上述情况下,制造商可以有多个部门,每个部门都有自己的地址。尽管数据是第二范式,但除法地址提供了一个关于除法的事实,这是一个非键字段。要将数据转换为3NF,我们有两种选择:我们可以将制造商和部门视为一个复合密钥,地址是关于整个密钥的事实,或者我们可以将地址分离到另一个表中,因此我们最终得到一个表,其中一个表给出了制造商和部门,另一个表给出了部门和部门地址。
https://dba.stackexchange.com/questions/12775
复制相似问题