第十章 数据库三范式

article/2025/10/17 8:03:37

概念

• 必须保证数据库设计的合理性
​ 数据库设计关系整个系统的架构,关系到后续开发效率和运行效率
​ 数据库的设计主要包含了设计表结构和表之间的联系
• 如何是合理数据库
​ 结构合理
​ 冗余较小
​ 尽量避免插入删除修改异常
• 如何才能保证数据库设计水平
​ 遵循一定的规则
​ 在关系型数据库中这种规则就称为范式
• 什么是范式(NF= NormalForm)
​ 范式是符合某一种设计要求的总结。
​ 要想设计一个结构合理的关系型数据库,必须满足一定的范式。

第一范式(1NF)

字段具有原子性,不可再分。所有关系型数据库系统都满足第一范式
数据库表中的字段都是单一属性的,不可再分。例如,姓名字段,其中的姓和名必须作为一个整体,无法区分哪部分是姓,哪部分是名,如果要区分出姓和名,必须设计成两个独立的字段。

• 要求

  • 最基本的范式
  • 数据库表每一列都是不可分割基本数据项,同一列中不能有多个值
  • 简单说就是要确保每列保持原子性
  • 第一范式的合理遵循需要根据系统的实际需求来定

• 示例

  • 用户表(用户名,家庭地址)
  • 用户表(用户名,省,城市,详细地址)
  • 系(系名称,系主任,系高级职称人数)
  • 系(系名称,系主任,系教授人数,系副教授人数)

第二范式(2NF):

第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。
要求数据库表中的每个实例或行必须可以被惟一地区分。通常需要为表加上一个列,以存储各个实例的惟一标识。这个惟一属性列被称为主键或主键。

第二范式(2NF)要求实体的属性完全依赖于外键。所谓完全依赖是指不能存在仅依赖主键一部分的属性,如果存在,那么这个属性和主键的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。简而言之,第二范式就是非主属性非部分依赖于主键。

• 要求

  • 第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。
  • 即在一个数据库表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。

• 示例

  • 学号和课程编号作为联合主键
  • 课程名称只依赖于课程编号,而和学号没有关系
    在这里插入图片描述
    • 解决
  • 提取出学生表
  • 提取成课程表
  • 提取选课表,存放选课记录

在这里插入图片描述

第三范式:

满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主键信息
所以第三范式具有如下特征:
1,每一列只有一个值
2,每一行都能区分。
3,每一个表都不包含其他表已经包含的非主键信息。
例如,帖子表中只能出现发帖人的id,而不能出现发帖人的id,还同时出现发帖人姓名,否则,只要出现同一发帖人id的所有记录,它们中的姓名部分都必须严格保持一致,这就是数据冗余。

• 要求

  • 确保数据表中的每一列数据都和主键直接相关,而不能间接相关
  • 属性不依赖于其他非主属性。

• 示例1:学生班级表

学号(主键)学生姓名班级编号班级名称班级信息
023145张三9876543班特招班
023146李四9876543班特招班
023147王五9876554班普通班
023258赵六9876543班特招班

完善之后的方案:

学号(主键)学生姓名班级编号
023145张三987654
023146李四987654
023147王五987655
023258赵六987654
班级编号(主键)班级名称班级信息
9876543班特招班
9876554班普通班

• 示例2:订单明细表

编号(主键)图书id图书名称价格作者出版社出版日期数量
0231451精通Java60.00张三清华出版社20071
0231462Oracle65.00李四机械出版社20091
0231473JSP87王五电子出版社20143
0232581精通Java60.00张三清华出版社20072
0232592Oracle65.00李四机械出版社20093

完善之后的方案:分割成图书表和订单表两种表

图书id图书名称价格作者出版社出版日期
1精通Java60.00张三清华出版社2007
2Oracle65.00李四机械出版社2009
3JSP87王五电子出版社2014
4Struts256赵六清华出版社2005
编号(主键)图书id数量
02314511
02314621
02314733
02325822
02325923

范式的优缺点

• 优点

  • 结构合理
  • 冗余较小
  • 尽量避免插入删除修改异常

• 缺点

  • 性能降低
  • 多表查询比单表查询速度慢
  • 数据库的设计应该根据当前情况和需求做出灵活的处理。
  • 在实际设计中,要整体遵循范式理论。
  • 如果在某些特定的情况下还死死遵循范式也是不可取的,因为可能降低数据库的效率,此时可以适当增加冗余而提高性能。

• 示例:

​ 比如经常购物车条目的中除了条目编号,商品编号,商品数量外,可以增加经常使用的商品名称,商品价格等

图书表

图书id图书名称价格作者出版社出版日期
1精通Java60张三清华出版社2007
2Oracle宝典65李四机械出版社2009
3JSP87王五电子出版社2014
4Struts256赵六清华出版社2005

订单表中增加冗余列图书名称、价格,以空间换时间。

编号(主键)图书id图书名称价格数量
0231451精通Java601
0231462Oracle宝典651
0231473JSP873
0232581精通Java602

小结

• 范式是指导数据设计的规范化理论,可以保证数据库设计质量

• 第一范式:字段不能再分

• 第二范式:不存在局部依赖

• 第三范式:不含传递依赖(间接依赖)

• 使用范式可以减少冗余,但是会降低性能

• 特定表的的设计可以违反第三范式,增加冗余提高性能


http://chatgpt.dhexx.cn/article/4Mfcscru.shtml

相关文章

数据库三范式 事务

范式是具有最小冗余的表结构。 数据库三范式具体如下: 1、 第一范式(1st NF -列都是不可再分) 第一范式的目标是确保每列的原子性: 如果每列都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式&…

数据库三范式与反范式详解

🏆今日学习目标: 🍀数据库三范式与反范式详解 ✅创作者:林在闪闪发光 ⏰预计时间:30分钟 🎉个人主页:林在闪闪发光的个人主页 🍁林在闪闪发光的个人社区,欢迎你的加入: 林…

数据库三范式是什么?

什么是范式? 简言之就是,数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系。所以建立科学的,规范的的数据库是需要满足一些规范的来优化数据数据存储方式。在关系型数据库中这些规范就可以称为范式。 什么是三…

数据库三范式简单理解

数据库设计当中三范式是经常遇到的,如果实际项目数据库设计中能达到第三范式基本也就满足要求了,那么如何快速有效的理解三个范式,同时应用于实际项目中去呢? 首先看看标准定义的三个范式: 第一范式(1NF)…

数据库三大范式

数据库三大范式 数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操…

数据库三范式3NF指什么?

三范式面试的时候问的比较多,概念需要了解下: 数据库设计三大范式 为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系…

数据库的三范式详细解释

1.定义 三范式是数据库的规范化的内容,所谓的数据库三范式通俗的讲就是设计数据库表所应该遵守的一套规范,如果不遵守就会造成设计的数据库不规范,出现数据库字段冗余,数据的查询,插入等操作等问题。 注意:…

数据库三范式是什么?(3NF详解)

什么是范式? 范式是数据库设计时遵循的一种规范,不同的规范要求遵循不同的范式。 最常用的三大范式 第一范式(1NF):属性不可分割,即每个属性都是不可分割的原子项。(实体的属性即表中的列) 第二范式(2NF):满足第一…

数据库三范式【看了就有收获,最简单的例子解释】

1. 数据库的三范式是什么???? 范式规范,原则上是必须遵循的(但是需求不同可以不遵循),特殊情况可以不遵循 第一范式(1NF):符合数据表的原子性【…

Java面试题之数据库三范式是什么?

什么是范式? 简言之就是,数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系。所以建立科学的,规范的的数据库是需要满足一些规范的来优化数据数据存储方式。在关系型数据库中这些规范就可以称为范式。 什么是三…

数据库的三大范式

1.为什么需要数据库设计2.范式(Normal Formal)2.1范式概述2.2键和相关属性的概念2.3第一范式(1NF)2.4第二范式(2NF)2.5第三范式(3NF)2.6范式的优缺点 3.反范式化3.1概述3.2 反范式的新问题3.3反范式的适用场景 4.BCNF(巴斯范式) 文章是看尚硅…

数据库设计的三范式超详细详解

目录 写在前面 第一范式(1NF):原子性(存储的数据应该具有“不可再分性”) 第二范式(2NF):唯一性 (消除非主键部分依赖联合主键中的部分字段)(一定要在第一范式已经满足…

FarPoint.Win.Spread 自定义表头

软件开发技术交流,同学习共进步,欢迎加群, 群号:169600532 最近C/S项目中用到FarPoint.Win.Spread,想在表头加个全选的checkbox,实现效果如图: 列的设置大家都清楚,直接可视化视图中设置该列Ce…

关于 farpoint spread的问题。

由于万不得已,使用了 farpoint spread 控件。 版本:4.0.3509.2008 天杀,这东西在网上居然没有可以用的使用说明,欺负不会英文的我。 1.farpoint spread 单元格内增加滚动条。 虽然简单,但是如果忽略一个参数设置就会…

WPF方便的调用FarPoint

一、安装FarPoint 二、创建WPF项目 三、引用farpoint相关dll 四、引用winform的相关dll: System.Windows.Forms.dll 五、引用winfrom与WPF的窗台整合dll 所需dll截图 六、新建一个winfrom用户控件,使用farpoint创建一个表格 通过右键spread design可以直接使…

N-Gram 分词算法 Python 实现

概述 N-Gram 算法是一种单词级别的窗口取词算法,N-Gram(有时也称为N元模型)是自然语言处理中一个非常重要的概念,通常在NLP中,人们基于一定的语料库,可以利用N-Gram来预计或者评估一个句子是否合理。另外一…

ElasticSearch学习随笔之分词算法

ElasticSearch 1、ElasticSearch学习随笔之基础介绍 2、ElasticSearch学习随笔之简单操作 3、ElasticSearch学习随笔之java api 操作 4、ElasticSearch学习随笔之SpringBoot Starter 操作 5、ElasticSearch学习随笔之嵌套操作 6、ElasticSearch学习随笔之分词算法 7、ElasticS…

常用分词算法笔记

常用统计语言模型,包括了N元文法统计模型(N-gram Model)、隐马尔科夫模型(Hidden Markov Model,简称HMM)、最大熵模型(Maximum Entropy Model)。 N-Gram这是一种依赖于上下文环境的词…

NLP 中文分词-双向匹配算法(理论+Python实现)

一、理论描述 1.中文分词的概念: 是指把没有明显分界标志的字串切分为词串,包括标点符号、数字、数学符号、各种标记、人名、地名、机构名等未登录词的识别。汉语自动分词主要包括:(1)根据分词规范,建立机…

NLP ---分词详解(常见的五种分词技术二)

上一篇我们讲了N一最短路径方法、基于词的n元文法模型,本节将主要介绍由字构词方法、基于词感知机算法的汉语分词方法、基于字的生成模型和区分式模型相结合的汉语分词方法,下面我们就开始讲解由字构词的方法: 由字构词方法 由字构词方法的…