首页 > 代码库 > 秒懂数据库三范式

秒懂数据库三范式

懂得数据库范式,对于设计出一个合理的数据库有很大的帮助。本文根据自己对数据库范式的理解,结合具体的例子,尝试着用通俗易懂的语言讲明白数据库三范式。

第一范式(列不可拆分)

如果数据库中所有的字段值都是不可拆分的原子值,那么就满足第一范式了。简单点说就是不能有表中表,所以关系数据库都满足第一范式。例子略。

第二范式(完全依赖)

第二范式是在第一范式的基础上,保证所有非主键都依赖于主键,对于联合主键,非主键得完全依赖(也就是说不能依赖于联合主键的一部分)。

比如要设计一个订单信息表,因为订单中可能会有多种商品,所以要将订单编号和商品编号作为数据库表的联合主键,如下表所示。

 订单信息表

这样就产生一个问题:这个表中是以订单编号和商品编号作为联合主键。这样在该表中商品名称、单位、商品价格等信息不与该表的主键完全相关,而仅仅是与商品编号相关。所以在这里违反了第二范式的设计原则。

第三范式(消除非主属性对键的传递依赖)

第三范式是在满足第二范式的基础上,保证所有非主键都跟主键直接相关而不是间接相关。如下表所示:
订单编号客户编号客户姓名联系方式
0011张三1234567
0022王麻子1222222
0033李四7654321

如上图所示,一定订单只有一个客户,把订单编号作为主键,上表每个属性都依赖于订单编号,依赖的意思是说订单编号相等时,其他属性也得一样。那么就有定单编号确定客户编号,而客户编号又可以确定客户姓名,这就产生了一个传递关系,所以不满足三范式。要满足三范式,应该拆分为两个表,一个是订单信息表,一个是客户信息表。一般我们设计数据库中得满足第三范式。