数据库范式(1NF 2NF 3NF BCNF)详解一

数据库设计六大范式,你真的懂了吗? 摘要:数据库范式理论包括1NF到5NF六个层级,各范式间存在包含关系(5NF⊆4NF⊆BCNF⊆3NF⊆2NF⊆1NF)。1NF要求数据不可再分;2NF消除非主属性对主键的部分依赖;3NF消除传递依赖;BCNF要求所有属性完全依赖候选键;4NF处理多值依赖;5NF强调连接属性必须为候选键。实际应用中通常只需满足前三个范式,因为高范式虽能减少冗余,但会增加连接操作影响性能,需在数据规范化和查询效率间取得平衡。 阅读详情

数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。反之则是乱七八糟,不仅给数据库的编程人员制造麻烦,而且面目可憎,可能存储了大量不需要的冗余信息。

 

范式说明

 

1.1 第一范式(1NF)无重复的列

 

    所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。简而言之,第一范式就是无重复的列。

 

说明:在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。

 

例如,如下的数据库表是符合第一范式的:

 

 

字段1

字段2

字段3

字段4

 

而这样的数据库表是不符合第一范式的:

 

 

字段1

字段2

字段3

字段4

 

 

字段3.1

字段3.2

 

     

 

数据库表中的字段都是单一属性的,不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等。很显然,在当前的任何关系数据库管理系统(DBMS)中,傻瓜也不可能做出不符合第一范式的数据库,因为这些DBMS不允许你把数据库表的一列再分成二列或多列。因此,你想在现有的DBMS中设计出不符合第一范式的数据库都是不可能的。

 

1.2 第二范式(2NF)属性完全依赖于主键 [ 消除部分子函数依赖 ]

 

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

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

 

例如员工信息表中加上了员工编号(emp_id)列,因为每个员工的员工编号是惟一的,因此每个员工可以被惟一区分。

简而言之,第二范式(2NF)就是非主属性完全依赖于主关键字。

 

所谓完全依赖是指不能存在仅依赖主关键字一部分的属性(设有函数依赖W→A,若存在XW,有X→A成立,那么称W→A是局部依赖,否则就称W→A是完全函数依赖)。如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。

 

假定选课关系表为SelectCourse(学号, 姓名, 年龄, 课程名称, 成绩, 学分),关键字为组合关键字(学号, 课程名称),因为存在如下决定关系:

 

(学号, 课程名称) → (姓名, 年龄, 成绩, 学分)

 

这个数据库表不满足第二范式,因为存在如下决定关系:

 

(课程名称) → (学分)

 

(学号) → (姓名, 年龄)

 

即存在组合关键字中的字段决定非关键字的情况。

 

由于不符合2NF,这个选课关系表会存在如下问题:

 

(1) 数据冗余:

 

同一门课程由n个学生选修,"学分"就重复n-1次;同一个学生选修了m门课程,姓名和年龄就重复了m-1次。

 

(2) 更新异常:

 

若调整了某门课程的学分,数据表中所有行的"学分"值都要更新,否则会出现同一门课程学分不同的情况。

 

(3) 插入异常:

 

假设要开设一门新的课程,暂时还没有人选修。这样,由于还没有"学号"关键字,课程名称和学分也无法记录入数据库。

 

(4) 删除异常:

 

假设一批学生已经完成课程的选修,这些选修记录就应该从数据库表中删除。但是,与此同时,课程名称和学分信息也被删除了。很显然,这也会导致插入异常。

 

把选课关系表SelectCourse改为如下三个表:

 

学生:Student(学号, 姓名, 年龄);

 

课程:Course(课程名称, 学分);

 

选课关系:SelectCourse(学号, 课程名称, 成绩)。

 

这样的数据库表是符合第二范式的, 消除了数据冗余、更新异常、插入异常和删除异常。

 

另外,所有单关键字的数据库表都符合第二范式,因为不可能存在组合关键字。

 

1.3 第三范式(3NF)属性不依赖于其它非主属性 [ 消除传递依赖 ]

 

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

    满足第三范式(3NF)必须先满足第二范式(2NF)。第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。

 

例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在的员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。

 

第三范式(3NF):在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式。简而言之,第三范式就是属性不依赖于其它非主属性。

 

所谓传递函数依赖,指的是如果存在"A → B → C"的决定关系,则C传递函数依赖于A。

 

因此,满足第三范式的数据库表应该不存在如下依赖关系:

 

关键字段 → 非关键字段x → 非关键字段y

 

假定学生关系表为Student(学号, 姓名, 年龄, 所在学院, 学院地点, 学院电话),关键字为单一关键字"学号",因为存在如下决定关系:

 

(学号) → (姓名, 年龄, 所在学院, 学院地点, 学院电话)

 

这个数据库是符合2NF的,但是不符合3NF,因为存在如下决定关系:

 

(学号) → (所在学院) → (学院地点, 学院电话)

 

即存在非关键字段"学院地点"、"学院电话"对关键字段"学号"的传递函数依赖。

 

它也会存在数据冗余、更新异常、插入异常和删除异常的情况,读者可自行分析得知。

 

把学生关系表分为如下两个表:

 

学生:(学号, 姓名, 年龄, 所在学院);

 

学院:(学院, 地点, 电话)。

 

这样的数据库表是符合第三范式的,消除了数据冗余、更新异常、插入异常和删除异常。

 

1.4 鲍依斯-科得范式(BCNF是3NF的改进形式)

 

若关系模式R是第一范式,且每个属性都不传递依赖于R的候选键。这种关系模式就是BCNF模式。即在第三范式的基础上,数据库表中如果不存在任何字段对任一候选关键字段的传递函数依赖则符合鲍依斯-科得范式。

 

假设仓库管理关系表为StorehouseManage(仓库ID, 存储物品ID, 管理员ID, 数量),且有一个管理员只在一个仓库工作;一个仓库可以存储多种物品。这个数据库表中存在如下决定关系:

 

(仓库ID, 存储物品ID) →(管理员ID, 数量)

 

(管理员ID, 存储物品ID) → (仓库ID, 数量)

 

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

 

(仓库ID) → (管理员ID)

 

(管理员ID) → (仓库ID)

 

即存在关键字段决定关键字段的情况,所以其不符合BCNF范式。它会出现如下异常情况:

 

(1) 删除异常:

 

当仓库被清空后,所有"存储物品ID"和"数量"信息被删除的同时,"仓库ID"和"管理员ID"信息也被删除了。

 

(2) 插入异常:

 

当仓库没有存储任何物品时,无法给仓库分配管理员。

 

(3) 更新异常:

 

如果仓库换了管理员,则表中所有行的管理员ID都要修改。

 

把仓库管理关系表分解为二个关系表:

 

仓库管理:StorehouseManage(仓库ID, 管理员ID);

 

仓库:Storehouse(仓库ID, 存储物品ID, 数量)。

 

这样的数据库表是符合BCNF范式的,消除了删除异常、插入异常和更新异常。

 

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

 

       
 
                     

数据库原理-模式分解算法详解(3NF BCNF) 模式分解算法模式分解的要求无损连接保持函数依赖模式分解的算法范式简述3NF的保持依赖性分解3NF的无损连接与依赖保持分解BCNF的无损连接分解 模式分解的要求 无损连接 保持函数依赖 模式分解的算法 范式简述 3NF的保持依赖性分解 3NF的无损连接与依赖保持分解 BCNF的无损连接分解 ... 阅读详情

相关推荐

数据库入门(一)范式理解:1NF,2NF,3NF,BCNF,4NF详析

数据库入门(一)范式理解:1NF,2NF,3NF,BCNF,4NF详析引言范式种类第一范式(1NF)符合1NF的关系中的每个属性都不可再分存在问题第二范式(2NF)在1NF基础上消除了非主属性对码的部分函数依赖二范式判断步骤优缺点第三范式(3NF)在2NF基础上消除非主属性对码的传递函数依赖优缺点BCNF范式(3NF的改进形式)BCNF条件为什么引入BCNF解决方法第四范式(4NF)相关概念介绍多值依赖Teaching模式中存在的问题平凡函数依赖和非平凡的函数依赖多值依赖与函数依赖的区别了解4NFPoint总结 引言 Normal Form范式是“符合某一种级别的关系模式的集合,表示一个关系内

数据库常见4种范式

常见的4种数据库设计范式

NorthSmile的博客 5476

MATLAB新手也能懂:用MATPOWER 8.0b搞定电力系统潮流计算(附case9实战代码)

本文详细介绍了如何使用MATPOWER 8.0b在MATLAB中进行电力系统潮流计算,特别适合新手入门。通过case9实战案例,讲解了从安装配置到运行牛顿-拉夫逊法潮流计算的全过程,包括结果分析和常见问题处理,帮助读者快速掌握这一电力系统分析的核心技能。

weixin_26757925的博客 380

[ 数据库原理 ] 数据库范式概念:1NF、2NF、3NF、BCNF详解及其应用总结

1NF:满足原子性,字段不可再分割字段都是单一属性2NF:满足完全依赖,消除部分子函数依赖(列不能混着用)要求我们使用唯一主键3NF:消除非主属性传递依赖非主属性之间不能存在函数依赖BCNF:消除主属性传递依赖主码(主键)之间不存在依赖只要是关系型数据库的表,都满足第一范式。第一范式本质更多的是对关系型数据库的一个限定。第二、第三范式更多的是对数据库表合理设计的一个要求,理解第二、第三范式能够更好的帮助我们设计数据库表。[ 本文作者 ] bluetata。

我在山城重庆,我希望能为这片软件沙漠地带贡献自己的一滴水,Stay tuned! 1万+

NVIDIA Isaac平台体验:Isaac Sim与Isaac ROS的快速了解

NVIDIA Isaac平台是一个专为机器人和人工智能(AI)打造的加速平台,旨在为开发者提供一个全面的工具集,以加速机器人相关应用的开发和部署。材质定义语言(MDL)是一种用于描述材质属性和行为的编程语言,能够精确地定义材质的光学特性和物理属性。NVIDIA Isaac Sim 通过支持 MDL,进一步提升了仿真环境中材质的真实感和细节表现。精确的材质定义:MDL 允许开发者精确地定义材质的光学特性和物理属性,如反射率、折射率、粗糙度和透明度等。这使得仿真环境中的物体看起来更加真实和自然。动态材质。

全世界的博客 4万+

内存设计指南:01 Xilinx DDR4 design guide解析

最近有很多网友咨询FPGA DDR4为什么速率总是上不去的问题,发现他们的设计确实很随意,都没有遵守一些手册的基本要求,所以今天和大家一起重新读一读DDR4 design guide,看看哪些要求是一定不能忽略的。首次设计一款新的芯片或者内存方案时,可能会无从下手。对于内存设计,官方指导首推JEDEC规范,每一代内存推出时,在JEDEC官网均能找到对应的规范文档、各种内存形式的说明文档如DDR4-JESD79、DDR4 SDRAM UDIMM Design Specification以及内存条DEMO等。

halee_00的博客 3302

数据库范式 1NF 2NF 3NF BCNF 详解示例

数据库范式1NF 2NF 3NF BCNF(实例)     设计范式(范式,数据库设计范式,数据库的设计范式)是符合某一种级别的关系模式的集合。构造数据库必须遵循一定的规则。在关系数据库中,这种规则就是范式。关系数据库中的关系必须满足一定的要求,即满足不同的范式。目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六

wx782870649的专栏 3338

Python 打包与发布陷阱:如何用 setuptools 和 PyInstaller 生成跨平台可执行文件?

使用。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1207

数据库六种范式详解(1NF/2NF/3NF/BCNF/4NF/5NF)

文章目录数据库的基本概念函数依赖函数依赖的定义函数依赖与属性的关系六种范式第一范式(1NF)第二范式(2NF)第三范式(3NF)巴斯-科德范式(BCNF,Boyce-Codd Normal Form)第四范式(4NF)第五范式(5NF)范式规范化路线范式规范化实例 数据库的基本概念 范式: 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式。 各种范...

记忆碎片的博客 3万+

如何解决Windows系统中缺失oem*.inf文件导致的软件运行问题

本文详细解析了Windows系统中因oem*.inf文件缺失导致软件无法运行的常见问题。文章阐述了oem*.inf文件作为安装信息文件的重要作用,并提供了从精准定位文件路径、安全获取与替换文件的手动修复步骤,到利用专业工具进行一站式修复的完整解决方案。最后,还给出了从软件安装来源、卸载习惯到系统维护等方面的预防措施,帮助用户彻底避免此类问题。

water的专栏 546

Dia 使用说明

简述 在linux上面能找到dia这个工具还是挺幸运的,因为之前画流程图总是使用ubuntu默认的word工具 在里面画图,感觉流程图使用起来麻烦,并且视觉效果真的不好看。 自从使用Dia后,感觉至少画起来流程图会变得越来越标准了。但是Dia也存在问题,就是使用的文档很少,使用中遇到为后,查起来比较费劲,但是至少问题不是很多,所以使用中遇到的几点问题我就记下来,和大家分享,加快大家的开发和文档整理能力。 我会按照遇到的问题来说,不存在使用的先后顺序。 1. Dia 去掉背景中的线条 首先去点那个大一点的蓝色

linan101的博客 4926

数据库范式(1NF 2NF 3NF BCNF)详解

数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。反之则是乱七八糟,不仅给数据库的编程人员制造麻烦,而且面目可憎,可能存储了大量不需要的冗余信息。   范式说明   1.1 第一范式(1NF)无重复的列       所谓第一范式(1NF)是指数据库表的每一列都是

Rocky 5万+

驾驶行为检测数据集准备与处理详解

本文详细介绍了构建"未系安全带/打电话"检测模型的数据集准备流程。首先分析公开数据集(如StateFarm、AICityChallenge)的优缺点,并提供格式转换脚本。重点推荐自行采集+半自动标注方案:1)视频关键帧提取;2)使用预训练模型生成伪标签;3)人工修正标注;4)数据增强(光照变化、运动模糊等)。文章还包含数据配置文件编写指南,并针对类别不平衡、小目标检测等常见问题提出解决方案,如过采样、切片训练和负样本挖掘。通过这套流程可构建高质量数据集,为模型训练奠定基础。

u010117029的博客 356

外行人都能看懂的技术文章系列——数据库范式1NF,2NF,3NF,BCNF,4NF,5NF,6NF举例详解

数据库范式1NF,2NF,3NF,BCNF,4NF,5NF,6NF举例详解 目录 1. 致读者 2. 基本概念(作者自己的定义) 3. 本文范例场景 4. 正文 第一范式(1NF) 第二范式(2NF) 第三范式(3NF) BC范式(BCNF) 第四范式(4NF) 第五范式(5NF) 第六范式(6NF) 总结 补充说明 1. 致读者 此文章是作者首次写作的技术文章,内容都是自己的理解,其中一定有不少错误,如果您有不赞同或者不理解的地方,恳请您提出宝贵意见! 2. 基本概念(作

qq_43413500的博客 6324

QProgressBar:常用接口、样式表及自定义进度条实现

在Qt开发中,QProgressBar 是一个非常常用的控件,用于显示任务的进度。无论是文件下载、数据处理还是其他耗时操作,QProgressBar 都能直观地展示当前进度。本文将详细介绍QProgressBar 的使用方法,包括常用接口、样式表设置,并额外补充一个自定义进度条的C++实现。

u011186532的专栏 1012

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

mysql bcnf_数据库范式(1NF 2NF 3NF BCNF)详解一

数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。反之则是乱七八糟,不仅给数据库的编程人员制造麻烦,而且面目可憎,可能存储了大量不数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)...

weixin_39942335的博客 1221

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

数据库范式1NF,2NF,3NF,BCNF详解

数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。反之则是乱七八糟,不仅给数据库的编程人员制造麻烦,而且面目可憎,可能存储了大量不需要的冗余信息。 设计范式是不是很难懂呢?非也,大学教材上给我们一堆数学公式我们当然看不懂,也记不住。所以我们很多人就根本不按照范式来设计数据

Arrows' Dairy 2364

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

[转]数据库范式(1NF 2NF 3NF BCNF)详解一

数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。反之则是乱七八糟,不仅给数据库的编程人员制造麻烦,而且面目可憎,可能存储了大量不需要的冗余信息。   范式说明   1.1 第一范式(1NF)无重复的列       所谓第一范式(1NF)是指数据库表的每一列都...

Jayke Lin 652

数据库范式详解:从 1NF、2NF、3NF 到 BCNF、4NF,原理、实例与工程实践

本文将从基础概念出发,结合连贯的业务实例,逐层拆解 1NF、2NF、3NF、BCNF、4NF 的核心定义、解决的问题与实际应用,同时补充工程场景下的设计权衡,帮你彻底吃透数据库范式。

weixin_44762713的博客 718

【软考】数据库范式详解 (1NF、2NF、3NF、BCNF;包括候选键、非平凡函数)

1NF、2NF、3NF和BCNF是关系数据库中常用的范式(Normalization)概念,用于设计规范化的数据库模式,确保数据库的数据结构良好、无冗余、便于管理和维护。

代码的魅力,根本走不出来 2699

数据库系统概论——函数依赖、码和范式(1NF、2NF、3NF、BCNF)详解

关系模式由五部分组成,即它是一个五元组: R(U,D,DOM,F)R(U, D, DOM, F)R(U,D,DOM,F)关系模式R(U,D,DOM,F)R(U, D, DOM, F)R(U,D,DOM,F)中,DDD和DOMDOMDOM与逻辑结构设计关系不大,因此,将关系模式简化为一个三元组:当且仅当UUU上的一个关系rrr 满足FFF时,rrr称为关系模式R(U,F)R(U, F)R(U,F)的一个。设R(U)R(U)R(U)是一个属性集UUU上的关系模式,XXX和YYY是UUU的子集。若对于R(U)R(

ai领域探索者,欢迎一起交流,目前从事具身智能行业。 6047
上一篇: 构造函数和析构函数在基类和派生类之间的调用顺序
下一篇: 数据库范式(1NF 2NF 3NF BCNF)详解二
ustc_max
博客等级 码龄14年 5粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值