MySQL - MySQL 三范式理解
一、第一范式
1NF 是要求 每列 具有原子性,不可再分解;即每列的内容不可被分割。
例: 一个表字段, address 字段, 存储内容为 省市区-详细地址 。 如果项目环境,经常按 省市区 搜索 ,这就不符合第一范式。因为可以拆成 省、市、区、详细地址 四个字段。
二、第二范式
2NF要求在符合 第一范式 的基础上, 实现实体的唯一性;即一张表只描述一件事情。
例:订单信息表中,只保留 订单ID、用户ID、收件人姓名、收件人地址、收件人手机号、订单备注等 用户信息 与 收件人信息 的字段, 不可出现 订单商品信息、订单状态信息 等。 可以分为 订单信息表、订单商品表、订单状态表、退货表等。
三、第三范式
3NF要求在符合 第二范式 的基础上, 要求 非主键的列只依赖于主键; 第三范式与第二范式有些像,只不过所描述的内容不一样。一个描述的是一个表应该只作用于一种环境需求,一个描述的是 除主键外,每个字段只能通过主键关联。
例: 订单信息表中,只保留 用户ID 的一个用户信息 字段,就不能再出现 用户性别、用户出生年月 等字段。 因为 性别、出生年月 无法与 订单表主键关联并且识别出是哪位用户,所以只能通过 用户ID 来绑定。
但根据实际场景需求,比如订单信息页面, 需要显示 用户的真实姓名, 且 用户的真实姓名是不可改的, 那就可以在 订单信息表 中创建一个 用户真实姓名 的冗余字段。