1.1范式概述
关系型数据库中,关于数据表设计的基本原则,规则就称为范式,范式是我们在设计数据库结构过程中需要遵循的规则和指导方法。不过,有的时候为了提高某一些查询性能,我们还需要破坏范式规则,也就是反规范化。
1.2键和相关属性的概念
范式的定义会使用到主键和候选键,数据库中的键(key)由一个或者多个属性组成。
数据表中常用的几种键和属性的定义:
①超键:能唯一标识元祖的属性集叫做超键
②候选键:如果超键不包括多余的属性,那么这个超键就是候选键。
③主键:用户可以从候选键中选择一个作为主键。
④外键:如果数据表R1中的某属性集不是R1的主键,而是另一个数据表R2的主键,那么这个属性集就是数据表R1的外键。
⑤主属性:包含在任一候选键中的属性称为主属性。
⑥非主属性:与主属性相对,指的是不包含在任何一个候选键中的属性。通常,我们也将候选键称之为“码”,把主键也称为“主码”。因为键可能是由多个属性组成的,针对单个属性,我们还可以用主属性和非主属性来进行区分。
1.3范式都包括哪些
目前关系型数据库有六种常见范式,按照范式级别,从低到高分别是:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。
数据库的范式设计越高阶,冗余度就越低,同时高阶的范式一定符合低阶范式的要求,满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般来说,在关系型数据库设计中,最高也就遵循到BCNF,普遍还是3NF。但也不绝对,有时候为了提高某些查询性能,我们还需要破坏范式规则,也就是反规范化。
1.4第一范式(1NF)
第一范式要求数据表中每个字段的值必须具有原子性,也就是不可再分;属性的原子性具有主观性,需要根据场景应用具体分析;
1.5第二范式(2NF)
在第一范式基础上,要求:①非主键字段必须完整依赖主键字段,而不是部分依赖;②数据表记录可唯一标识;第二范式说明每个数据表都是一个独立的对象,有自己的独立含义;
1.6第三范式(3NF)
在第二范式基础上,要求:数据表中的所有非主键字段必须与主键字段直接相关,而不能与其他非主键字段存在依赖关系,所有非主键字段之间互相独立;
1.7巴斯·科德范式(BCNF)
简称巴斯范式,是改进的第三范式;在第三范式基础上,要求:数据表只能有一个候选键或每个候选键都是单属性,进一步降低数据冗余性。