Database 归一化-2NF与3NF

Database 归一化-2NF与3NF,database,database-design,database-normalization,Database,Database Design,Database Normalization,努力发现他们之间的差异。我知道我们说2NF是“整把钥匙”,3NF是“除了钥匙什么都没有” 引用Smashery的这一伟大答案: 用于3NF的示例与2NF完全相同—它是一个仅依赖于一个键属性的字段。3NF的示例与2NF的示例有何不同 谢谢当键和其他不依赖它的列之间没有关系时,您已经获得了第三个NF 我不确定我的教授会这样说,但事实就是这样 如果你“在现场”。忘了定义吧。寻找“最佳实践”。一个是干的:不要重复你自己 如果你遵循这个原则,你已经掌握了NF所需要的一切 这里有一个例子。 您的表具有以下架

努力发现他们之间的差异。我知道我们说2NF是“整把钥匙”,3NF是“除了钥匙什么都没有”

引用Smashery的这一伟大答案:

用于3NF的示例与2NF完全相同—它是一个仅依赖于一个键属性的字段。3NF的示例与2NF的示例有何不同


谢谢

当键和其他不依赖它的列之间没有关系时,您已经获得了第三个NF

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

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

如果你遵循这个原则,你已经掌握了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
您可以在2FN中进行复制,但不再在3FN中进行复制

规范化是关于非复制、一致性以及从另一个角度来看外键和联接的


规范化程度越高,对数据越好,但如果数据变得太复杂,对性能和理解就越不利。

假设某个关系满足形式a->B的非平凡函数依赖,其中B是非基本属性

如果A不是超级键,而是候选键的适当子集,则违反2NF

如果A不是超级键,则违反3NF


您已经发现,3NF需求只是2NF需求的一个特例(但实际上并不特别)。2NF本身并不十分重要。重要的问题是A是否是一个超级键,而不是A是否恰好是候选键的一部分。

因为你问了一个关于答案的非常具体的问题,这里是对这一点的解释(基本上我会说dportas在他的答案中已经说过了什么,但用更多的词)

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

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

然而,在非2NF示例中:

  • 依赖项位于主键部分
在非3NF示例中(在2NF中):

  • 依赖项依赖于不是主键一部分的字段(请注意,在该示例中,确实满足2NF;这表明即使检查2NF,也应该检查3NF)
在这两种情况下,为了规范化,您将创建不会显示更新异常的附加表(更新异常的示例:在2NF示例中,如果您为
IT101 | 2009-2
更新
Coursename
,而不是为
IT101 | 2009-1
,您将得到不一致的=无意义的=不可用的数据),会发生什么情况

所以,如果你记住了关键点,整个关键点,除了涵盖2NF和3NF的关键点之外,什么都不记得,这在规范化的实践中应该对你有用。2NF和3NF之间的区别对您来说可能很微妙(问题是,在附加的依赖关系中,数据所依赖的属性是否是候选键的一部分),而且,是的,所以接受它

2NF允许非素数属性在功能上依赖于非素数属性

但是

3NF允许非素数属性在功能上仅依赖于超级键

因此,当一个表在3NF中时,它在2NF中,并且3NF比2NF更严格


希望这有帮助……

2NF遵循部分依赖,而3NF遵循传递函数依赖。重要的是要知道3NF必须在2NF中并支持传递函数依赖关系。

2NF冲突是因为
课程名称
列依赖于部分键(
CourseID
)。3NF冲突是因为
TeacherName
在功能上依赖于
TeacherID
,但这不是键的一部分。因此,2NF中的表可以有
CourseID
学期
位置
TeacherID
TeacherName
?考虑到
TeacherName
显然与
TeacherID
中的数据重复,似乎有些奇怪。是的。2NF只涉及部分键的函数依赖关系。如果该表为1NF,并且没有复合键,则自动为2NF。@Martin我认为您的快速评论应该得到正确的答案,但如果没有它作为实际答案,我无法将此奖励给您!说“TeacherName在功能上依赖于TeacherID”是一回事。说“TeacherName显然是TeacherID的重复数据”是完全不同的事情。如果你能理解其中的差异,那就太好了。谢谢,我同意DRY原则,因此我对2NF中的重复数据感到惊讶。“当键和其他列之间没有关系时,你已经达到了第三个NF。”我不确定你说的这句话是什么意思,但我很确定这是错的。在3NF中与键和其他列之间没有“关系[sic]”无关!如果有人“在领域”,比如说,建造桥梁,你会建议他“忘记”引力定律的定义吗?用户753136,你真的不明白欧文评论的意义吗?工程师应该知道定义作用在桥梁上的力的公式。没有这些知识,他可以猜测它什么时候会破裂,但他不能确定。类似地,NFs是一种针对一组依赖项评估数据库设计准确性的正式方法。数据库设计中的冗余可能非常微妙,简单地说“干”不足以确保识别出所有可能的问题。你关于“忘记定义”的建议毫无帮助。为什么无知会有什么好处?@user753136,你的a