无敌!关系型数据库范式分析,第一范式、第二范式、第三范式、BC范式、第四范式、第五范式

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核8GB 50GB
简介: 无敌!关系型数据库范式分析,第一范式、第二范式、第三范式、BC范式、第四范式、第五范式

本期文字教程,老刘和大家一起分析分享一下关系型数据库中常用的几个范式。

第一范式:(字段不能重复且不能分解)

我们也叫1NF。这个范式主要还是让我们去看看表中不要存在可以被分割的列,同时表的列不能重复。当然,在实际操作过程中,我们如果录入相同的列,系统也是会报错的。

f22f30cb74ef473995ae253ed2f9f015.png

第二范式:(增加主键)

我们也叫2NF。这个范式的前提是必须要先满足第一范式的要求。当然,2NF的主要特点还是主键(从候选码挑选出来的字段,候选码是能决定唯一一行记录的属性组),所谓主键也是是能够决定一行数据的候选码。也就是说,主键可以是一列或者多列组成的,只要能够根据主键,马上能精确到特定的一行数据即可。

这里要注意的是,主键(我们有时候也会叫主属性)内存的值不能为空!

3d4da5c7e17336d237adc5596da18197.png

第三范式:(消除非主键的传递关系)

我们也叫3NF。这个范式的前提必须先满足第二范式的要求。第三范式主要是要看表中的非主键字段(列)与主键字段是否含有传递关系。什么叫是否有传递关系呢?

假设有一张表如下图:

716c226f6cff4e600ea3606274f43bb1.png

这个表中的“商品类别名称”、“商品类别描述”其实是可以根据“商品类别编号”这个字段去检索到的,在这个表中具有字段传递关系。如果按照这个表去存储数据库的话,意味着要将“商品类别名称”、“商品类别描述”两个字段的数据重复很多次,使得表的空间产生严重冗余。因此,我们考虑将这个表拆分为两个表,如图所示。

512ae19bf06e7c3534db8ee685e371dd.png

这样建立数据表,就符合了数据库第三范式3NF规范。如果我们想要在表内单独增加一个商品类别也相当方便,假设我们系统想要显示出来我们的商品类别,那么就更方便了。

在实际开发中,我们的系统一般符合3NF就可以了,但是在实际工作生产过程中,为了优化我们的系统性能,有时候可能会牺牲数据空间换取工作性能,最终部分表的关系只能符合2NF。这种情况也是非常正常的。

BC范式:(消除主键内的传递关系)

这个范式也叫BCNF。这个范式的前提条件是要先满足第三范式的要求。在BC范式中,比起第三范式来说还多了一个主键内部传递关系的检查。我们举个例子,看图中的表:

fa12e83d89697f0d083875addf9c5344.png

从这个表中,我们可以看出,商品价格是非主属性,店铺、店长、商品名称是主属性(主键),我们可以根据三个字段作为主键去确定找到某个商品的价格。

现在,作为老板的你,想要增加一家店铺,店铺也有商品,但是还没有招聘到店长,这个时候怎么办呢?如果按照以上3NF的要求设计的表,就会无法录入信息到表,因为主键是不能为空的。

所以,我们需要重新设计这个数据表,把它变成符合BCNF的表。即从主键中再次进行分解成其他的表。重新设计后,我们表如下:

ea535de089d8f16fa7d1cf109170d16f.png

这样设计就符合BCNF

第四范式:(消除一个表内的多个多值)

我们也叫做4NF。这个范式的设计我们需要先满足BC要求的前提要求。在4NF中最为特别的就是在一个表内要消除掉多个多值情况。我们还是举个例子,如下表中存在多值的情况。

6c99e10161857b3781d3f41b857064d8.png

首先,上表的设计是符合BC范式的,但我们也能明显看到一个学生肯定会有多个兴趣爱好的情况,一个学生也会有多个家长。因此,我们也可以这个表调整成4NF规范。下图所示。

6d2110ce5a83c7c53ef521c5a6b74e00.png


第五范式:(消除非候选码的表字段连接依赖)

这个范式我们也叫5NF。这个范式首先前提必须要满足4NF。第五范式是指关系模型R依赖均有R候选码所隐含,这是指在连接时,所连接的属性均为候选码。这个是几近于完美的范式,对字段关系要求极高,但是可能会消耗数据库很大性能。这里不做举例了。主要强调一下,5NF主要就是表连接时注意,只能是候选码才能连接才可以。

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
27天前
|
人工智能 运维 关系型数据库
云栖大会|AI时代的数据库变革升级与实践:Data+AI驱动企业智能新范式
2025云栖大会“AI时代的数据库变革”专场,阿里云瑶池联合B站、小鹏、NVIDIA等分享Data+AI融合实践,发布PolarDB湖库一体化、ApsaraDB Agent等创新成果,全面展现数据库在多模态、智能体、具身智能等场景的技术演进与落地。
|
2月前
|
SQL 数据可视化 关系型数据库
MCP与PolarDB集成技术分析:降低SQL门槛与简化数据可视化流程的机制解析
阿里云PolarDB与MCP协议融合,打造“自然语言即分析”的新范式。通过云原生数据库与标准化AI接口协同,实现零代码、分钟级从数据到可视化洞察,打破技术壁垒,提升分析效率99%,推动企业数据能力普惠化。
228 3
|
2月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
114 3
|
2月前
|
缓存 监控 关系型数据库
使用MYSQL Report分析数据库性能(上)
最终建议:当前系统是完美的读密集型负载模型,优化重点应放在减少行读取量和提高数据定位效率。通过索引优化、分区策略和内存缓存,预期可降低30%的CPU负载,同时保持100%的缓冲池命中率。建议每百万次查询后刷新统计信息以持续优化
196 6
|
2月前
|
缓存 监控 关系型数据库
使用MYSQL Report分析数据库性能(中)
使用MYSQL Report分析数据库性能
131 1
|
4月前
|
数据库
数据库三范式
数据库设计中的三范式(1NF、2NF、3NF)用于规范数据结构,减少冗余。1NF 要求字段不可再分,保证原子性;2NF 消除部分依赖,确保非主键列完全依赖主键;3NF 消除传递依赖,非主键列只能依赖主键。遵循三范式可提升数据库的完整性与效率。
113 1
|
4月前
|
SQL 安全 关系型数据库
数据库安全管理新范式:DBKEEPER一体化数据库权限管控堡垒机解决方案
在数字化时代,数据库安全至关重要。DBKEEPER提供一站式数据库安全访问与权限管控解决方案,支持多种数据库,具备精细化权限管理、数据脱敏、高危操作拦截、全面审计等功能,助力企业实现智能、安全的数据治理,满足金融、医疗、互联网等行业合规需求。选择DBKEEPER,让数据库安全管理更高效!
数据库安全管理新范式:DBKEEPER一体化数据库权限管控堡垒机解决方案
|
5月前
|
存储 关系型数据库 MySQL
亿级数据秒级响应:PolarDB MySQL HTAP实时分析方案设计与压测报告
PolarDB MySQL HTAP方案实现亿级数据秒级响应,支持高并发事务与实时分析。通过行列混存、智能路由与资源隔离,满足电商、金融等场景的实时报表、决策需求,降低架构复杂度与运维成本。
204 6
|
9月前
|
存储 数据挖掘 数据处理
2600 万表流计算分析如何做到? 时序数据库 TDengine 助力数百家超市智能化转型
在生鲜超市的高效运营中,实时数据分析至关重要。万象云鼎的“云鲜生”通过智能秤+网关+软件系统的组合,实现了销售数据的精准管理与优化。而在数据处理方面,TDengine 的流计算能力成为了这一方案的核心支撑。本文详细分享了“云鲜生”如何利用 TDengine 高效存储和分析海量销售数据,在优化超市运营、提升用户体验的同时,解决高基数分组、高并发查询等技术挑战。
247 1

热门文章

最新文章