当前位置: 首页 > article >正文

详解数据库范式

范式

  • 1. 第一范式(1NF)
  • 2. 第二范式(2NF)
  • 3. 第三范式(3NF)
  • 4. BC范式(BCNF,Boyce-Codd Normal Form)
  • 5. 第四范式(4NF)
  • 6. 第五范式(5NF)
  • 总结:

在数据库设计中, 范式(Normal Forms, NFs)是一种用于规范化数据库结构的理论,用以消除数据冗余、提高数据一致性,同时减少异常问题。范式的核心思想是将数据划分成更小、更独立的表,并通过关系(外键)进行连接。

1. 第一范式(1NF)

目标:确保每列的值是原子值。

  • 要求:

    • 数据库表中的每一列只包含单一值(原子性)。
    • 不允许一列存储多个值(如数组、列表等),也不允许嵌套表。
  • 示例:不符合1NF

    学生ID姓名联系方式
    1张三12345, 67890
    2李四98765

    上述表中“联系方式”列包含了多个值,因此不符合1NF。

  • 改进(符合1NF)

    学生ID姓名联系方式
    1张三12345
    1张三67890
    2李四98765

2. 第二范式(2NF)

目标:消除非主属性对主键的部分依赖。

  • 要求:

    • 满足1NF。
    • 表中的每一个非主属性必须完全依赖于主键,而不能只依赖于主键的一部分(解决部分依赖)。
  • 示例:不符合2NF

    学生ID课程ID课程名称成绩
    1C001数学90
    1C002英语85

    假设主键是(学生ID, 课程ID)的组合,“课程名称”只依赖于课程ID,而不是组合主键,因此违反2NF。

  • 改进(分表,符合2NF)

    • 课程表:

      课程ID课程名称
      C001数学
      C002英语
    • 成绩表:

      学生ID课程ID成绩
      1C00190
      1C00285

3. 第三范式(3NF)

目标:消除非主属性之间的传递依赖。

  • 要求:

    • 满足2NF。
    • 非主属性之间不存在传递依赖(即非主属性不能依赖于另一个非主属性)。
  • 示例:不符合3NF

    学生ID系ID系名称
    1CS001计算机系
    2EE002电气工程系

    在此表中,“系名称”依赖于“系ID”,“系ID”又依赖于主键“学生ID”,这是一种传递依赖。

  • 改进(分表,符合3NF)

    • 学生表:

      学生ID系ID
      1CS001
      2EE002
    • 系表:

      系ID系名称
      CS001计算机系
      EE002电气工程系

4. BC范式(BCNF,Boyce-Codd Normal Form)

目标:消除主属性间的依赖关系。

  • 要求:

    • 满足3NF。
    • 对于每一个函数依赖 X → Y X \to Y XY X X X 必须是超键。(超键是一个或多个属性的组合,这些属性的值可以唯一地标识表中的每一行记录。换句话说,一个超键中的值是足够独特的,它能够用来区分表中的任意两条记录。)
  • 示例:不符合BCNF

    教师ID课程名称教室
    T001数学R101
    T002英语R102

    假设(教师ID, 课程名称)为主键,“教室”依赖于“课程名称”,“课程名称”不是超键,因此违反BCNF。

  • 改进(分表)

    • 课程表:

      课程名称教室
      数学R101
      英语R102
    • 教师课程表:

      教师ID课程名称
      T001数学
      T002英语

5. 第四范式(4NF)

目标:消除多值依赖。

  • 要求:

    • 满足BCNF。
    • 表中不能存在非主属性的多值依赖。
  • 示例:不符合4NF

    学生ID语言爱好
    1英语篮球
    1英语足球
    1法语篮球
    1法语足球

    上述表中,“语言”和“爱好”是独立的多值属性,存在多值依赖。

  • 改进(分表)

    • 学生语言表:

      学生ID语言
      1英语
      1法语
    • 学生爱好表:

      学生ID爱好
      1篮球
      1足球

6. 第五范式(5NF)

目标:消除连接依赖。

  • 要求:
    • 满足4NF。
    • 表中每一个关系都应该能够通过其更小的关系表连接复原(避免连接依赖)。

总结:

范式目标主要特点
1NF消除重复组,保证每列值原子性。每列只存储单一值。
2NF消除部分依赖,非主属性完全依赖主键。必须完全依赖主键,不允许部分依赖。
3NF消除传递依赖,非主属性只依赖主键。非主属性之间不能存在依赖关系。
BCNF消除主属性间依赖,所有函数依赖的决定因素为超键。更严格的3NF。
4NF消除多值依赖,每个关系只存储一个独立主题。解决多值属性独立的问题。
5NF消除连接依赖,确保关系可以通过小表复原。对复杂表分解到极致。

http://www.kler.cn/a/585158.html

相关文章:

  • 《Java对象“比武场“:Comparable与Comparator的巅峰对决》
  • app.config.globalProperties
  • 语言识别模型whisper学习笔记
  • Odoo Http鉴权+调用后端接口
  • 爱普生车规级晶振SG2520CAA智能汽车电子系统的应用
  • JavaScript 函数基础
  • 【区块链】btc
  • HTTP 各版本协议简介
  • 交易所开发:数字市场的核心动力
  • HDU 学数数导致的
  • pjsip pjsua_media_config 结构体说明
  • 【MySQL】表的约束(上)
  • 如何筛选能实现共享自助健身房“灵活性”的物联网框架?
  • Java8的新特性
  • mov格式视频如何转换mp4?
  • C++ 左值(lvalue)和右值(rvalue)
  • DSTTN
  • Kafka×DeepSeek:智能决策破取经八十一难!
  • 批量压缩与优化 Excel 文档,减少 Excel 文档大小
  • 嵌入式八股ARM篇