数据库设计--三范式

 一般地,在进行数据库设计时,应遵循三大原则,也就是我们通常说的三大范式,使用三范式可以避免数据的冗余,而且在更新表操作时,只需要更新单张表就可以了。

三范式介绍

第一范式(The First Normal Form,1NF),符合原子性,字段(属性)是不可分割的。

第二范式(The Second Normal Form,2NF),消除部份依赖。即:一张表存在组合主键时,其他非主键字段不能部分依赖。

第三范式(The Third Normal Form,3NF),消除传递依赖。即:其他非主键字段必须依赖主键。

第一范式

要求对属性的原子性,也就是说要求数据库中的字段需要具备原子性,不能再被拆分

eg:学生表中有字段:学生 ID、学生名、电话;而其中电话又可以分为:家庭电话和移动电话等。因此,此表不符合第一范式,如下图所示:

不符合第一范式

 

符合第一范式

 

第二范式

例如学生信息详情表有学生 ID、老师 ID、学生姓名、老师姓名这些字段。其中,学生 ID和老师 ID 为联合主键,但这个表中的"学生姓名"字段只依赖学生 ID,和老师 ID就没有任何关系了,因此这个表也不符合第二范式。我们可以拆分为学生表和老师表,其中学生表包含:学生 ID、老师 ID、学生姓名等字段;而老师表包含:老师 ID、老师姓名等字段。这样就消除了老师姓名多次重复出现的情况了,从而避免了冗余数据的产生。

不符合第二范式

符合第二范式

第三范式

想要满足第三范式必须先满足第二范式,第三范式要求所有的非主键字段必须直接依赖主键,且不存在传递依赖的情况。

例如,有一个学生表中包含了:学生 ID、学生姓名、老师 ID、老师姓名等字段。这个表的所有字段(除去主键字段)都完全依赖唯一的主键字段(学生 ID),所以符合第二范式。但它存在一个问题,老师姓名依赖非主键字段老师 ID,而不是直接依赖于主键,它是通过传递才依赖于主键,所以不符合第三范式。

我们可以把学生表分为两张表,一张是学生表包含了:学生 ID、学生姓名、老师ID等字段;另一张为老师表包含了:老师 ID、老师姓名等字段,这样就满足第三范式的要求了。

不符合第三范式

 符合三范式

 

posted @ 2019-08-08 19:41  JustJavaIt  阅读(480)  评论(0编辑  收藏  举报