范式
一张数据表的表结构所符合的某种设计标准的级别
构造数据库必须遵循一定的规则。在关系型数据库中,这种规则就是范式。范式是符合某一种级别的关系模式的集合,目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。
第一范式(1NF)
定义:在关系模式R中的每一个具体关系r中,必须要有主键,并且每个属性值都是不可再分的最小数据单元
表一不符合第一范式的属性,购买商品一列,可以拆分为商品和数量两列。
第二范式(2NF)
定义:所有非主属性都完全依赖于主关键字
所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。(主属性的概念是可以由主属性决定余下其它属性的值为非主属性)。
学生信息表中的成绩依赖于学号和课程两个主键,但是课程学分只是依赖课程,可以拆分成右侧两张表。
第三范式(3NF)
定义:非主关键字不能依赖于其它非主关键字,即非主关键字之间不能有函数(传递)依赖关系
对上表按照第三范式调整如下:
第一张表中“院校地址”是依赖于“院校”的,“院校”依赖于主键“学号”,存在传递依赖,存在传递依赖,不符合第三范式,那么需要拆解成对应的学生表和院校表。
注意:三大范式只是一般设计数据库的基本理念,没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,提高读性能,就必须降低范式标准,降低范式就是增加字段,减少了查询时的关联,提高查询效率,适当保留冗余数据。这就是反范式,反范式化一定要适度,并且在原本已满足三范式的基础上再做调整的。如果完全遵守三大范式,可能会影响查询效率,所以一般不会完全遵循三大范式(只遵守前两大范式),即反范式化,反范式化一定要适度