第一范式、第二范式、第三范式、巴斯-科德范式、第四范式、主码、候选码、码详解

简介: 第一范式、第二范式、第三范式、巴斯-科德范式、第四范式、主码、候选码、码详解

数据库逻辑设计

前面我们讲了第二范式,我们知道还有第三范式,那么第三范式的特点到底是什么呢?下面我们来一起看看。

主码、候选码、码

ps:元组理解为一张表的某一行,属性理解为一张表的某一列,属性名就是列的名字(字段)。


1(码):码是可以确定一个元组的所有信息的属性名或属性名组。


例如在 { a, b, c, d } 中,


假设知道 a 的值就能确定 a, b, c, d 的值,


假设知道 c, d 的值就可以确定 a, b, c, d 的值,


那么 { a } 就是码,{ c, d } 就是码。


并且 { a, b }, { a, c }, { a, b, c }, { a, b, c, d } 等也都是码,因为它们也可以确定一个元组的所有值,即使很多余。


2(候选码):候选码的真子集中不存在码,候选码可以有多个。


就上面的例子而言,{ a } 是候选码,{ c, d } 是候选码,因为它们的真子集中不存在码。


而诸如 { a, b } 并不是候选码,因为它的真子集中含有 { a }, 且 { a } 是码。里面包括主码,以及我们的非主属性

image.png



3(主码):主码就是主键的意思,主码是任意一个候选码。


还是上面的例子,主码是候选码 { a }, { c, d } 中的其中一个。


既可以是 { a }, 也可以是 { c, d }。


第一范式

首先我们回顾一下什么是第一范式:第一范式就是如果关系模式R,其所有属性都是不可再分的基本数据项,则称R属于第一范式,R∈1NF。简而言之,就是要求数据库里面的表字段都是单一属性,不可再分的。也就是原子性的关系。


学号 姓名

123 王小王

456 王小王-123,王小王-456

显然上面不满足第一范式的要求,那么我们如何修改了,来达到我们的第一范式的特点,如下


学号 姓名

123 王小王

456 王小王-123

456 王小王-456

第二范式

第二范式就是每个非主属性完全依赖于主键,就是我们的表中的其他字段要完全的依赖于我们的主键,如果有一个不依赖或者依赖于多个,那么也不是第二范式。


如果我们的主码是单一的属性,那么我们的肯定是完全依赖函数关系,那么就是第二范式,如果存在多个主码,我们需要考虑的是主码的约束性,是否是完全依赖函数关系,也就是说我们的属性是否与主码是否是一一对应的关系。我们看看下面的这个例子


学号 身份证号 姓名 家庭住址

818 500237 王小王-123 重庆

017 500103 小小冷-123 重庆

我们观察到我们的这张表里面我们,候选码也就是主属性是{学号,身份证号},但是,我们的学号可以决定决定班级,身份照号决定家庭住址,我们的家庭住址部分函数依赖于我们的身份照号,所以它不符合第二范式。


我们需要对这个表进行拆分,如下的两个表格


学号 姓名

818 王小王-123

017 小小冷-123

身份证号 姓名 家庭住址

500237 王小王-123 重庆

500103 小小冷-123 重庆

第三范式

在第二范式的基础之上(非主属性必须完全依赖于候选码,也就是主属性)不能够存在传递依赖的函数关系,我们称之为第三范式。如果存在,我们就需要消除这种关系:一个非主属性依赖于另外一个非主属性。


学号 所选课程 学分

818 大数据 4

017 C语言 4

有小伙伴问,这到底符合第几范式?是否是第三范式。首先我们判断它是第一范式,其次我们判断他还是第二范式,因为主码是学号,而其他的两个非主属性是完全依赖于主属性的。但是他是不是第三范式呢?答案是:NO!!因为我们的学分是依赖于所选课程的,而所选课程优势依赖于学号,所以构成了a-b-c,也就是a-c的模式,这样是不能满足的。


拆分变成两个表


学号 所选课程

818 大数据

017 C语言

所选课程 学分

大数据 4

C语言 4

这样就可以解决我们数据冗余情况


巴斯-科德范式

首先,要满足前面的三个范式,这是必然的要求


在第三范式的基础之上,任何非主属性不能对主键的子集依赖(在第三范式的基础上,消除对主码子集的依赖)


对于第巴斯-科德范式,说实话有点不好理解


R属于3NF,不一定属于BCNF,如果R属于BCNF,一定属于3NF


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


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


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


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


仓库ID → 管理员ID


管理员ID→ 仓库ID


即存在关键字段决定关键字段的情况,所以其不符合BCNF范式。


第四范式

第四范式就是消除表中的多值依赖,以消除表中的信息冗余,达到一对一的关系,最终达到我们的数据效率。


姓名 性别 年龄

王小王-123 男 20

小小冷-123 女 20

拿到这个表格,首先我们判断它是满足第一范式,第二范式,第三范式,巴斯-科德范式,那么是否满足第四范式呢?我们可以看出年龄和性别都是依赖于姓名的,那么就出现了多值依赖,那么什么是多值依赖呢?就是多个值依赖于一个主属性,那就是姓名。这样是满足我们的第四范式的,我们需要完全的一一对应的关系。至于修改那就十分的简单了,两张表就可以了!


每文一语

沉得下心,才能远行


相关文章
|
API 数据库 开发者
Python微服务框架:Flask与FastAPI的融合创新
在当今高度互联的世界中,构建可扩展、灵活和高效的微服务架构变得至关重要。Python作为一种广泛应用于Web开发的编程语言,其微服务框架Flask和FastAPI的概念与实践日益受到关注。本文将介绍这两个框架的核心概念,并探讨它们在实际应用中的强大功能和优势。
|
10月前
|
存储 人工智能 固态存储
DeepSeek开源周第五弹之一!3FS:支撑V3/R1模型数据访问的高性能分布式文件系统
3FS是DeepSeek开源的高性能分布式文件系统,专为AI训练和推理任务设计,提供高达6.6 TiB/s的读取吞吐量,支持强一致性保障和通用文件接口,优化AI工作负载。
1451 2
DeepSeek开源周第五弹之一!3FS:支撑V3/R1模型数据访问的高性能分布式文件系统
|
网络协议
UDP协议在网络通信中的独特应用与优势
UDP(用户数据报协议)作为关键的传输层协议,在网络通信中展现出独特优势。本文探讨UDP的无连接性及低开销特性,使其在实时性要求高的场景如视频流、在线游戏中表现优异;其不保证可靠交付的特性赋予应用程序自定义传输策略的灵活性;面向报文的高效处理能力及短小的包头设计进一步提升了数据传输效率。总之,UDP适用于高速、实时性强且对可靠性要求不高的应用场景,为网络通信提供了多样化的选择。
|
11月前
|
人工智能 云计算
重磅!今年春晚,阿里云上见
重磅!今年春晚,阿里云上见
206 1
|
存储 机器学习/深度学习
【数据结构】二叉树全攻略,从实现到应用详解
本文介绍了树形结构及其重要类型——二叉树。树由若干节点组成,具有层次关系。二叉树每个节点最多有两个子树,分为左子树和右子树。文中详细描述了二叉树的不同类型,如完全二叉树、满二叉树、平衡二叉树及搜索二叉树,并阐述了二叉树的基本性质与存储方式。此外,还介绍了二叉树的实现方法,包括节点定义、遍历方式(前序、中序、后序、层序遍历),并提供了多个示例代码,帮助理解二叉树的基本操作。
1159 13
【数据结构】二叉树全攻略,从实现到应用详解
|
存储 编解码 算法
Transformers 4.37 中文文档(九十三)(4)
Transformers 4.37 中文文档(九十三)
520 1
|
SQL 存储 数据库
关系数据库:关系运算
关系数据库:关系运算
1165 5
关系数据库:关系运算
|
项目管理
「软件项目管理」一文详解软件项目管理概述
该文章详细介绍了软件项目管理的关键概念、知识体系以及实施过程,涵盖了项目初始化、计划制定、执行控制到项目结束的全流程管理,并探讨了项目管理与过程管理在软件开发中的相互作用和应用。
「软件项目管理」一文详解软件项目管理概述
|
SQL 分布式计算 运维
面向未来的开源 OLAP 技术架构探讨以及选型实践
本文详细介绍了开源大数据OLAP的演化过程和最佳实践。
10541 57
|
数据采集 存储 分布式计算
数据爆炸时代的挑战与机遇:大规模数据处理的技术突破
在当今数字化时代,数据量呈现爆炸式增长,给传统数据处理带来了巨大挑战。本文将探讨大规模数据处理所面临的问题,并介绍一些技术突破,如分布式计算、云计算和人工智能,以应对这一挑战。通过有效处理和分析海量数据,我们将迎来更多的机遇和创新。