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