贴:
任何一本数据库书籍都有解释
第一范式(1NF;The First Normal Form)第一范式是最低的规范化要求,第一范式要求数据表不能存在重复的记录,即存在一个关键字。1NF的第二个要求是每个字段都不可再分,即已经分到最小,关系数据库的定义就决定了数据库满足这一条。主关键字达到下面几个条件:
1.    主关键字段在表中是唯一的
2.    主关键字段中没有复本
3.    主关键字段不能存在空值
4.    每条记录都必须有一个主关键字
5.    主关键字是关键字的最小子集满足1NF的关系模式有许多不必要的重复值,并且增加了修改其数据时疏漏的可能性。为了避免这种数据冗余和更新数据的遗漏,就引出了第二范式(2NF)。第二范式(The Second Normal Form)定义:如果一个关系属于1NF,且所有的非主关键字段都完全地依赖于主关键字,则称之为第二范式,简记为2NF。
为了说明问题现举一个例子来说明:有一个库房存储的库有四个字段(零件号码,仓库号码,零件数量,仓库地址),
这个库符合1NF,其中“零件号码”和“仓库号码”构成主关键字。
但是因为“仓库地址”只完全依赖与“仓库号码”,即只依赖于主关键字的一部分,所以它不符合2NF,
这样首先存在数据冗余,因为仓库数量可能不多。
其次,存在如果更改仓库地址时,如果漏改了某一记录,存在数据不一致性。
再次,如果某个仓库的零件出完了,那么这个仓库地址就丢失了,即这种关系不允许存在某个仓库中不放零件的情况。
我们可以用投影分解的方法消除部分依赖的情况,而使关系达到2NF的标准。
方法是从关系中分解出新的二维表,是每个二维表中所有的非关键字都完全依赖于各自的主关键字。
我们可以如下分解:分解成两个表(零件号码,仓库号码,零件数量)和(仓库号码,仓库地址)。
这样就完全符合2NF了。第三范式(The Third Normal Form)定义:如果一个关系属于2NF,且每个非关键字不传递依赖于主关键字,这种关系是3NF。
从2NF中消除传递依赖,就是3NF。比如有一个表(姓名,工资等级,工资额),其中姓名是关键字,
此关系符合2NF,但是因为工资等级决定工资额,这就叫传递依赖,它不符合3NF,
我们同样可以使用投影分解的办法分解成两个表:(姓名,工资等级),
(工资等级,工资额)。一般情况,规范化到3NF就满足需要了

解决方案 »

  1.   

    3NF通常被认为在性能、扩展性和数据完整性方面达到了最好平衡。简单来说,3NF 规
    定:
    · 表内的每一个值都只能被表达一次。
    · 表内的每一行都应该被唯一的标识(有唯一键)。
    · 表内不应该存储依赖于其他键的非键信息。
    遵守3NF 标准的数据库具有以下特点:有一组表专门存放通过键连接起来的关联数据。比方说,某个存放客户及其有关定单的3NF 数据库就可能有两个表:Customer 和Order。Order 表不包含定单关联客户的任何信息,但表内会存放一个键值,该键指向Customer 表里包含该客户信息的那一行。
    更高层次的标准化也有,但更标准是否就一定更好呢?答案是不一定。事实上,对某些项目来说,甚至就连3NF 都可能给数据库引入太高的复杂性。