数据库三大范式理解

209 阅读2分钟

一、前言

数据库的设计范式是数据库设计需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入、删除和更新操作异常。

二、第一范式(1NF):列不可再分

1NF要求每一个属性具备原子性,不可再分。

例如:一个地址字段含有省,市等几个可以拆分的字段,如果业务需要按省来分类,那么可以认为这个字段是不符合第一范式的。

地址表:address(省,市)

三、第二范式:属性完全依赖主键,不存在部分依赖其他键

2NF 是对记录的唯一性。要求记录有唯一标识。

表:学号、课程号、姓名、学分

这个表说明了两个事务,学生信息和课程信息。学分依赖于课程号,姓名依赖于学号。那么就存在部分依赖,所以不符合第二范式。

可能存在问题:

1. 数据冗余:每条记录都含有相同信息
2. 删除异常:删除所有学生成绩,就把课程信息全删除了
3. 插入异常:学生未选课,无法记录进数据库
4. 更新异常:调整课程学分,所有行都调整

四、第三范式:属性直接依赖主键,不存在传递依赖

3NF是对字段的冗余性。

每个属性都跟主键有直接关系而不是间接关系。像a-->b-->c 是不符合第三范式的。

比如学生表:(学号、姓名、年龄、性别、所在院校、院校电话)

这样的表 就存在这样问题:学号-->院校-->院校电话。

所以,此时应该把这两个拆开,分为学生表和院校表。

五、总结

三大范式只是一般设计数据库的基本概念,可以建立冗余较小 、结构合理的数据库。特殊情况,可以满足业务的前提进行反三大范式。