一、关系数据库规范化理论数据库
为使数据库设计的合理可靠、简单实用,长期以来,造成了关系数据库设计理论,即规范化理论。数据库设计
彻底函数依赖:在一个关系中,若某个非主属性数据项依赖于所有关键字称之为彻底函数依赖。函数
好比:有一个表,有以下属性:学生ID,学生姓名,所修课程ID,课程名称,成绩性能
彻底依赖:(学生ID,所修课程ID)→成绩优化
成绩既不能单独依赖于学生ID,也不能单独依赖于所修课程ID,所以成绩彻底函数依赖于关键字。设计
(学生ID,所修课程ID)→学生姓名blog
部分依赖:学生ID→学生姓名io
学生姓名能够依赖于关键字的一个主属性——学生ID,所以学生姓名部分函数依赖于(学生ID,所修课程ID)。table
2)平凡函数依赖和非平凡函数依赖基础
平凡函数依赖:当关系中属性集合Y是属性集合X的子集时,存在函数依赖X→Y,即一组属性函数决定它的全部子集,这种函数依赖称为平凡函数依赖。
例如:在在关系学生课程表SC(学生号Sno,课程号 Cno,成绩 Grade)中,
(Sno, Cno) → Sno ,(Sno, Cno) → Cno
非平凡函数依赖:当关系中属性集合Y不是属性集合X的子集时,存在函数依赖X→Y,则称这种函数依赖为非平凡函数依赖。
例如:(Sno, Cno) → Grade
3)传递函数依赖
传递函数依赖:设X,Y,Z是关系R中互不相同的属性集合,存在X→Y(Y !→X),Y→Z,则称Z传递函数依赖于X。
例:关系S1(学号,系名,系主任)
学号 → 系名,系名 → 系主任,而且 系名 -\→ 学号,因此 学号 → 系主任 为传递函数依赖
范式是数据库设计中一个重要的过程,经过它能够优化数据库设计,避免一些问题,能够减小数据冗余,能够改进数据库总体组织,能够加强数据的一致性,能够增长数据库设计的灵活性。所以,在肯定设计数据库以前,还需对数据库中的表进行范式处理,以确保数据库听从适当的范式,从而使设计的数据库更加规范。
目前关系数据库有6种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。知足最低要求的是第一范式(1NF)。在第一范式的基础上知足更多要求的范式称为第二范式(2NF),其他的范式以此类推。通常来讲,数据库只须要知足第三范式(3NF)便可。
若是关系模式R的每一个关系r的属性都是不可分的数据项,那么就称R是第一范式的模式。第一范式是设计数据库表的最低要求,其最主要的特色是实体的属性不能再分,映射到表中,就是列(或字段)不能再分。
即:一个表中的列是不可再分的(即列的原子性)。
如表1.2,联系范式,对于学号‘1001’学生来讲,‘联系方式’列包含电话和邮箱,能够再分,不符合第一范式要求。
如表1.3,列不可再分,符合了第一范式要求。
若是关系模式R知足第一范式,而且R得全部非主属性都彻底依赖于R的每个候选关键属性,称R知足第二范式,简记为2NF。
如表1.3,姓名和选修课有对于关系,可是姓名和教材没有对应关系,选修课程和教材有对对应关系,从而该表不符合第二范式标准。
将表修改后如表1.4和1.5,符合第二范式标准。
若是关系模式R是2NF,且关系模式R(U,F)中的全部非主属性对任何候选键都不存在传递依赖,则成关系R是属于第三范式的模式。
如表1.6知足2NF,可是知道班级后必然能知道该学生 属于哪一个系,因此存在传递依赖,不符合3NF规范,因此讲班级和系别属性拆分如表1.7,和1.8,从而符合3NF标准。
表1.6
学号 | 姓名 | 班级 | 系别 |
1001 | 张三 | 计算机科学与技术1班 | 计算机系 |
1002 | 李四 | 会计1班 | 经管系 |
学号 | 姓名 | 班级 |
1001 | 张三 | 计算机科学与技术1班 |
1002 | 李四 | 会计1班 |
班级 | 系别 |
计算机科学与技术1班 | 计算机系 |
会计1班 | 经管系 |
三大范式只是通常设计数据库的基本理念,能够创建冗余较小、结构合理的数据库。若是有特殊状况,固然要特殊对待,数据库设计最重要的是看需求跟性能,需求>性能>表结构。因此不能一味的去追求范式创建数据库。