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

article/2025/10/17 8:04:19

1. 数据库的三范式是什么????

范式=规范,原则上是必须遵循的(但是需求不同可以不遵循),特殊情况可以不遵循

第一范式(1NF):符合数据表的原子性【就是每一个属性不可再分

表中的同一列数据相同

一个列名只能对应一列

并且每一列都不可再分

行的上下关系互不影响(看不懂这里没关系,例子懂了就行

举例:第一个是不满足第一范式的 【是可以再分的】(将签到的两行改成一行就满足一范式了)

 这个例子就是满足一范式的。

第二范式(2NF):消除了非主属性对于【主属性的集合】的部分函数依赖(简单来说:表中的非主属性【姓名】必须完全依赖于主属性【学号】,也就是说通过主属性能够获取到一个唯一的姓名。)

名词解释;

码(候选码):就是主属性的集合。 有了码就可以获取到码对应的其他属性【id【主属性】确定--就可以确定 姓名 系名和系主任 (非主属性)。课名【主属性】可以获取分数【非主属性】】

主属性:码里面的属性就是主属性,包括id,课名。

非主属性:不是主属性的就是非主属性,包括姓名和系名和系班主任,分数。

函数依赖:函数y=f(x)代表给定一个x值,y的值也是确定的。在数据表中,如果属性x确定的情况下,必定能确定Y的值,那么就说Y函数依赖于X 写作X---Y。

比如在表中,给定一个学号,必定能够获取到唯一的一个姓名。那么就说明姓名依赖于函数学号。写作:学号---姓名。

在表中的以来函数还有

学号---系名

学号---系班主任

完全函数依赖:举例说明:(学号、课名)---成绩【成绩【非主属性】依赖于学号和课名【都是主属性】才能获取唯一的成绩】,少任意一个主属性都不能获取唯一的成绩(学生的分数必须依赖于两个主属性【id和课名】才能获取到唯一的成绩【非主属性】)

完全函数依赖表格举例

部分函数依赖:举例说明:姓名【非主属性】只需要通过id【主属性】就可以确定,不需要另一个主属性(课名),这就叫部分函数依赖(姓名部分函数依赖于id和课名(就是姓名并不是需要通过两个主属性才能获取到,姓名只依赖于id))

第三范式(3NF):在二范式的基础上,消除非主属性对于传递函数依赖。也就是说,如果存在非主属性对于码的传递函数依赖,则不符合三范式的要求

传递函数依赖:如果Y依赖于X,Z又依赖于Y,那可以说Z依赖于X。

比如:系名依赖于id(学号),系主任依赖于系名,那么系主任传递函数依赖于学号。不满足三范式,那么如何解决呢?将其分为更细的表(从而增删改查一条信息不会对其他表造成很大的影响)

综合下来:可以发现三个范式,就是将表中的数据拆分成对应的更细的表【增删改查一个不会对其他的所有表的数据造成影响】,

注意:原则上是不能违反三范式的,但是有的时候我们为了增强查询效率【不用关联查询,直接单表查询】,会设计一些冗余字段,变多表查询为单表查询。称之为反三范式

================================简化版本=================================

 

范式就是规范,就是要遵守的原则。一般要遵守有三种范式

1NF(1范式): 设计数据库表的列的时候,这些列唯一,不可拆分列的原子性,其实这种范式可以不用管,关系型数据库默认都满足。

2NF(2范式):表中行是唯一,通常设计一个主键来实现,通过主键就可以查询到对应的信息。

3NF(3范式): 如果一张表的数据能够通过其他表的外键推导出来,不应该单独设计,通过外键的方式关联查询出来。【避免冗余字段

综合下来:可以发现三个范式,就是将表中的数据拆分成对应的更细的表【增删改查一个不会对其他的所有表的数据造成影响】,

注意:原则上是不能违反三范式的,但是有的时候我们为了增强查询效率【**变多表查询为单表查询】,会设计一些冗余字段,变多表查询为单表查询。称之为反三范式**


http://chatgpt.dhexx.cn/article/MJkOYEfc.shtml

相关文章

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元文法模型,本节将主要介绍由字构词方法、基于词感知机算法的汉语分词方法、基于字的生成模型和区分式模型相结合的汉语分词方法,下面我们就开始讲解由字构词的方法: 由字构词方法 由字构词方法的…

常用分词算法总结(字典、统计、神经网络)

本文转载自公众号“夕小瑶的卖萌屋”,专业带逛互联网算法圈的神操作 -----》我是传送门 关注后,回复以下口令: 回复【789】 :领取深度学习全栈手册(含NLP、CV海量综述、必刷论文解读) 回复【入群】&#xf…

分词算法----正向和逆向最大匹配算法(含Python代码实现)

文章目录 分词算法(Segmentation Method)最大匹配算法(Maximum Matching)需要的前提正向最大匹配算法(Forwards Maximum Match,FMM)逆向最大匹配算法(Reverse Maximum Match,RMM)双向最大匹配算法小结 分词算法(Segmentation Method) 在文本处理流程中&…

自然语言处理——分词算法

引言 分词是自然语言处理中的基本操作,今天我们就来看一下常用的分词算法及实现。 最大匹配算法 所谓的最大匹配指的是匹配最长的单词,通常会指定一个最大长度。根据搜索顺序的不同,主要有前向最大匹配算法、后向最大匹配算法、双向匹配算…

分词算法介绍——千里之行,始于足下

NLP(自然语言处理),对于它来说,如何有效地编码一段文本,是它首先要考虑的问题。而在编码文本之前,要先把它切割成小块,这些小块叫做 tokens,这个过程叫做分词(tokenizati…

C#分词算法

C#分词算法 分词算法的正向和逆向非常简单,设计思路可以参考这里: 中文分词入门之最大匹配法 我爱自然语言处理 http://www.52nlp.cn/maximum-matching-method-of-chinese-word-segmentation 正向最大匹配,简单来说,就是分词的时候&#xf…

windows10家庭版打开组策略

目录 一、新建文本文件,输入以下内容二、鼠标右键单击,以管理员身份运行三、验证 windows10家庭版默认没有放开组策略,可以通过以下方法添加。 一、新建文本文件,输入以下内容 echo offpushd "%~dp0"dir /b C:\Window…

【Windows】Win10家庭版启用组策略gpedit.msc

转载请注明出处,原文链接:https://blog.csdn.net/u013642500/article/details/80138799 【前言】 大家都认为,Windows 10家庭版中并不包含组策略,其实不然,它是有相关文件的,只是不让你使用而已。那么我们让…

win10(家庭版)打开本地组策略失败的处理方法

win10(家庭版)打开本地组策略失败的处理方法 1 新建TXT文件 将下列代码复制粘贴到txt中: echo off pushd “%~dp0” dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum >List.txt…

win10找不到组策略,解决方法

win10找不到组策略,可以用以下办法开启权限: 1.winr 唤出运行,输入notepad创建记事本; 2.输入以下代码并另存为gpedit.bat; echo offpushd "%~dp0"dir /b %systemroot%\Windows\servicing\Packages\Micros…