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

article/2025/8/25 18:01:03

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


泛化时在识别数据库中的一个数据元素、关系以及定义所需的表和各表中的项目这些初始工作之后的一个细化的过程。常见的范式有1NF、2NF、3NF、BCNF以及4NF。下面对这几种常见的范式进行简要分析。


1、1NF(第一范式)

第一范式是指数据库表中的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。


如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。第一范式的模式要求属性值不可再分裂成更小部分,即属性项不能是属性组合或是由一组属性构成。


简而言之,第一范式就是无重复的列。例如,由“职工号”“姓名”“电话号码”组成的表(一个人可能有一部办公电话和一部移动电话),这时将其规范化为1NF可以将电话号码分为“办公电话”和“移动电话”两个属性,即职工(职工号,姓名,办公电话,移动电话)。


2、2NF(第二范式)

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


如果关系模型R为第一范式,并且R中的每一个非主属性完全函数依赖于R的某个候选键,则称R为第二范式模式(如果A是关系模式R的候选键的一个属性,则称A是R的主属性,否则称A是R的非主属性)。


例如,在选课关系表(学号,课程号,成绩,学分),关键字为组合关键字(学号,课程号),但由于非主属性学分仅依赖于课程号,对关键字(学号,课程号)只是部分依赖,而不是完全依赖,因此此种方式会导致数据冗余以及更新异常等问题,解决办法是将其分为两个关系模式:学生表(学号,课程号,分数)和课程表(课程号,学分),新关系通过学生表中的外关键字课程号联系,在需要时进行连接。


3、3NF(第三范式)

如果关系模型R是第二范式,且每个非主属性都不传递依赖于R的候选键,则称R是第三范式的模式。


以学生表(学号,姓名,课程号,成绩)为例,其中学生姓名无重名,所以该表有两个候选码(学号,课程号)和(姓名,课程号),故存在函数依赖:学号——>姓名,(学号,课程号)——>成绩,唯一的非主属性成绩对码不存在部分依赖,也不存在传递依赖,所以属性属于第三范式。


4、BCNF(BC范式)

它构建在第三范式的基础上,如果关系模型R是第一范式,且每个属性都不传递依赖于R的候选键,那么称R为BCNF的模式。


假设仓库管理关系表(仓库号,存储物品号,管理员号,数量),满足一个管理员只在一个仓库工作;一个仓库可以存储多种物品,则存在如下关系:

(仓库号,存储物品号)——>(管理员号,数量)

(管理员号,存储物品号)——>(仓库号,数量)

所以,(仓库号,存储物品号)和(管理员号,存储物品号)都是仓库管理关系表的候选码,表中唯一非关键字段为数量,它是符合第三范式的。但是,由于存在如下决定关系:

(仓库号)——>(管理员号)

(管理员号)——>(仓库号)

即存在关键字段决定关键字段的情况,因此其不符合BCNF。把仓库管理关系表分解为两个关系表仓库管理表(仓库号,管理员号)和仓库表(仓库号,存储物品号,数量),这样这个数据库表是符合BCNF的,并消除了删除异常、插入异常和更新异常。


5、4NF(第四范式)

设R是一个关系模型,D是R上的多值依赖集合。如果D中存在凡多值依赖X->Y时,X必是R的超键,那么称R是第四范式的模式。


例如,职工表(职工编号,职工孩子姓名,职工选修课程),在这个表中,同一个职工可能会有多个职工孩子姓名,同样,同一个职工也可能会有多个职工选修课程,即这里存在着多值事实,不符合第四范式。如果要符合第四范式,只需要将上表分为两个表,使它们只有一个多值事实,例如职工表一(职工编号,职工孩子姓名),职工表二(职工编号,职工选修课程),两个表都只有一个多值事实,所以符合第四范式。


拓展:各范式的关系图如下所示:



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

相关文章

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

李根 发自 凹非寺 量子位 报道 | 公众号 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…

数据倾斜及其解决方式

数据倾斜是大数据领域绕不开的拦路虎,当你所需处理的数据量到达了上亿甚至是千亿条的时候,数据倾斜将是横在你面前一道巨大的坎。很可能有几周甚至几月都要头疼于数据倾斜导致的各类诡异的问题。 数据倾斜是指:mapreduce程序执行时&#xff0…

Hive 数据倾斜

数据倾斜,即单个节点任务所处理的数据量远大于同类型任务所处理的数据量,导致该节点成为整个作业的瓶颈,这是分布式系统不可能避免的问题。从本质来说,导致数据倾斜有两种原因,一是任务读取大文件,二是任务…

Spark数据倾斜解决

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

大数据篇--数据倾斜

文章目录 一、什么是数据倾斜二、结合Shuffle1.结合mapreduce的shshuffle来说:(1)Shuffle 机制(2)Shuffle 阶段的优化 2.结合spark的shshuffle来说:(1)Spark任务调度:&am…

spark 数据倾斜

一. 数据倾斜的现象 1、spark中一个stage的执行时间受限于最后那个执行完的task,因此运行缓慢的任务会拖累整个程序的运行速度(分布式程序运行的速度是由最慢的那个task决定的)比如,总共有1000个task,997个task都在1分…

Spark处理数据倾斜问题

写在前面:有博主的文章写的很好,很详细,推荐! 参考:Spark如何处理数据倾斜(甚好,甚详细,很有逻辑,强推!) spark数据倾斜解决方案汇总 1、什么是数…

如何处理Spark数据倾斜

一、什么是数据倾斜 在分布式集群计算中,数据计算时候数据在各个节点分布不均衡,某一个或几个节点集中80%数据,而其它节点集中20%甚至更少数据,出现了数据计算负载不均衡的现象。 数据倾斜在MR编程模型中是十分常见的&#xff0…

数据倾斜

数据倾斜 转载声明 本文大量内容系转载自以下文章,有删改,并参考其他文档资料加入了一些内容: Spark性能优化指南——高级篇 作者:李雪蕤 出处:美团技术团队博客漫谈千亿级数据优化实践:数据倾斜&#x…

大数据常见问题:数据倾斜的原理及处理方案

什么是数据倾斜 Hadoop能够进行对海量数据进行批处理的核心,在于它的分布式思想,通过多台服务器(节点)组成集群,共同完成任务,进行分布式的数据处理。 理想状态下,一个任务是由集群下所有机器…

数据倾斜问题

一、什么是数据倾斜 简单来说,就是在数据计算的时候,数据会分配到不同的task上执行,当数据分配不均匀导致某些大批量数据分配到某几个task上就会造成计算不动或者异常的情况。 二、数据倾斜表现形式 1、大部分的task在计算的时候计算的特别…

数据倾斜常见原因和解决办法

数据倾斜在MapReduce编程模型中十分常见,多个节点并行计算,如果分配的不均,就会导致长尾问题(大部分节点都完成了任务,一直等待剩下的节点完成任务),本文梳理了常见的发生倾斜的原因以及相应的解…