数据库函数依赖关系 数据库关系模型的函数依赖练习

这类题目如果直接看定义,可能会比较混乱,难以理解。举例子就比较容易理解了。那就直接做题吧。相信做完这些题目,你就会找到答案。

注意:此类问题是数据库系统简介课程中必答的。

示例 1

第一题讲解的很详细,请仔细阅读。接下来的三题是练习题。先做完三题,然后参考答案。

假设有一个关系模型R(员工姓名,项目名称,工资,部门名称,部门经理)。若规定每个员工可以参与多个项目,并在每个项目中领取一份工资;每个项目只由一个部门管理;每个部门只有一个经理。

试写出关系模型R的基本函数依赖关系和主键,解释为什么R不是2NF模型,并将R分解为2NF,再将R分解为3NF,并说明理由。

分析

我们用→来表示依赖关系,可以理解为它指向谁就代表可以推导出谁,或者说谁说了算。

例如这里可以将员工姓名和项目名称结合起来推导出工资,可以表达为:(员工姓名,项目名称)→工资;

进一步地,一个项目由一个部门管理,可以表达为:项目名称→部门名称;一个部门由一个部门经理管理,可以表达为:部门名称→部门经理。

好的,到目前为止我们已经写出了第一个问题中的函数依赖关系,让我们再回顾一下:

那么主代码是什么?

主码,也称为主键,是指可以唯一标识一段数据的属性。

例如:学号可以作为主键,因为一个学号对应一个学生。

那么这里的主键是什么?

我们需要找到什么可以唯一地标识一条记录。项目名称肯定不够,因为它只能和员工姓名一起使用来确定工资。员工姓名肯定不够,但是我们可以将它们组合在一起来确定一条唯一的记录。

代码语言:javascript

复制

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

所以答案是:

代码语言:javascript

复制

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

我们来看第二个问题:解释为什么R不是2NF模型,并将R分解为2NF。

什么是 2NF?

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

因此,如果存在部分依赖关系,则它不属于 2NF 模式。那么如何将其转换为 2NF?

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

代码语言:javascript

复制

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

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

我们看第三个问题:进一步将R分解为3NF,并解释原因。

那么什么是3NF呢?我们先观察一下上面2NF中的关系,发现有一个关系R1(项目名称,部门名称,部门经理),它比较特殊,就是项目名称→部门名称,部门名称→部门经理,它是连续的,也就是传递性的依赖关系,3NF就是把这种依赖关系去掉。

那么我们把它删除然后看看:

R1又可以进一步划分为两种关系:

代码语言:javascript

复制

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

最后我们来总结一下2NF与3NF的关系:

数据库函数依赖_数据库函数依赖图怎么画_数据库函数依赖关系

第一个问题已经解释清楚了,大家一定要掌握。

示例 2

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

请回答以下问题:

问题1:候选键就是主键,也就是可以作为决定性因素的属性,候选键可以→所有值,通俗的讲就是只能出现在箭头前面数据库函数依赖关系,不能出现在箭头后面。

那么A,B,D,F四个属性肯定不够,只有C,E。发现CE之间没有依赖关系,且CE→ABCDEF,所以CE为候选码。

问题2:我们来看看是否存在部分依赖,大家可以先思考一下什么是部分依赖。

这里不是有两个主键吗?我们要找的是哪个属性只依赖于其中一个主键,也就是只依赖于C或者E。可以看出B和D是部分依赖,而B和A是传递依赖,相当于C→A,所以A也是部分依赖于C。那么肯定不满足2NF,最多是1NF。

问题3:先分解成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.候选键: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变成实物,我们来看一下:

首先每个球员对应一个球队:球员号码→球队名称 然后每个球队对应一个队长:球队名称→队长名称 进球数肯定是某场比赛某位球员的进球数,所以该球员与该场比赛对应的进球数就是:(球员号码,比赛场次)→进球数

按照我们的经验数据库函数依赖关系,主键肯定是两个1,对吧?

所以答案是:

关系模型R的基本函数依赖F为F={球员号码→球队名称,球队名称→队长姓名,(球员号码,场次号码)→进球数},其主键为(球员号码,场次号码)。

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

代码语言:javascript

复制

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

相信大家也已经猜到了第三个问题。

问题 3:它不是 3NF,因为存在传递依赖关系。

可以转化为:

代码语言:javascript

复制

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

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

这种题型会在期末考试中考到,所以还是要掌握的。不过这些题目只是针对初学者的,我只是简单总结了这种题型的解法,如果想对关系的函数依赖有更深入的理解,还是需要看书的。

© 版权声明
THE END
喜欢就支持一下吧
点赞192赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容