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

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 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数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
4月前
|
关系型数据库 MySQL 分布式数据库
PolarDB 与传统数据库的性能对比分析
【8月更文第27天】随着云计算技术的发展,越来越多的企业开始将数据管理和存储迁移到云端。阿里云的 PolarDB 作为一款兼容 MySQL 和 PostgreSQL 的关系型数据库服务,提供了高性能、高可用和弹性伸缩的能力。本文将从不同角度对比 PolarDB 与本地部署的传统数据库(如 MySQL、PostgreSQL)在性能上的差异。
281 1
|
1月前
|
存储 SQL Apache
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
Apache Doris 是一个基于 MPP 架构的高性能实时分析数据库,以其极高的速度和易用性著称。它支持高并发点查询和复杂分析场景,适用于报表分析、即席查询、数据仓库和数据湖查询加速等。最新发布的 2.0.2 版本在性能、稳定性和多租户支持方面有显著提升。社区活跃,已广泛应用于电商、广告、用户行为分析等领域。
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
|
22天前
|
关系型数据库 分布式数据库 数据库
PolarDB 以其出色的性能和可扩展性,成为大数据分析的重要工具
在数字化时代,企业面对海量数据的挑战,PolarDB 以其出色的性能和可扩展性,成为大数据分析的重要工具。它不仅支持高速数据读写,还通过数据分区、索引优化等策略提升分析效率,适用于电商、金融等多个行业,助力企业精准决策。
33 4
|
2月前
|
SQL 关系型数据库 MySQL
Vanna使用ollama分析本地数据库
这篇文章详细介绍了如何使用Vanna和Ollama框架来分析本地数据库,实现自然语言查询转换为SQL语句并与数据库交互的过程。
352 7
Vanna使用ollama分析本地数据库
|
1月前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
61 2
|
1月前
|
存储 数据库
数据库设计三范式
数据库设计三范式
26 0
|
2月前
|
存储 分布式计算 数据库
阿里云国际版设置数据库云分析工作负载的 ClickHouse 版
阿里云国际版设置数据库云分析工作负载的 ClickHouse 版
|
2月前
|
SQL 自然语言处理 关系型数据库
Vanna使用ollama分析本地MySQL数据库
这篇文章详细介绍了如何使用Vanna结合Ollama框架来分析本地MySQL数据库,实现自然语言查询功能,包括环境搭建和配置流程。
288 0
|
3月前
|
Oracle NoSQL 关系型数据库
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
586 2
|
3月前
|
SQL Java OLAP
Hologres 入门:实时分析数据库的新选择
【9月更文第1天】在大数据和实时计算领域,数据仓库和分析型数据库的需求日益增长。随着业务对数据实时性要求的提高,传统的批处理架构已经难以满足现代应用的需求。阿里云推出的 Hologres 就是为了解决这个问题而生的一款实时分析数据库。本文将带你深入了解 Hologres 的基本概念、优势,并通过示例代码展示如何使用 Hologres 进行数据处理。
446 2