news 2026/8/3 17:49:57

数据库范式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
数据库范式

范式

数据库范式是一组规则。在设计关系型数据库的时候,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式。
关系型数据库有六种范式:第一范式(1NF),第二范式(2NF),第三范式(3NF),巴斯-科得范式(BCNF),第四范式和第五范式。越高的 范式数据库冗余越小。普遍人文范式越高虽然对数据关系有更好的约束性,但也可能导致数据库IO更繁忙,因此,在实际应用中,数据库设计通常只需要满足第三范式即可。

第一范式

  • 数据库表的每一列都是不可分割的原子数据项,而不是集合,数组,对象等非原子数据
  • 在关系型数据库的设计中,满足第一范式是对关系模式的要求。不满足的数据库不能成为关系型数据库
    示例
    定义一个学生表,需要记录学生信息和 学校信息
    反例

    这个学校是你可以继续拆分的,所以这不满足第一范式
    正例

    尽管他很丑陋,但是确实是满足第一范式
    在关系型数据库中,每一列都可以用基本数据类型表示,天然满足第一范式

第二范式

在满足第一范式的基础上,不存在非关键字对任意候选键部分函数依赖。存在于表中定义了复合主键的情况。

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

反例

  • 这张表是使用学号+课程名定义复合索引唯一标识一个学生某门课程的乘积,这也是这张表的主要作用
  • 学生是通过学号来确定的,学生的年龄、性别和课程没有关系,只依赖学号,不依赖课程名;学分是通过课程确定的,课程的学生和学生没有关系,学分只依赖课程名,不依赖学生;乘积同时依赖学号+课程名
  • 对于使用符合主键的表,如果一行数据中有些列至于复合主键中一个或者其中几个列有关,那么就说他存在部分函数依赖,不满足第二范式
    正例
  • 设计表:针对需求应该设计三张表,学生表、课程表和成绩表



第二范式强调的是部分函数依赖,当一张表中的主键只有一列时,天然满足第二范式

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

  1. 数据冗余
    比如反例中的,学生的姓名、年龄、性别和课程学分重复出现,造成了大量的数据冗余。
  2. 更新异常
    如果要调整MySQL的学分,那么就需要更新表中所有关于MySQL课程的记录,一旦执行终端导致某些记录更新成功,某些更新失败,就会造成一门课程出现不同学分的情况,数据不一致的问题。
  3. 插入异常
    目前这样设计,成绩和每一门课和学生都有关系,也就是说学生参加选修课程考试取得成绩之后才能生成一条记录。当有一门新课还没有学生参加考试取得成绩之前,这么新课在数据库中是不存在的,因为成绩为空的记录没有意义。
  4. 删除异常
    把毕业学生的考试数据全都删除,此时课程和学分的信息也会被删除掉,有可能导致一段时间内,数据库里没有某门课程和学分的信息。

第三范式

在满足第二范式的基础上,不存在非关键字段,对任意候选键的传递依赖

反例

  • 因为要描述的是学生信息,并且在表中定义了ID,ID可以明确的标识每条学生信息
  • 在这个表结构中,可以看出学生的学号、姓名、年龄、性别和主键ID强相关;学院的电话和学院也是强相关;在一个表中出现了两个强相关的关系,而且这两个强相关关系又存在传递现象——通过学生ID可以找到学生记录,学生记录中包含学院名,每个学院又有自己的电话和地址。
    正例


    需要查询的时候,只需要让学生表和学员表通过学院ID进行连接即可。此时所有的表满足第三范式。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/31 21:19:01

C++入门第五篇:教你自定义函数!

新手注意:代码部分是用AI(豆包)生成的,所以写成了依托达芬,请见谅,别被误导了!!!前言:为什么需要自定义函数?​在前一篇中,我们学会了…

作者头像 李华
网站建设 2026/8/3 8:52:51

六成藏家发愁“宝贝变现”

古玩,曾被尊为“七十二行之首”,兼具文化价值与财富属性。如今却陷入一种尴尬:一边是拍卖场上的天价迭出,一边是民间藏家手中的宝贝难以变现。你是否也感觉,藏品虽好,却越来越难遇到对的人?中拍…

作者头像 李华
网站建设 2026/8/3 14:22:49

工程师必看的45条FPC设计技巧(板厚说明)

1、下单选择的板厚是包含覆盖膜、铜厚,和板材PI厚度的,如果板上有无铜区或没有覆盖膜,板厚会相应减薄,请设计时特别留意2、FPC阻抗使用阻抗模拟软件很难计算准确,可参考嘉立创实际总结的经验线宽来设计,但建…

作者头像 李华
网站建设 2026/8/3 7:56:24

芯谷科技—D133AL:高性能低功耗线性稳压器,助力电子系统稳定运行

在当今电子设备日益复杂和精密化的背景下,电源管理芯片作为核心组件之一,其性能和可靠性直接关系到整个系统的稳定运行。绍兴芯谷科技有限公司推出的 D133AL 系列低功耗线性稳压器,凭借其卓越的性能和广泛的应用场景,成为众多工程…

作者头像 李华
网站建设 2026/8/3 12:38:44

合规性测试的智能验证方法

随着软件产品在金融、医疗等监管严格领域的广泛应用,合规性测试的重要性日益凸显。传统手动验证方法效率低下且易出错,而智能验证技术通过自动化、数据分析和机器学习,显著提升了测试覆盖率和准确性。本文系统介绍了智能验证的核心方法、实施…

作者头像 李华
网站建设 2026/8/3 16:47:54

2025深圳UV光固贴膜机品牌权威测评来袭

在数码产品和汽车等行业蓬勃发展的当下,贴膜需求与日俱增,UV光固贴膜机作为高效精准的贴膜工具,市场关注度不断提升。深圳作为科技产业集中地,拥有众多UV光固贴膜机品牌,膜之家便是其中备受瞩目的一员。技术性能测评膜…

作者头像 李华