1. 三范式
要想设计—个好的关系,必须使关系满足一定的约束条件,此约束已经形成了规范,分成几个等级,一级比一级要求得严格。满足这些规范的数据库是简洁的、结构明晰的。
一般满足三范式就很不错了。
1.1 第一范式
- 每一列属性都是不可再分的属性值,确保每一列的原子性;
- 两列的属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据;
- 单一属性的列为基本数据类型构成;
- 设计出来的表都是简单的二维表。
满足第一范式。
1.2 第二范式
第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。
左侧表的主键是 订单 ID 与产品 ID 的联合主键。
1.3 第三范式
第三范式(3NF)要求一个数据库表中不包含已在其它表中包含的非主关键字信息,即数据不能存在传递关系,即每个属性都跟主键有直接关系而不是间接关系。
以下不满足第三范式:
1.4 反范式设计
所谓的反范式化设计,就是针对范式化设计而言的:
- 为了性能和读取效率而适当的违反对数据库设计范式的要求;
- 为了查询的性能,允许存在部分(少量)冗余数据。换句话说,反范式化设计就是使用空间换时间。