数据库范式-表结构设计规范

引言

数据库表结构设计有一套规范。设计出的表结构应尽量避免不必要地冗余,同时要确证灵活性。只需要遵守公认的范式,就可以达到较合理地设计效果。同时,这些范式也是评价一个数据库表结构设计是否合理的标准。

范式:

1NF、2NF、3NF、BCNF,它们是一级包含一级的关系,即必须先满足第一范式,再判断是否满足第二范式。如果已经满足第二范式,再判断是否满足第三范式。1NF、2NF、3NF、BCNF是逐级递进的。只有符合范式要求的表结构设计才能说是合理的设计。

下面以学生成绩管理数据库来讲解这些范式:

1NF

表示属性值是不可分割

比如学生信息表t_student:

student
201501Mike

student字段不满足第一范式。因为该属性值可以再分割变为:

id name
201501 Mike

2NF

非主要的属性,必须完全依赖主要的属性,不能部分依赖

比如选课信息表:

选课人 课程 上课老师 教材 老师职称
Mike 数据库 Jack 《数据库原理》 副教授

(选课人、课程)才能确定这张表的唯一行。所以它是主属性。但是教材只与课程有关。教材并不依赖选课人。

那么问题来了,假设1万个选课行,那么教材发生修改就需要修改这1万行。而且如果某一门课,没人选,那如何插入呢?

所以这不符合2NF。解决方案是拆分成过个表。

3NF

表示非主属性不要依赖于其他非主属性

还以上述选课表为例。

选课人 课程 上课老师 老师职称
Mike 数据库 Jack 副教授

同样,主属性是(选课人,课程),但是老师职称跟选课人没关系。只和上课老师相关。所以这就是非主属性依赖其他非主属性。不满足第三范式。

猜你喜欢

转载自blog.csdn.net/qguanri/article/details/50102383