数据库设计三大范式
数据库设计三大范式
为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。
常见的三大设计范式:
1. 第一范式(确保每列保持原子性)
第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。
例:地址可进一步分解,若系统经常访问地址中的省、市、区(县),拆分存储更方便
| 编号 | 姓名 | 性别 | 地址 |
| 1 | 张三 | 男 | 湖北省武汉市洪山区 |
| 2 | 李四 | 男 | 河南省郑州市新密市 |
| 3 | 王五 | 男 | 河南省郑州市二七区 |
改:遵循第一范式,这样在对用户使用城市进行分类的时候就非常方便,提高了数据库的性能。
| 编号 | 姓名 | 性别 | 省 | 市 | 区(县) |
| 1 | 张三 | 男 | 湖北 | 郑州 | 洪山区 |
| 2 | 李四 | 男 | 河南 | 郑州 | 新密市 |
| 3 | 王五 | 男 | 河南 | 郑州 | 二七区 |
2. 第二范式(确保表中每列都和主键相关)
第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。
例:订单信息表(一个订单中可能有多种商品)

这个表以订单编号和商品编号作为联合主键。在该表中商品名称、单位、商品价格等信息不与联合主键相关,而只是与联合主键的一部分(商品编号)相关。
改:把订单信息表进行拆分,把商品信息分离到另一个表,把订单信息也分离到另一个表。

3. 第三范式(确保每列都和主键直接相关,而不是间接相关)
在设计一个订单信息表的时候,可以将客户编号作为外键和客户信息表建立相应的关系。而不可以在订单表中添加关于客户的其他信息(姓名、公司等)的字段,这些字段和主键(订单编号)间接相关。
