关系数据库设计的三大范式

第一范式(原子性)

如果数据库表中的所有字段值都是不可分解的原子值,说明满足第一范式,这是最基本的范式。

什么叫不可分解呢?比如在地址栏中,有时候需要找到某个客户的所在城市,就不能把客户地址的省,市,详细地址放在一个栏目里,应如图所示:
这里写图片描述

这样就满足原子性了。

但第一范式有着比较多的问题,比如数据的冗余过大,插入异常,删除异常,修改异常等问题,所以就需要更高级的范式。

第二范式:实体的属性完全依赖于主键

第二范式时建立在第一范式的基础上的,第二范式要求非主属性不能部分依赖于主关键字,即数据库表中的每一列都和主键相关,而不是间接相关(针对联合主键)。
也就是把不同类型的数据分别存储,不可以把多钟数据保存在同一张表中。

如下信息表,表中订单编号和商品编号作为联合主键存在,主要有两部分信息,订单信息和商品信息,但该表把这两部分信息都放在一起了,违反了第二范式的规则,所以要把这个表拆开。
这里写图片描述

这里写图片描述

这里写图片描述

这样就极大地减少的数据的冗余。

第三范式:表属性不能依赖其他表中非主键的属性

第三范式确保数据表中的每一列数据都和主键直接相关,而不能间接相关。

如下即为满足第三范式的表,客户编号作为外键与与订单表建立联系。
这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_39422642/article/details/79686887