数据库三范式

     设计良好结构的数据库,可以有效减小数据冗余,减少增删改中出现的问题。深入理解数据库设计的三范式,对于设计“健壮的数据库“十分有必要。数据库三范式是设计数据库 时参考的准则。

      目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般来说,数据库只需满足第三范式(3NF)就行了。

第一范式(1NF)每一列都是不可分割的原子数据项,是无重复的域

举个栗子:

学生有那些基本信息?

学生选了那些课,成绩是什么?

每个课的学分是多少?

学生属于那个系,系的基本信息是什么?

第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,简称table1,从table1分解出来的内容是table2,这个时候table1与table2是一对多关系。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。简而言之,第二范式就是在第一范式的基础上属性完全依赖于主键。

解决方案:

把选课关系表SelectCourse修改为如下三个要素;

学生;Student(学号,姓名,年龄,性别,系别,系办公地址,系办电话);

课程:Course(课程名称学分)

选课关系:SelectCoure(学号,课程名称,成绩)

 

 

第三范式(3NF)任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖),第三范式已第二范式的子集。

巴斯-科德范式(BCNF)巴斯-科德范式(BCNF)是第三范式(3NF)的一个子集:

由BCNF的定义可以得到结论,一个满足BCNF的关系模式有:

-所有非主属性对每一个码都是完全函数依赖。

-所有主属性对每一个不包含它的码也是完全函数依赖。

-没有任何属性完全函数依赖于非码的任何一组属性。

若R∈BCNF,按定义排除了任何属性对码的传递依赖与部分依赖,所以R∈3NF。 [1] 

一般关系型数据库设计中,达到BCNF就可以了!

根据第三范式把学生关系表分为如下两个表就可以满足第三范式了:

学生:(学号,姓名,年龄,性别,系别);

系别:(系别,系办公地址,系办公电话);

上面的数据库表就是符合1,11,111范式了的,消除了数据冗余,更新异常,插入异常和删除异常。

 

你可能感兴趣的:(SQL)