数据库范式

简介

源自英文 Normal Form,简称NF。

不同的范式对关系约束不同,越高的NF数据库冗余越小。

高等级范式在低级范式基础上更近一步,是低级范式的子集。

Start

假如我们有下面的需求:

存储用户的地址信息,每个用户都只有一个地址

初始设计

用户地址
张三北京市朝阳区xx街道

1NF

要求每列都是不可再分的数据单元。

如果业务上要求地址区分省市区街道,那么只有一个地址字段就不满足1NF。将地址拆分为多个字段满足1NF。

原始设计,不满足1NF,拆分地址字段后满足1NF

用户街道
张三北京北京朝阳区xx街道

2NF

2NF要求数据的每列都要与主键有关。

加入主键字段(id) 后满足2NF,可以区分同名同地址的用户了。

id用户街道
1张三北京北京朝阳区xx街道

3NF

3NF要求每列数据与主键直接相关。

例如 有部门表和员工表,员工表只能存储部门表的id,不能冗余部门表的其他字段(名称。等)。

BCNF

防止主键的某一列依赖主键的其他列。单列主键不存在这个问题。

反范式

适当的冗余字段,可以减少join操作,提高查询性能,但会提高数据维护成本。

Last Updated:
Contributors: mcs