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

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

数据库逻辑设计

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

主码、候选码、码

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

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


每文一语

沉得下心,才能远行


相关文章
|
6月前
|
关系型数据库 数据库
关系型数据库设计规范第二范式(2NF)
【5月更文挑战第14天】关系型数据库设计规范第二范式(2NF)
222 7
|
6月前
|
XML 数据可视化 NoSQL
【软件设计师备考 专题 】数据模型,ER图,第一范式、第二范式、第三范式
【软件设计师备考 专题 】数据模型,ER图,第一范式、第二范式、第三范式
105 0
|
数据库
第一范式 第二范式 第三范式理解
第一范式 第二范式 第三范式理解
217 0
|
6月前
|
存储 算法 关系型数据库
三范式详解
三范式详解
151 0
|
存储 数据库
数据库范式(第一范式 第二范式 第三范式 BCNF范式)
数据库范式(第一范式 第二范式 第三范式 BCNF范式)
150 0
|
JavaScript 数据库 Python
数据库系统概论——函数依赖、码和范式(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(
431 0
数据库系统概论——函数依赖、码和范式(1NF、2NF、3NF、BCNF)详解
|
存储 关系型数据库 数据库
无敌!关系型数据库范式分析,第一范式、第二范式、第三范式、BC范式、第四范式、第五范式
无敌!关系型数据库范式分析,第一范式、第二范式、第三范式、BC范式、第四范式、第五范式
557 0
无敌!关系型数据库范式分析,第一范式、第二范式、第三范式、BC范式、第四范式、第五范式
|
数据库
第一范式,第二范式,第三范式概念及举例
第一范式,第二范式,第三范式概念及举例
第一范式,第二范式,第三范式概念及举例
|
数据库
数据库设计的三范式以及实体分析
数据库设计的三范式以及实体分析
数据库设计的三范式以及实体分析