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

目录

数据库逻辑设计

主码、候选码、码

第一范式

第二范式

 第三范式

巴斯-科德范式

第四范式


数据库逻辑设计

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

主码、候选码、码

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 } 是码。里面包括主码,以及我们的非主属性

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

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

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

第一范式

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

学号姓名
123王小王
456王小王-123,王小王-456

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

学号姓名
123王小王
456王小王-123
456王小王-456

第二范式

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

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

学号身份证号姓名家庭住址
818500237王小王-123重庆
017500103小小冷-123重庆

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

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

学号姓名
818王小王-123
017小小冷-123
身份证号姓名家庭住址
500237王小王-123重庆
500103小小冷-123重庆

 第三范式

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

学号所选课程学分
818大数据4
017C语言4

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

拆分变成两个表

学号所选课程
818大数据
017C语言
所选课程学分
大数据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范式。

第四范式

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

姓名性别年龄
王小王-12320
小小冷-12320

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

每文一语

沉得下心,才能远行

  • 6
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王小王-123

您觉得舒心就点一点吧~~~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值