简介
在关系型数据库中,关于数据表设计的基本原则、规则就称为范式。
常见的六种范式(级别从低到高):第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-克德范式(BCNF)、第四范式(4NF)、第五范式(5NF,又称完美范式);
数据库范式设计越高阶,冗余度就越低,并且高阶的范式是在满足低级范式的基础上实现的,一般在关系数据库设计中最高就遵循到BCNF,普遍是3NF,在有些时候为了提高某些查询性能,我们还会破坏范式规则:反范式化。
第一范式:字段不可再分
确保数据表中每个字段值必须有原子性,即字段是不可再拆分的最小单元。
eg:存储员工个人信息:姓名、性别、工号:此时的字段应当是姓名、性别、工号,表为员工信息表
第二范式:所有字段依赖于主键
在第一范式的基础上,还需满足数据表中每条数据记录都是唯一可标识,所有非主键字段都完全依赖主键(多个字段组成的主键,不能只依赖主键的一部分)
eg:
主键(球员编号,比赛编号) -> 非主键(姓名,年龄,比赛时间,比赛场地,得分)
这种设计方式是错误的,非主键并非都完全依赖主键整体,正确设计如下:
(球员编号) -> (姓名,年龄)
(比赛编号) -> (比赛时间,比赛场地)
第三范式:非主键字段之间无关联
同样前提需要满足第一、二范式,要求数据中非主键字段不能依赖于其他非主键字段,即非主键字段间相互独立;
总结
- 范式的优点:有助于消除数据库中的数据冗余,第三范式(3NF)被认为在性能、扩展性和数据完整性达到了最好的平衡;
- 范式的缺点:使用范式可能降低查询的效率,范式等级越高,设计出来的数据表就越多、越细,数据冗余度虽然会降低,但数据查询的代价会增加(多表关联)。