这种问题直接看定义容易一脸懵逼,很难懂,举例子很容易理解,所谓我们直接做题,做完这几道题目相信你就会了。

注:这种类型的题目是 数据库系统概论 课程的必考题。

例1

第一题会讲解的非常详细,请一定认真看,后面 3 道题作为练习题,自己先做再参考答案。

设有关系模式 R(职工名,项目名,工资,部门名,部门经理)
如果规定,每个职工可参加多个项目,各领一份工资;每个项目只属于一个部门管理;每个部门只有一个经理。

  1. 试写出关系模式 R 的基本函数依赖和主码。
  2. 说明 R 不是 2NF 模式的理由,并把 R 分解成 2NF 。
  3. 进而将 R 分解成 3NF ,并说明理由。

分析

依赖关系我们使用 → 表示,可以理解为指向谁就代表可以推出谁,或者归谁管。

比如在这里,职工名和项目名合在一起可以推出工资是多少就可以表示为:(职工名,项目名)→工资

再者,项目归部门管,可以表示为:项目名→部门名;部门归部门经理管可以表示为:部门名→部门经理

好了,到现在为止我们就已经将第一问中的函数依赖写出来了,我们再来捋一下:

  • 部门经理依赖于部门,也就是说要先确定部门才能确定部门经理,所以是依赖关系;
  • 而部门依赖于项目,要先确定项目才能确定部门;
  • 工资依赖于两个属性:职工名和项目名。

那么主码又是什么呢?

主码也叫主键,是指可以通过它唯一确定一条数据的这样一个属性。

比如学号就可以做主键,因为一个学号对应一个学生。

那么这里的主键是什么呢?

我们就要找通过谁可以唯一确定一条记录,项目名肯定不行,因为他和职工名一起才可以确定工资,那职工名肯定也不行,但是把它们合在一起就可以了,这样就可以确定唯一的一条记录。

所以,主键为(职工名,项目名)。

所以答案就是:

函数依赖关系:(职工名,项目名)→工资项目名→部门名部门名→部门经理主键为(职工名,项目名)。

来看第二问:说明 R 不是 2NF 模式的理由,并把 R 分解成 2NF 。

2NF 是什么呢?

就是一种规范,他规定不能存在部分依赖,部分依赖是啥意思呢?就是我们只看依赖于主键的属性,这里有工资和部门名,但是他们两个的区别是工资对应的全部的主键,也就是两个值,但是部门名只依赖于项目名,少了一个,所以是部分依赖。

所以他存在了部分依赖就不是 2NF 模式了,那么怎么把它化成 2NF 呢?

一般我们只能通过分解的方式来消除,就是把一个关系拆成两个关系:

R1(项目名,部门名,部门经理)
R2(职工名,项目名,工资)

这样每个关系中就不存在部分依赖了。

来看第三问:进而将 R 分解成 3NF ,并说明理由。

那么 3NF 又是啥,我们先来观察上面那个 2NF 的关系,发现有一个关系R1(项目名,部门名,部门经理),他比较特殊,就是项目名→部门名部门名→部门经理,他是连续的,就是传递性的依赖关系,3NF 就是要去掉这种依赖关系。

那么我们来去掉看看:

可以把 R1 再分成两个关系:

R11(项目名,部门名)
R12(部门名,部门经理)

最后总结一下 2NF 和 3NF 的关系:

第一道题就讲完了,大家一定要熟练掌握。

例2

设有关系模式R(A,B,C,D,E,F),其函数依赖集为:
F={E→D,C→B,CE→F,B→A}。

请回答如下问题:

  • (1) 指出 R 的所有候选码并说明原因;
  • (2) R 最高属于第几范式,为什么?
  • (3) 分解 R 为 3NF。

第一问:
候选码就是主码,即可以作为决定性因素的属性,候选码可以 → 所有的值,通俗地讲就是只能出现在箭头的前面,不能出现在后面。

那这里A、B、D、F四个属性肯定是不行了,只有 C和E了,发现 CE 之间没有依赖关系,并且CE→ABCDEF,所以CE就是候选码。

第二问:
我们来看一下有没有部分依赖,大家可以先自己想一下什么是部分依赖。

这里主键不是两个吗?我们要找的就是哪一个属性只依赖于其中的一个主键,也就是只依赖于 C 或者 E ,可以看到 B 和 D 都是部分依赖,同时 B 和 A 是传递依赖,就等同于 C→A,所以 A 也是 部分依赖于 C 。那他肯定就不符合 2NF 了,那最多就是 1NF 了。

第三问:
首先分解为 2NF:模仿第一道题题目,把那个主键的单独拿出来:R3(C,E,F)R1(E,D)R2(C,B,A),区分的依据就是看看有没有依赖关系,有依赖关系就放一起。

然后我们化成 3NF ,就是去掉传递依赖,发现 R2 是传递依赖,所以把他化成R21(C,B)R22(B,A),这样就有 4 个关系了,他们都是 3NF 模式的。

这道题就做完了。

例3

设有关系模式R(A,B,C,D,E),其函数依赖集为F={A→B,CE→A,E→D}

请回答如下问题:

  • (1)指出 R 的所有候选码,并说明理由;
  • (2)R 最高属于第几范式(在1NF~3NF范围内),为什么?
  • (3)将 R 分解到 3NF。

1、候选码:CE,因为CE→ABCDE
2、可以看到 D 只依赖于 E,但是主键是 CE,所以 D 是部分依赖于 CE,那么最高就是 1NF 了。
3、R1={C,E,A},R2={E,D},R3={A,B}

例4

设有一个记录各个球队队员每场比赛进球数的关系模式
R(队员编号,比赛场次,进球数,球队名,队长名)

如果规定,每个队员只能属于一个球队,每个球队只有一个队长。
(1)试写出关系模式 R 的基本函数依赖和主码。
(2)说明 R 不是 2NF 模式的理由,并把 R 分解成 2NF 。
(3)进而将 R 分解成 3NF ,并说明理由。

这题就是把上面的 ABCD 变成真实的事物了,一起来看一下:

首先每一个队员对应一个球队:队员编号→球队名
然后每一个球队对应一个队长:球队名→队长名
进球数肯定是统计的某一个场次的某一个球员的进球数,所以球员和比赛场次对应进球数:(队员编号,比赛场次)→进球数

根据我们的经验,主键肯定是那个两个的了对吧。

所以答案是:

关系模式R的基本函数依赖F如下
F = { 队员编号→球队名,球队名→队长名,(队员编号,比赛场次)→进球数 }
其主键为(队员编号,比赛场次)。

第二问,他不是 2NF 因为球队名部分依赖于主键,可以分解为:

R1={队员编号,球队名,队长名}
R2={队员编号,比赛场次,进球数}

相信大家都已经猜到第三问了。

第三问:不是 3NF ,因为有传递依赖。

可以化为:

R11={队员编号,球队名},R12={球队名,队长名}

将 R 分解为 R11,R12 后均为 3NF 的关系模式。

这种题目期末必考,所以还是需要掌握的,但是这些题目仅仅还是入门,只是简单的总结了一下这类题的解题方法,想更深入的理解关系的函数依赖还是要看书。

数据库关系模式的函数依赖习题讲解相关推荐

  1. 转:数据库关系模式的范式详解

    关系模式的范式 主要有4种范式,1NF,2NF,3NF,BCNF,按从左至右的顺序一种比一种要求更严格.要符合某一种范式必须也满足它前边的所有范式.一般项目的数据库设计达到3NF就可以了,而且可根据具 ...

  2. ER 和 数据库关系模式

    我们眼下所接触的数据库基本上是关系数据库,关系数据库中的关系模式是型,而关系是值.关系模式是对关系的描写叙述. 什么是关系?关系实质上是一张二维表,当中每一行是一个元组,每一列是一个属性,每一个元组是 ...

  3. 数据库关系模式的范式总结

    目录 什么是关系模式的范式 第一范式(1NF) 第二范式(2NF) 第三范式(3NF) BC范式(BCNF) 第四范式(4NF) 第五范式(5NF) 什么是关系模式的范式 关系模式的范式是衡量关系模式 ...

  4. java数据库规范化,数据库关系模式规范化

    在教学中,大多实例都是主键由一列构成,所以也可以简单地说主属性与主键没有什么区别. 第三范式的定义:如果关系模式R中的所有非主属性对任何候选关键字都不存在传递依赖,则称关系R是属于第三范式的.记作R ...

  5. 数据库 关系模式和关系的区别

    定义 关系(Relation) D1 × D2 × ··· × Dn 的子集叫做在域D1,D2,···,Dn 上的关系,表示为 R(D1,D2,···,Dn ),其中R就是关系名,n就是目或度. 一个 ...

  6. 数据库候选关键词怎么求_关系模式中候选关键字的图论求解法

    关系模式中候选关键字的图论求解法 李 莉 [摘 要] 文章首先介绍了函数依赖图的概念及理论,并应用该理论对数据库理 论和实际问题中关系模式候选关键字的求解问题进行了深入系统的讨论,并用 该方法解决了关 ...

  7. 【数据库理论】关系模式的规范化与查询优化

    本系列为<数据库系统原理与应用(刘先锋等著)>的读书笔记. 一,问题的提出 1,关系模式 关系模式定义:一个关系模式是一个系统,它是有一个五元组R(U,D,DOM,I,F)R(U, D, ...

  8. 关系模式的分解与范式

    1.     为什么要研究数据库关系模式的分解? 答:因为现有的模式可能会存在一些数据增删改的弊端,比如说:数据冗余太大,更新异常,插入异常,删除异常.因此为了完善数据库的增删改查的功能,需要寻找一种 ...

  9. 【数据库】期末复习:SQL语句、关系代数的运算、范式的定义和判断、求最小函数依赖集、ER图转关系模式

    文章目录 SQL语句 查询select 其他 视图 关系代数的运算 并.差.笛卡尔积.投影和选择 连接 自然连接 笛卡尔积 详细版(如果完全不了解就看这里) 范式的定义和判断 如何求候选码 一些例题 ...

最新文章

  1. 超简单,带你学会多线程爬虫
  2. 初一七年级计算机信息全册教案,初一信息技术教案全一册
  3. NavigationBar 渐隐效果
  4. P5004-专心OI - 跳房子【dp,矩阵乘法】
  5. Linux 命令行上执行多个命令(分隔符简介使用)
  6. 新版office365介绍
  7. 37、SDIO设备驱动
  8. C语言中浮点数在内存中的存储方式
  9. python飞机大战素材黑马_Python基础day12飞机大战(上)
  10. 批处理|测试工具|局域网速度测试/网络上传与下载速度测试
  11. iapp进度条倒计时_‎App Store 上的“纪念日提醒 - days matter · 倒数倒计时”
  12. Java批量png转jpg图片格式
  13. DWM 层 -- 访客 UV 计算
  14. [Mysql] STR_TO_DATE函数
  15. filtering_audio.c/filtering_video.c 解读
  16. 人脑功能连接与相似性分析:基于Python
  17. Linux操纵细碎以太网卡的装配及设置-2
  18. 【AutoSAR】【MCAL】PWM
  19. 第4关 注册配置中心实现
  20. 【H5】html5的新增的标签和废除的标签

热门文章

  1. spritekit 动画_iOS 2D游戏引擎框架SpriteKit入门
  2. 如何设置DevExpress WinForm皮肤样式
  3. qtextedit固定内容_QTextEdit详细操作
  4. oracle sql语言模糊查询--通配符like的使用教程
  5. Windows10激活自带Linux子系统以及Linux子系统安装位置介绍
  6. 微信中如何接入AI机器人才比较安全(不会收到警告或者f号)之第二步注入dll文件
  7. apollo 3 plus 串口1
  8. git管理工具SourceTree --- 提交,拉取,推送
  9. iOS系统定位基础使用
  10. vue中img标签引用图片地址变量不显示,引入失败问题