23

努力查看它们之间的差异。我知道我们说2NF是“全键”,3NF“只是键”。标准化 - 2NF与3NF

通过Smashery引用这个伟大的答案:What are 1NF, 2NF and 3NF in database design?

用于3NF的例子是完全一样2NF - 它是一个字段,它是依赖于只有一个关键属性。 3NF的例子与2NF的例子有什么不同?

感谢

+8

2NF违规是因为“课程名称”列取决于键的一部分(“CourseID”)。 3NF违规是因为'TeacherName'在功能上依赖于'TeacherID',但这不是密钥的一部分。 – 2011-05-16 20:40:44

+1

那么2NF中的桌子可以有'CourseID','Semester','#Places','TeacherID','TeacherName'?似乎奇怪的是'TeacherName'显然是'TeacherID'的重复数据。 – Marcus 2011-05-16 20:46:38

+4

是的。 2NF只关心部分密钥的功能依赖性。如果表格在1NF中,并且没有AFAIK的组合键,它将自动处于2NF。 – 2011-05-16 20:49:30

回答

9

假设某些关系满足形式A-> B的非平凡函数依赖关系,其中B是非最优属性。

2NF受到侵犯,如果A是不是超密钥而是一个候选键的真子集

3NF受到侵犯,如果A是不是超密钥

你已经发现了2NF的要求仅仅是一个特殊的3NF要求的案例(但不是特别特别)。 2NF本身并不重要。重要的问题是A是否是超级密钥,而不是A恰好是候选密钥的某个部分。

+0

+1,尽管我确实提出了一个答案,希望如果你的英语不够纯粹,可能会帮助伊戈尔K。 – Unreason 2011-05-17 09:20:24

+0

如果A既不是超级键也不是B是素数属性,则违反了3NF。 – 2016-07-24 07:47:03

2

您已经实现了3 NF当有键和其他列不依赖于它与无关。

不确定我的教授是否会这样说,但事实就是如此。

如果你是“在现场”。忘记定义。寻找“最佳实践”。一个是DRY:不要重复自己。

如果你遵循这个原则,你已经掌握了你需要NF的一切。

这里是一个例子。 表中有以下模式:

PERSONS : id, name, age, car make, car model 

年龄和名字都涉及到人的条目(=> ID),但该模型依赖于汽车,而不是人。

然后,你会在两个表中把它拆分:

PERSONS : id, name, age, car_models_id (references CAR_MODELS.id) 
CAR_MODELS : id, name, car_makes_id (references CAR_MAKES.id) 
CAR_MAKES : id, name 

可以在3FN具有复制在2FN但现在不是了。

规范化是关于非复制,一致性以及从另一个角度看外键和JOIN。

数据越规范化越好,但对性能没有好处,也不了解它是否真的太复杂。

+0

谢谢,我同意DRY原则,因此我惊讶地发现2NF中的数据重复。 – Marcus 2011-05-16 20:52:26

+1

“当密钥与其他列之间没有关系时,您已经实现了第3个NF。”我并不确定你的意思,但我确信这是错的。在3NF中与密钥和其他列之间没有“关系[原文]”无关! – sqlvogel 2011-05-17 05:56:18

+3

如果有人在建造桥梁的“现场”,你是否还会建议他“忘记引力定律”? – 2011-05-17 09:09:37

8

既然你问了一个关于existing so question的答案的非常具体的问题,这里是一个解释(基本上我会说什么dportas已经在他的答案,但用更多的话说)。

不在2NF而不在3NF中的设计示例并不相同。

是的,两种情况下的依赖关系都在单个字段上。

然而,在非2NF例如:

  • 依赖性在主键

而在非3NF例的部分(它是在2NF):

  • 依赖关系在不属于主键的字段上(并且还注意到,在e xample it 确实满足 2NF;这表明,即使你检查2NF你也应该检查3NF)

在这两种情况下,正常化您将创建这不会表现出更新的更新异常(如异常附加表:在2NF例如,如果您更新CoursenameIT101|2009-2,但不是IT101|2009-1会发生什么情况?您将得到不一致=无意义=不可用的数据)。

所以,如果你记住的钥匙,那么整个钥匙,除了包含2NF和3NF的钥匙,在规范化时应该适用于你。 2NF和3NF之间的区别对你来说可能看起来很微妙(问题是否在附加依赖关系中,数据所依赖的属性是候选关键字的一部分或者不是) - 以及它是 - 只是接受它。

6

2NF允许非首要属性是功能依赖于非黄金属性

3NF允许非首要属性是功能仅依赖超级钥匙

这样,当一个表是在3NF它是在2NF和3NF是严格比2NF

希望这有助于...

0

2NF如下部分依赖而3NF如下的传递函数相关。知道3NF必须在2NF并支持传递函数依赖是很重要的。