0
点赞
收藏
分享

微信扫一扫

数据库系统概论 - 范式

一、基础范式

1. 第一范式 (1NF)

  • 定义:确保数据表的每一列均为不可再分的原子项,且每行有唯一标识(主键)
  • 示例:若存在“联系方式”字段存储“电话1, 电话2”,需拆分为独立列或多行记录

2. 第二范式 (2NF)

  • 前提:满足1NF
  • 定义:消除非主属性对主属性的部分依赖(联合主键情况下,非主键列必须完全依赖主键)
  • 示例:订单详情表中若“订单日期”仅依赖订单ID(联合主键的一部分),需拆分表

3. 第三范式 (3NF)

  • 前提:满足2NF
  • 定义:消除非主属性之间的传递依赖,非主属性必须直接依赖主键
  • 示例:学生表中“学院电话”依赖“学院”而非学号,需拆分为学院表

二、进阶范式

4. 巴斯-科德范式 (BCNF / 3.5NF)

  • 前提:满足3NF
  • 定义:消除主属性之间的部分依赖,确保所有决定因素均为候选键
  • 特点:比3NF更严格,解决主属性之间的冗余问题

5. 第四范式 (4NF)

  • 前提:满足BCNF
  • 定义:消除多值依赖(一个字段的多值与其他字段无关)
  • 应用场景:处理多对多关系中的独立属性组

6. 第五范式 (5NF / 完美范式)

  • 前提:满足4NF
  • 定义:消除连接依赖,确保表可通过无损连接分解为更小的表
  • 实际意义:理论性强,实际业务中极少应用

三、核心区别对比

范式层级

解决的问题

依赖类型

典型场景

1NF

数据原子性

无重复列

字段拆分(如地址分解)

2NF

部分依赖

完全依赖主键

联合主键表拆分

3NF

传递依赖

直接依赖主键

消除冗余字段(如学院电话)

BCNF

主属性间的部分依赖

候选键决定所有属性

主键内部依赖优化

4NF

多值依赖

独立多值关系

多对多属性分离

5NF

连接依赖

无损连接分解

理论研究

四、实际应用建议

  1. 常规开发:优先满足到3NF即可,高阶范式可能牺牲查询性能67
  2. 反范式设计:为优化性能,允许适度冗余(如统计字段预计算)6
  3. 权衡原则:根据业务需求在规范性与性能之间取舍,如阿里巴巴要求关联表不超过3张


举报

相关推荐

0 条评论