标准答案

  1. 第一范式要求字段保持原子性,不把多个电话号码、商品项或地址片段塞进一个可重复解析的字符串字段。
  2. 第二范式针对联合主键,要求非键字段依赖完整主键,而不是只依赖其中一部分,例如订单明细不应重复存只由商品决定的商品名称。
  3. 第三范式要求非键字段直接依赖主键,避免部门名称依赖 department_id、department_id 又依赖 employee_id 这种传递关系。
  4. 范式减少同一事实多处修改造成的不一致,也让约束和权限边界更清晰。
  5. 范式不是禁止冗余;读性能或历史快照需要的冗余,应有明确来源、更新策略和校验方式。

题目解析

未规范化的数据通常一开始读起来方便,后续却会在更新时暴露问题:改一次商品名称要改多条订单明细;删掉最后一条订单时把客户资料也删没了;创建新部门时因为还没有员工而无法写入。范式就是在表设计阶段把这些异常拆开。

核心交易表通常先以规范化为基线,再针对明确的读热点做有限冗余。这样出现不一致时可以回到事实源重建,而不是在多份无来源的数据里猜哪份是对的。

常见误区

  • 把范式背成固定拆表数量,忽略字段真正的函数依赖关系。
  • 为了“满足三范式”拆出大量只会一起读取的小表,反而增加无意义 JOIN 和运维复杂度。

作者信息