数据库范式

为什么要引入范式 #card

  • 关系型数据库减少数据冗余,
  • 避免数据异常的规范化规则

1NF ↔ 每列原子性,所有字段都是单一值

2NF ↔ 所有非主属性必须完全依赖主键,消除了非主属性对码的部分依赖

3nf ↔ 所有非主属性必须直接依赖于主键

bcnf ↔ 所有决定因素(左侧)必须是候选键(超键)

4NF ↔ 去除多值依赖

表:订单(订单ID, 产品ID, 产品名称, 数量),主键是复合键(订单ID, 产品ID)。2nf 问题在哪里?#card

  • 问题:产品名称仅依赖产品ID(部分依赖),需拆分为 订单详情表 和 产品表。

表 学生(学号, 姓名, 学院, 学院地址),其中学院地址依赖学院,而学院依赖学号。如何符合 3nf #card

  • 需拆分为 学生表 和 学院表。

表 课程(学生, 教师, 课程),假设一个教师只教一门课,但一门课有多个教师。如何实现 bcnf #card

  • 若存在依赖 教师 → 课程,但教师不是候选键,需拆分为 教师-课程表 和 学生-教师表。

如果函数依赖A->B,B->C,则属于哪一范式 #card

  • 传递依赖
  • 2NF

网络回响

作者

Ryen Xiang

发布于

2025-09-08

更新于

2026-02-17

许可协议


评论