更新时间:2021-03-11 17:51:33 来源:动力节点 浏览1394次
数据库的设计范式是我们在设计数据库结构过程中所要遵循的规则和指导方法。尽管针对关系数据模型的六种范式大同小异:第一范式、第二范式、第三范式、BC范式、第四范式和第五范式。不同种类的数据库的范式也会有一些细微的差异,但影响不大,本文我们来通过实例分析Oracle三大范式。
只有理解并遵循数据库的设计范式,才能设计出高效率、优雅的数据库,否则可能会设计出错误的数据库。满足最低要求的叫第一范式,简称1NF。在第一范式基础上进一步满足更高要求的为第二范式,简称2NF。其余依此类推。范式可以避免数据冗余、减少数据库的存储空间、减轻维护数据完整性的麻烦。但是对数据的操作可能变得较为麻烦,可能需要连接多个表才能得到所需要的数据,而且范式越高性能就会越差。
第一范式(1NF)
定义:数据库表的每一列都是不可分割的基本数据项。 1NF是关系模式应具备的最起码的条件,如果数据库设计不能满足第一范式,就不能称为关系型数据库。
例如(学生信息表)如下设计:
学生编号 姓名 性别 联系方式
20080901 王军 男 email:wangjun@126.com,phone:88886666
20080902 张丽 女 email:zhangli@126.com,phone:66668888
该表的设计就不符合第一范式:联系方式字段可以再分,应变更为:
学生编号 姓名 性别 电子邮件 电话
20080901 王军 男 wangjun@126.com 88886666
20080902 张丽 女 zhangli@126.com 66668888
第二范式(2NF)
定义:数据库表首先满足第一范式,并且不存在非关键字段对任一候选关键字段的部分函数依赖。即每个非主属性要完全函数依赖于候选键或者主键。换句话说,每个非主属性都是由整个主键决定的,而不能由主键的一部分来决定。
函数依赖:如果一个表中某一个字段Y的值是由另外一个字段或一组字段X的值来确定的,就称为Y函数依赖于X。
例如(学生选课表)如下定义:
学生 课程 教师 教材 教室 上课时间
王军 Spring 张老师 《Spring深入浅出》 301 08:00
张丽 Struts 杨老师 《Struts in Action》 302 13:30
通过(学生,课程)确定教师、教材、教室和上课时间,所以把(学生,课程)作为主键。
但是,教材并不完全依赖于(学生,课程),课程就可以确定教材,这就叫不完全依赖,或者叫部分依赖。出现这种情况就不满足第二范式。
应该修改如下:
选课表:
学生 课程 教师 教室 上课时间
王军 Spring 张老师 301 08:00
张丽 Struts 杨老师 302 13:30
课程表:
课程 教材
Spring 《Spring深入浅出》
Struts 《Struts in Action》
第二范式的作用是消除部分依赖,以减少数据冗余、插入异常、删除异常和修改异常。
第三范式(3NF)
定义:所有非主属性对任何候选关键字段都不存在传递依赖。 简单的说,第三范式要满足以下的条件:首先要满足第二范式,其次非主属性之间不存在函数依赖。
如下表:
学生 课程 教师 教师职称 教室 上课时间
王军 Spring 张老师 java讲师 301 08:00
张丽 Struts 杨老师 java讲师 302 13:30
(学生,课程)能够确定教师,教师能够确定教师职称,即,教师职称传递依赖于主键。如果增加了新教师或者要修改某个教师的职称,就会出现问题。
应做如下修改:
选课表:
学生 课程 教师 教室 上课时间
王军 Spring 张老师 301 08:00
张丽 Struts 杨老师 302 13:30
教师表:
教师 教师职称
张老师 java讲师
杨老师 java讲师
第三范式的作用消除传递依赖,以消除数据冗余、更新异常、插入异常和删除异常。
结合上面列举的几个实例对于Oracle三大范式做了详细的分析和实际的说明,我们不难看出第一范式就是原子性,字段不可再分割;第二范式就是完全依赖,没有部分依赖;第三范式就是没有传递依赖。这些简单的性质在本站的Oracle教程中都有详细的介绍,也是为了我们能够更加规范地使用数据库,Oracle三大范式的学习是数据库学习的基本要求。
0基础 0学费 15天面授
有基础 直达就业
业余时间 高薪转行
工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习