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

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,企业版 4核16GB
推荐场景:
HTAP混合负载
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云原生数据库 PolarDB MySQL 版,通用型 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数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
1月前
|
SQL 存储 监控
|
11天前
|
SQL Linux 数据库
|
1月前
|
存储 关系型数据库 分布式数据库
突破大表瓶颈|小鹏汽车使用PolarDB实现百亿级表高频更新和实时分析
PolarDB已经成为小鹏汽车应对TB级别大表标注、分析查询的"利器"。
突破大表瓶颈|小鹏汽车使用PolarDB实现百亿级表高频更新和实时分析
|
8天前
|
存储 人工智能 分布式数据库
现代数据库技术的发展与应用前景分析
随着信息时代的发展,数据库技术在各行各业中扮演着至关重要的角色。本文探讨了现代数据库技术的最新发展趋势,以及其在未来的应用前景,涵盖了分布式数据库、区块链技术与数据库融合、人工智能驱动的数据管理等领域。
|
14天前
|
存储 Java 数据管理
数据库三范式设计与规范化过程详解
数据库三范式设计与规范化过程详解
|
1月前
|
SQL 关系型数据库 MySQL
MySQL数据库基础练习系列8、成绩录入与分析系统
MySQL数据库基础练习系列8、成绩录入与分析系统
14 1
|
16天前
|
关系型数据库 MySQL 测试技术
《阿里云产品四月刊》—瑶池数据库微课堂|RDS MySQL 经济版 vs 自建 MySQL 性能压测与性价比分析
阿里云瑶池数据库云原生化和一体化产品能力升级,多款产品更新迭代
|
18天前
|
存储 SQL 运维
OLAP数据库选型指南:Doris与ClickHouse的深入对比与分析
OLAP数据库选型指南:Doris与ClickHouse的深入对比与分析
|
19天前
|
存储 SQL Oracle
主流关系型数据库存储架构层的差异分析
主流关系型数据库存储架构层的差异分析
|
26天前
|
安全 BI 数据库
数据库大作业——基于qt开发的图书管理系统 (一)环境的配置与项目需求的分析
数据库大作业——基于qt开发的图书管理系统 (一)环境的配置与项目需求的分析