数据库六大范式详解

article/2025/8/25 14:20:29

å¨è¿éæå¥å¾çæè¿°

候选码

某一属性组的值能唯一标识一个元组,而其子集不能,则称该属性组为候选码。若一个关系中有多个候选码,则选定其中一个为主码。
例如下图所示的学生表中,学号和姓名都可以唯一标识一个元组,故该表的候选码为学号和姓名,我们可以随便选定其中一个作为主码。

å¨è¿éæå¥å¾çæè¿°

主属性

所有候选码的属性称为主属性。不包含在任何候选码中的属性称为非主属性或非码属性
在上面的学生表中,学号和姓名就是该关系的主属性,年龄和性别就是非主属性。

函数依赖

设R为任一给定的关系,如果对于R中属性X的每一个值,R中的属性Y只有唯一值与之对应,则称X函数决定Y或Y函数依赖于X,记作X——>Y。其中X称为决定因素。
通俗一点,就是给定一个X都有唯一的Y。可以理解为函数y=f(x);对于 任意的x 都有一个y,且y的取值有x决定。

例如:学号可以唯一确定一个学生的年龄、姓名等信息。

完全函数依赖

如果存在 X 属性组(注意是组,说明是联合主键)决定 唯一的 Y ,但 X 中的任一子集却不能决定唯一的 Y,则 Y 完全依赖于 X。
例如:学生的成绩由学生与课程共同决定。所以成绩完全依赖于学生与课程。

部分函数依赖

与完全函数依赖相反:如果存在 X 属性组(注意是组,说明是联合主键)决定 唯一的 Y ,且 X 中的任一子集都能能决定唯一的 Y,则 Y 部分依赖于X。
例如:在没有同名的情况下,学号与姓名都可以决定一个学生的年龄、性别等信息。

传递函数依赖

设 R 为任一给定关系, X Y Z 为其不同的属性子集,若 X —> Y 且 Y —>Z,则有 X —>Z,称为 Z 传递函数依赖于 X
例如:学号可以唯一确定一个系部,且系部可以唯一确定一个系主任。

什么是范式

范式来自英文Normal form,简称NF。要想设计—个好的关系,必须使关系满足一定的约束条件,此约束已经形成了规范,这就是我们俗称的范式。范式分成几个等级,一级比一级要求得严格。

范式的分类

目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般来说,数据库只需满足第三范式(3NF)就行了。

第一范式(1NF)

强调属性的原子性。即属性不可再分。
不符合:
在这里插入图片描述
符合:

å¨è¿éæå¥å¾çæè¿°

第二范式(2NF)

第二范式必须满足第一范式。
第二范式是指每个关系必须有一个(有且仅有一个)数据项作为主键,其他数据项与主键一一对应,即其他数据项完全依赖于主键。由此可知单主属性的关系均属于第二范式。
判断一个范式是否符合第二范式

å¨è¿éæå¥å¾çæè¿°

第三范式(3NF)

非主属性既不传递依赖于码,也不部分依赖于码。
理解:即在第二范式的基础上,消除了非主属性对码的传递依赖。
比如:

å¨è¿éæå¥å¾çæè¿°

巴斯-科德范式(BCNF)

所有属性都完全依赖于码,每一个决定因素都包含码。
理解:一个满足BC范式的关系模式有:

  1. 所有非主属性对每一个码都是完全函数依赖;
  2. 所有主属性对每一个不包含它的码也是完全函数依赖;
  3. 没有任何属性完全函数依赖于非码的任何一组属性。

例如有关系模式C(Cno, Cname, Pcno),Cno, Cname, Pcno依次表示课程号、课程名、先修课。可知关系C只有一个码Cno,且没有任何属性对Cno部分函数依赖或传递函数依赖,所以关系C属于第三范式,同时Cno是C中的唯一决定因素,所以C也属于BC范式。

要了解 BCNF 范式,那么先看这样一个问题:

若:

  1. 某公司有若干个仓库;
  2. 每个仓库只能有一名管理员,一名管理员只能在一个仓库中工作;
  3. 一个仓库中可以存放多种物品,一种物品也可以存放在不同的仓库中。每种物品在每个仓库中都有对应的数量。

那么关系模式 仓库(仓库名,管理员,物品名,数量) 属于哪一级范式?

答:已知函数依赖集:仓库名 → 管理员,管理员 → 仓库名,(仓库名,物品名)→ 数量
码:(管理员,物品名),(仓库名,物品名)
主属性:仓库名、管理员、物品名
非主属性:数量
∵ 不存在非主属性对码的部分函数依赖和传递函数依赖。∴ 此关系模式属于3NF。

基于此关系模式的关系(具体的数据)可能如图所示:

好,既然此关系模式已经属于了 3NF,那么这个关系模式是否存在问题呢?我们来看以下几种操作:

  1. 先新增加一个仓库,但尚未存放任何物品,是否可以为该仓库指派管理员?——不可以,因为物品名也是主属性,根据实体完整性的要求,主属性不能为空。
  2. 某仓库被清空后,需要删除所有与这个仓库相关的物品存放记录,会带来什么问题?——仓库本身与管理员的信息也被随之删除了。
  3. 如果某仓库更换了管理员,会带来什么问题?——这个仓库有几条物品存放记录,就要修改多少次管理员信息。

从这里我们可以得出结论,在某些特殊情况下,即使关系模式符合 3NF 的要求,仍然存在着插入异常,修改异常与删除异常的问题,仍然不是 ”好“ 的设计。

造成此问题的原因:存在着主属性对于码的部分函数依赖与传递函数依赖。(在此例中就是存在主属性【仓库名】对于码【(管理员,物品名)】的部分函数依赖。

解决办法就是要在 3NF 的基础上消除主属性对于码的部分与传递函数依赖。

仓库(仓库名,管理员)
库存(仓库名,物品名,数量)

这样,之前的插入异常,修改异常与删除异常的问题就被解决了。

以上就是关于 BCNF 的解释。

第四范式(4NF)

定义:限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖。

理解: 显然一个关系模式是4NF,则必为BCNF。也就是说,当一个表中的非主属性互相独立时(3NF),这些非主属性不应该有多值,若有多值就违反了4NF。

四种范式之间存在如下关系

第五范式(5NF)

第五范式有以下要求:
(1)必须满足第四范式;
(2)表必须可以分解为较小的表,除非那些表在逻辑上拥有与原始表相同的主键。
第五范式是在第四范式的基础上做的进一步规范化。第四范式处理的是相互独立的多值情况,而第五范式则处理相互依赖的多值情况。


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

相关文章

[数据库] 第一范式、第二范式、第三范式、BC范式

要搞清楚常见范式,需得先了解以下概念 数据描述术语对应表 关键码 1) 超键:在关系中能唯一标识元组的属性或属性集称为关键模式的超键。 2) 候选键:不含有多余属性的超键称为候选键。也就是在候选键中在删除属性就不是键了。 3) 主键…

第一范式,第二范式,第三范式,BCNF范式理解

第一范式、第二范式、第三范式 参考了https://www.zhihu.com/question/24696366 https://www.cnblogs.com/lca1826/p/6601395.html 基础知识 实体:现实世界中客观存在并可以被区别的事物。比如“一个学生”、“一本书”、“一门课”等等。值得强调的是这里所说的“…

数据库|第一范式、第二范式、第三范式、BC范式、第四范式简单理解

数据库|第一范式、第二范式、第三范式、BC范式、第四范式简单理解 在设计数据库的时候,虽说将我们要的数据正确完整导入数据库是很关键的,但是对于数据库的设计者来说,如何将大量数据合理有效正确地导入数据库中也是极其关键的,好…

简单了解第一,二,三范式(图文详细)

简单了解第一,二,三范式 什么是范式第一范式第二范式第三范式 什么是范式 范式:范式是符合某一种级别的关系模式的集合,表示一个关系内部属性之间的联系何合理化程度 粗略理解:就是一张数据表的表结构所符合的某种设…

第一范式、第二范式、第三范式、BCNF范式详解

文章目录 0. 范式(NF)1. 第一范式(1NF)2. 第二范式(2NF)2.1 函数依赖2.1.1完全函数依赖2.1.2 部分函数依赖2.1.3 传递函数依赖 2.2 码2.3 非主属性 3. 第三范式(3NF)4. BCNF范式5. 小结6. 参考文献 0. 范式…

详解第一范式、第二范式、第三范式、BCNF范式

GITHUB: https://github.com/wenkechen 文章目录 什么是”范式(NF)”1. 第一范式(1NF)2. 第二范式(2NF)2.1 函数依赖2.1.1完全函数依赖2.1.2 部分函数依赖 2.2 码2.3 非主属性 3. 第三范式(3NF)4. 小结 什么…

范式说明:第四范式

4NF取决于多值依赖的概念。 FD函数依赖(X→Y表示:X函数决定Y,或Y函数依赖于X),主要解决了关系R中属性值之间的“多对一”联系,即属性X与属性Y是“多对一”。而多值依赖主要是解决属性值之间的“一对多”联系…

数据库关系范式——第一范式、第二范式、第三范式、BC范式【通俗易懂,博主会讲人话】

范式:是符合某一种级别的关系模式的集合。 说白了,就是对关系模式的一种规范化。 范式分为:第一范式、第二范式、第三范式、BC范式、第四范式、第五范式。后面两种在这里不讨论。 1、第一范式(1NF):关系模式S中的所有属性都是不…

数据库三大范式、BC范式、第四范式

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

【高效学数据库】第一范式、第二范式、BCNF范式、第三范式、第四范式概念及举例

本专栏将从基础开始,循序渐进的讲解数据库的基本概念以及使用,希望大家都能够从中有所收获,也请大家多多支持。 专栏地址: 数据库必知必会 如果文章知识点有错误的地方,请指正!大家一起学习,一起进步。 …

数据库-第一范式、第二范式、第三范式、BC范式、第四范式简析

在设计与操作维护数据库时,最关键的问题就是要确保数据能够正确地分布到数据库的表中。使用正确的数据结构,不仅有助于对数据库进行相应的存取操作,还可以极大地简化应用程序中的其他内容(查询、窗体、报表、代码等),按照“数据库…

专访戴文渊:第四范式(现在)是一家怎样的公司?

李根 发自 凹非寺 量子位 报道 | 公众号 QbitAI △ 第四范式创始人及CEO戴文渊 第四范式是一家备受关注的公司。 仅创始团队成员来看,哪一个不是计算机、机器学习领域响当当的名字? 戴文渊是ACM2005全球冠军,百度机器学习系统带队打造者&…

Spark数据倾斜优化

Spark数据倾斜 就是数据分到各个区的数量不太均匀,可以自定义分区器,想怎么分就怎么分。 Spark中的数据倾斜问题主要指shuffle过程中出现的数据倾斜问题,是由于不同的key对应的数据量不同导致的不同task所处理的数据量不同的问题。 例如,reduced端一共…

Flink中的数据倾斜与解决方案实践

什么是数据倾斜 在使用一些大数据处理框架进行海量数据处理的过程中,可能会遇到数据倾斜的问题,由于大数据处理框架本身架构的原因,在框架层面,数据倾斜问题是无法避免的,只能在业务层面来缓解或者避免。 因为要处理…

spark处理数据倾斜的案例

在前期的工作遇到了很多数据倾斜的案例,在此记录下解决的心得 1) 大表join小表: 执行某段sql,出现了Executor OOM的现象,查看其stage的状况: 第3个stage读取了21.1G的数据,并shuffle写入了2.6G的数据,由于两个表根据字…

redis之数据倾斜如何处理

写在前面 我们在使用Redis分片集群时,集群最好的状态就是每个实例可以处理相同或相近比例的请求,但如果不是这样,则会出现某些实例压力特别大,而某些实例特别空闲的情况发生,本文就一起来看下这种情况是如何发生的以及…

实操 | Hive 数据倾斜问题定位排查及解决

Hive 数据倾斜怎么发现,怎么定位,怎么解决 多数介绍数据倾斜的文章都是以大篇幅的理论为主,并没有给出具体的数据倾斜案例。当工作中遇到了倾斜问题,这些理论很难直接应用,导致我们面对倾斜时还是不知所措。 本文首发在…

数据倾斜原理及解决方案

导读 相信很多接触MapReduce的朋友对数据倾斜这四个字并不陌生,那么究竟什么是数据倾斜?又该怎样解决这种该死的情况呢? 何为数据倾斜? 在弄清什么是数据倾斜之前,我想让大家看看数据分布的概念: 正常的数据分布理论上都是倾斜的,就是我们所说的20-80原理&…

spark 数据倾斜调优

数据倾斜应该算是一个比较麻烦的问题,笔者也是刚刚开始学习相关的调优,将看到的比较全面、清晰的几种解决方案整合了一下,并加上了一些理解与心得,供参考! 首先,需要对spark执行计划有一定的基础与理解&am…

如何解决mysql数据倾斜_数据倾斜解决方案

1)聚合原数据(主要操作的是hive数据库中的数据,先通过hive sql将相同key的数据聚合成一条数据,再进行map操作) 当没办法聚合成一条数据时:增大key粒度,从而key的数量会减少,但是每个key对应的数据量会增大&#xff0c…