入门函数依赖 附带数据库课作业——函数依赖

一. 其它(共1题,2.5分)

1. (其它, 2.5分)

1、设有关系模式R(A,B,C),其关系r如图:

(1)试判断下列FD在关系r中是否成立?

     A→B     BC→A   B→A

假设A→B成立,

则A决定B,

B依赖A

按照函数y=F(x)关系

那么A为x

B为y

可以有多个不同A对应同一个B

但是不能有多个不同B对应同一个A

从表中可看出

没有同一个A对应多个不同B

所以成立

同理:

我们可以继续推导:

假设BC→A成立

则BC决定A

而A依赖于BC,

按照函数y=f(x)关系

把BC看作一个整体

那么BC为x

A为y

可以有多个不同BC对应同一个A

但是不能有多个不同A对应同一个BC

从表中可看出

有一个BC(x)对应多个A(y)

所以不成立

同理:B→A

B为X而A为Y

则:

x=2时y=1或4

所以不成立

(2)根据关系r可以判定哪些FD在关系模式R上不成立?

这里的FD指的是函数依赖英文缩写

那么这里我们找到依赖关系就行

从1问中我们已经推理出3种,这里列数比较少只进行简单的排列组合,

A->B 成立,B->A不成立

AB->C 成立,C->AB 不成立

AC->B 成立,B->AC 不成立

 A->C 成立,C->A 不成立

B->C成立,C->B 不成立

(还有一点多讲一句:

ABC->A

你可以看成y=x来理解

那么无论是ABC->A还是A->ABC都成立

那这种叫做平凡函数依赖

AC->B成立的叫做非平凡函数依赖,B不再AC里面。

那么完全函数依赖与部分函数依赖又是什么玩意?

举个例子:

假设AB为主键 有函数关系AB->C那么C必须全部依赖于AB 即 C单独依赖B不行

即B-/->C

所以你需要把C列的第一行改为其他不为3的数比如4

A     B      C

1     2       4

4     2       3

5     3       3

那么这就是完全依赖

那么部分依赖

A     B      C

1     2       3

4     2       3

5     3       3

我改回去

C单独依赖其中一个也行

这种叫做部分依赖)

A    B      C

1     2       3

4     2       3

5     3       3

2、设有关系模式R(A,B,C,D),R上成立的FD集F={AB→CD,A→D}

(1)试说明R不是2NF的理由。

第一步判断唯一候选码

首先我们把集合分为左边部分和右边部分方便我们用函数关系 y= f(x) 来判断

左边L:L=AB

右边R:R=CD

两边都在LR:LR=空

两边都不在N:N=空

x: LUN

所以

AB的闭包为 全集U

所以AB为唯一候选码

非主属性为CD

主属性为:AB

由于A为AB的真子集

D为CD非主属性中的真子集

那么

D对于主属性存在局部依赖

(2)试把R分解成2NF的模式集。

采用投影分解法

R1(A,B,C)

R2(A,D)

R1,R2都是2NF

3、设有关系模式R(A,B,C),R上成立的FD集F={C→B,B→A}

(1)试说明R不是3NF的理由。

第三范式是在第二范式的基础上消除传递依赖

那么可以看到

因为C→B,B→A

B---/--->C

所以有传递依赖

即C--->A

(2)试把R分解成3NF的模式集。

最小函数依赖集
定义

如果函数依赖集F满足下列条件,则称F为一个极小函数依赖集,亦称为最小依赖集或最小覆盖。
(1)、F中任一函数依赖右部仅含有一个属性。
(2)、F中不存在这样的函数依赖 X→ A,使得F与F-{X→A} 等价。
(3)、F中不存在这样的函数依赖X→A,X有真子集Z使得F-{X→A}⋃{Z→A} 与F等价。
解释
以上定义翻译成大白话就是,一个函数依赖集F要想称为最小函数依赖集,要满足以下三点:
1、F中任一函数依赖的右边只有一个属性。
2、F中不存在这样的函数依赖:从现有的函数依赖集中删除一个函数依赖X→A,删除后所得的函数依赖集与原来的函数依赖集等价,这样的函数依赖是不允许存在的。
3、F中不存在这样的函数依赖:假设函数依赖集中存在AB→Y,现对该依赖的左部进行化简,即删除A,得B→Y;或删除B,得A→Y,若经过化简后的函数依赖集与没有化简前的函数依赖集等价,那么这样的函数依赖是不允许存在的。

F={C->B,C->A}

第一步求出F的最小函数依赖集

步骤:

1、先将右边都变成单属性
2、依赖集中不能出现冗余的函数依赖(重复的函数依赖)
3、左边没有多余的属性

1.由于FD中没有右边的多属性比如(A->CD)要拆分成(A->C,A->D)所以省略

2.去掉重复的这里没有省略

3.左边没有多余的属性省略

(比如(A->B,AB->C)那么这里A->B多余了)

第二步把最小函数依赖集中左边相同的合并比如(A->B,A->C)合并后为(A->BC)

这里左边不同不用合并

R1(C,B);R2(C,A)

第三步求出候选码

候选码定理
(1)若X是L类属性,则X必为R的候选码成员;若X的闭包包含全部属性U,则X必为R的唯一候选码。
(2)若X是R类属性,则X不在任何候选码中。
(3)若X是N类属性,则X必为R的候选码成员。
(4)若X是L类和N类属性组成的属性集,且X的闭包包含U,则X是R的唯一候选码。
(5)若X是LR类属性,则X可能为R的任一候选码的成员,也可能不为R的任一候选码的成员。
 

1.首先找出L,R,N,LR四中属性分类
L:C
R:A
N:
LR:B

候选码为C 且C决定B(如果都不决定就不是候选码)

第四步把候选码作为一个模式放入模式集

由于R1,R2中都有C那么

R的分解后的模式集合为

R1,R2

4、设有一个记录各个球队队员每场比赛进球数的关系模式

R(队员编号A,比赛场次B,进球数C,球队名D,队长名E)

如果规定每个队员统一编号,且只能属于一个球队;每个球队只有一个队长。

(1)试写出关系模式R的基本函数依赖FD和码

设队员编号A,比赛场次B,进球数C,球队名D,队长名E

FD为:队员编号-A>球队名D;球队名-D>队长名E;(队员编号A,比赛场次B)->进球数C

A->D,D->E,AB->C

L:队员编号,比赛场次

R:队长名,进球数

LR:球队名

(队员编号)+ = 队员编号,球队名,队长名

(队员编号,比赛场次)+=队员编号,比赛场次,球队名,进球数,队长名

(队员编号,球队名)+ =队员编号,球队名,队长名

(比赛场次,球队名)+ =比赛场次,球队名,队长名

故根据推论关系R有唯一的候选码(队员编号,比赛场次)此时码的个数大于1 主码可选(队员编号,比赛场次)

找出候选码

码为(队员编号,比赛场次)。

(2)说明R不是2NF的理由,把R分解成2NF的模式集。

候选码(队员编号,比赛场次) 因为其真子集 队员编号->球队名;(队员编号,比赛场次)->球队名。存在部分函数依赖 故不满足2NF。

因为主码(队员编号,比赛场次)  真子集:队员编号->球队名;此时R1(队员编号,球队名),又因为球队名属于R1且->队长名,故R1(队员编号,球队名,队长名),比赛场次->null。

故2NF模式为

R1(队员编号,球队名,队长名)

R2(队员编号,比赛场次,进球数)(说明:R减去真子集中的非主属性)

(3)进而把R分解成3NF的模式集,并说明理由。

设队员编号为A,球队名为B,队长名为C,比赛次数为D,进球数为E

且根据Q2 有R1{A,D,E};R2{A,B,C}

则有关系R(A,B,C,D,E) 且函数依赖集F为(A->D,D->E,AB->C) 

求F的最小依赖集步骤:

右边都为单属性,跳过

左边AB->C是多属性  去除A,则新函数依赖集H为(A->D,D->E,B->C)  B(F+)=B,不包含C 故A不能去

去除B,则新函数依赖集H为(A->D,D->E,A->C) A(F+)= ADE,不包含C 故B不能去

去掉AB->C,新函数依赖集J为(A->D,D->E)  AB(J+)=ADBE 不包含C 故不能去除AB->

因此得到最小函数依赖集F为(A->D,D->E,AB->C) ,故可分解为(A,D),(D,E),(A,B,C)

三者之间不存在包含关系,故可分解为R1{队员编号,球队名};R2{球队名,队长名};R3{队员编号,比赛场次,进球次数}

故3NF模式为:

R1{队员编号,球队名}

R2{球队名,队长名}

R3{队员编号,比赛场次,进球次数}

5、教材P202第2题

1. 关系模式:

学生: S(Sno, Sname, Sbirth, Dept, Class, Rno)

班级: C(Class, Pname, Dept, Cnum, Cyear)

系: D(Dept, Dno, Office, Dnum)

学会: M(Mname, Myear, Maddr, Mnum)

 求最小函数依赖集那就不得不谈到闭包

闭包就是由一个属性直接或间接推导出的所有属性的集合,例如: f={a->b,b->c,a->d,e->f} 

由a可直接得到b和d,间接得到c,则a的闭包就是{a,b,c,d}
通过闭包我们就可以在拆分F时判断依赖是否冗余

从上面例子a->b在a的闭包中所以保留

如果缺少那么a便不能推出b

2.最小函数依赖集

(1) 学生

最小函数依赖集:

Sno→Sname,Sno→Sbith,Sno→Class,Class→Dept,Dept→Rno

   传递函数依赖:

   Sno与Rno之间存在着传递函数依赖。

   因为Sno→Dept,Dept→Rno

   Sno与Dept之间存在着传递函数依赖。

   因为Sno→Class,Class→Dept

(2) 班级

最小函数依赖集:

    Class→Pname,Class→Cnum,Class→Cyear,Pname→Dept.

传递函数依赖

    Class与Dept之间存在着传递函数依赖。

    因为Class →Pname , Pname→Dept

(3) 系

    最小函数依赖集:Dept →Dno,Dno→Dept,Dno →Office,Dno→Dnum

    传递函数依赖:无

(4) 学会

最小函数依赖集:Mname →Myear,Mname→ Maddr,Mname→Mnum.

传递函数依赖:无

3.候选码,外部码说白了就是外键,全码就是所有的属性共同构成一个候选码

(1) 学生

候选码: Sno

外部码: Dept ,Class

全码:无

(2) 班级

候选码: Class

外部码: Dept

全码:无

(3) 系

候选码: Dept或Dno

外部码:无

全码:无

(4) 学会

候选码: Mame

外部码:无

全码:无

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

TECreate

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值