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

【MySQL】三大范式

范式简介:

        MySQL中的三大范式是数据库设计的基本原则,旨在减少数据冗余、提高数据一致性和完整性。

第一范式:

第一范式要求数据库表的每一列都是不可分割的基本数据项,确保每一列都具有原子性。

在关系型数据库的设计中,满足第一范式是对关系模式的基本要求。不满足第一范式的数据库就不能被称为关系型数据库

反例:

正例:

第二范式:

第二范式在满足第一范式的基础上,要求非主键字段必须完全依赖于主键,而不是部分依赖。

反例:

不满足第二范式时可能出现的问题:

  1. 数据冗余:一个学生参加了多名考试,姓名、年龄、性别等就会在每行记录中重复出现
  2. 更新异常:如果需要调整学分,就要更新表中所有关于学分的记录,一旦执行中断到时更新失败就会出现数据不一致问题
  3. 插入异常:如果有一个新课还没有学生参加考试取得成绩,那么新课在数据库中是不存在的,因为成绩为空没有意义
  4. 删除异常:当学生毕业时需要删除考试数据,就有可能删除某一课程和学分,导致数据库里没有某一课程和学分的信息

当我们要做一个学生考试成绩表时,要先明确一点,我们要记录的是某个学生参加了某门考试之后得到的分数。

  • 候选键:可以唯一标识一行数据的列或列的组合,可以从候选键中选一个或多个当做表的主键

像上图中的表,我们以学号为主键,其余列就为候选键;

在这个表中用学号作为这个表的主键来表示一个学生信息,那么姓名、年龄、性别都是学生信息中的一部分,所以这些列对于主键就是完全依赖。学分、成绩并不和学生信息直接相关,所以是部分依赖。如果我们要让上表满足第二范式通常需要将部分依赖的字段拆分到新表中。

正例:

把 学生ID 和 课程ID 作为一个复合主键,值用来记录成绩,没有部分函数依赖,也就非常的高效

第三范式:

第三范式在满足第二范式的基础上,要求非主键字段之间不能存在传递依赖

反例:

在这个表中,用ID、学号、姓名、年龄来表示一个学生的信息,学院名、学院电话等都是关于学院的信息,同时也是这个学生的学生的信息,但是学院名等数据与学生信息一起存储时就会发生冗余,这里这样的关系就称作传递依赖

正例:

实际应用建议:

  • 范式并非绝对标准,需根据实际场景权衡。过度范式化可能导致查询性能下降。
  • 反范式设计(如适当冗余)常用于数据仓库或高频查询场景以提高性能。
http://www.xdnf.cn/news/12678.html

相关文章:

  • 【工作记录】接口功能测试总结
  • jenkins 持续集成环境从0到1搭建全过程
  • PyTorch 中cumprod函数计算张量沿指定维度的累积乘积详解和代码示例
  • Oracle 19c RAC集群ADG搭建
  • MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
  • 计算机是如何⼯作的
  • 408第一季 - 数据结构 - 树与二叉树II
  • 《Brief Bioinform》: 鼠脑单细胞与Stereo-seq数据整合算法评估
  • 【Java实例-英雄对战】Java战斗之旅,既分胜负也决生死
  • 台式机电脑CPU天梯图2025年6月份更新:CPU选购指南及推荐
  • Canal环境搭建并实现和ES数据同步
  • App Search 和 Workplace Search 独立产品现已弃用
  • Cursor实现用excel数据填充word模版的方法
  • Fetch与Axios:区别、联系、优缺点及使用差异
  • 使用 C/C++ 和 OpenCV 提取图像的感兴趣区域 (ROI)
  • vue3+dify从零手撸AI对话系统
  • JavaWeb的一些基础技术
  • 在Ubuntu上使用 dd 工具制作U盘启动盘
  • 使用Transformer模型进行时间序列预测的完整解决方案,满足预测误差≤1.5%和注意力权重可视化的要求
  • GitHub 趋势日报 (2025年06月06日)
  • 2025年- H76-Lc184--55.跳跃游戏(贪心)--Java版
  • 有没有 MariaDB 5.5.56 对应 MySQL CONNECTION_CONTROL 插件
  • 信息最大化(Information Maximization)
  • Go语言进阶④:Go的数据结构和Java的有啥不一样
  • 光学字符识别(OCR)理论概述与实践教程
  • 动目标显示处理解析一(脉冲对消器)
  • Ubuntu 配置使用 zsh + 插件配置 + oh-my-zsh 美化过程
  • 前沿论文汇总(机器学习/深度学习/大模型/搜广推/自然语言处理)
  • 数据类型 -- 字符
  • SQL字符串截取函数全解析:LEFT、RIGHT、SUBSTRING 实战指南