所以,我是数据库的新手,并且对数据库中的规范化感到困惑。 1NF 2NF 3NF和其他令人困惑的。有人可以为我提供 链接 或解释这些条款以及它们之间的区别。
如果您能提供一种简单的方法来记住这些,那将非常有帮助。
答案 0 :(得分:0)
规范化可以被视为一系列逐步设计的步骤,以处理表格“为了自己的利益而过于复杂”的方式。规范化的目的是减少数据库中发生异常的可能性
规范化对象:
(1)包含为数据库提供服务所需的所有数据
(2)尽可能少的冗余,
(3)为需要它们的数据类型提供多个值,
(4)允许有效更新数据库中的数据,以及
(5)避免在不知不觉中丢失数据的危险。
在所有级别和每个具有复杂性的表的情况下,问题的解决方案结果是建立两个或更多更简单的表,作为一个组包含与原始表相同的信息,但是因为他们更简单的个人结构,缺乏复杂性。
数据库规范化规则1 :消除重复组。为每组相关属性创建一个单独的表,并为每个表提供一个主要表键。
幼犬的非标准化数据项
•小狗号码
•小狗名字
•狗窝代码
•狗窝名称
•狗窝位置
•技巧ID
•技巧名称
•学习中的技巧
•技能水平
在原始数据列表中,每个小狗描述后面都是小狗学习的技巧列表。有些人可能知道10个技巧,有些人可能不知道。要回答“菲菲可以翻身吗?”的问题,我们首先要找到菲菲的小狗记录,然后扫描与记录相关的技巧列表。这是尴尬,低效,非常不整洁
将技巧转移到一个单独的表格中。从小狗信息中分离重复的技巧组导致第一范式。特技表中的小狗编号与小狗表中的主键匹配,提供用于将两个表与连接操作相关联的外键。现在我们可以通过直接检索来回答我们的问题,看看Fifi的小狗号码和“翻转”的技巧ID是否一起出现在特技表中。
第一范式:
小狗桌
小狗号码 - 主键号
小狗名字
犬舍名称
狗窝位置
特技表
小狗号码
技巧ID
技巧名称
学到的诀窍
技能水平
数据库规范化规则2 :消除冗余数据 a,如果属性仅依赖于多值键的一部分,请将其删除到一个单独的表。 对于知道它的每只小狗来说,技巧名称(例如“翻身”)似乎是多余的。只是骗取ID。
TRICK TABLE
小狗数字技巧ID技巧名称学习技能等级
52 27“翻身”16 9
53 16“鼻架”9 9
54 27“翻身”9 5
*注意,技巧名称仅取决于多值的一部分(技巧ID),即复合键。
在特技表中,主键由小狗号和技巧ID组成。这对于“学到的”和“技能水平”属性是有意义的,因为它们对于每个小狗 - 技巧组合将是不同的。但技巧名称仅取决于技巧ID。每次关联ID出现在特技表中时,相同的名称将显示为冗余。
第二范式
小狗桌
小狗号码
小狗名字
狗窝代码
犬舍名称
狗窝位置
技巧表
技巧ID
技巧名称
小狗,技巧
小狗号码
技巧ID
学到的诀窍
技能水平
假设你想重新分类一个技巧,即给它一个不同的技巧ID。必须为每一个知道这个伎俩的小狗做出改变。如果你错过了一些变化,你将会有几只小狗在不同的ID下使用相同的技巧,这是一个更新异常。
数据库规范化规则3 :消除不依赖于密钥的列。如果属性对密钥的描述没有贡献,请将它们删除到单独的表中
小狗桌
小狗号码
小狗名字
狗窝代码
犬舍名称
小狗表满足第一范式,因为in不包含重复组。它满足第二范式,因为它没有多值键。但关键是小狗号码,狗舍名称和狗窝位置只描述了一个狗窝,而不是小狗。要实现第三范式,必须将它们移动到单独的表中。由于它们描述了一个狗窝,因此狗窝代码成为新“狗窝”表的关键。
第三范式
小狗
小狗号码
小狗名字
狗窝代码
养犬
狗窝代码
犬舍名称
狗窝位置
技巧
技巧ID
技巧名称
小狗技巧
小狗号码
技巧ID
学到的诀窍
技能水平
其动机与第二范式相同。我们希望避免更新和删除异常。例如,假设Puppy Farm中没有小狗当前存储在数据库中。使用之前的设计,将不会有其存在的记录。