一、前言
数据库的设计范式是数据库设计需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入、删除和更新操作异常。
二、第一范式(1NF):列不可再分
1NF要求每一个属性具备原子性,不可再分。
例如:一个地址字段含有省,市等几个可以拆分的字段,如果业务需要按省来分类,那么可以认为这个字段是不符合第一范式的。
地址表:address(省,市)
三、第二范式:属性完全依赖主键,不存在部分依赖其他键
2NF 是对记录的唯一性。要求记录有唯一标识。
表:学号、课程号、姓名、学分
这个表说明了两个事务,学生信息和课程信息。学分依赖于课程号,姓名依赖于学号。那么就存在部分依赖,所以不符合第二范式。
可能存在问题:
1. 数据冗余:每条记录都含有相同信息
2. 删除异常:删除所有学生成绩,就把课程信息全删除了
3. 插入异常:学生未选课,无法记录进数据库
4. 更新异常:调整课程学分,所有行都调整
四、第三范式:属性直接依赖主键,不存在传递依赖
3NF是对字段的冗余性。
每个属性都跟主键有直接关系而不是间接关系。像a-->b-->c 是不符合第三范式的。
比如学生表:(学号、姓名、年龄、性别、所在院校、院校电话)
这样的表 就存在这样问题:学号-->院校-->院校电话。
所以,此时应该把这两个拆开,分为学生表和院校表。
五、总结
三大范式只是一般设计数据库的基本概念,可以建立冗余较小 、结构合理的数据库。特殊情况,可以满足业务的前提进行反三大范式。