数据库有关分解的5种算法实例分析学习(持续更新)

小声bb:学完数据库关系数据理论,对里面的几个算法有点懵逼和混乱,网上找了一些资料给的都是一些算法看的头大,在我看来还是看实例更容易学习+记忆一点。

为了便于理解,我的分析可能跟书上的说法不一样,因为我觉得那些有点不好理解(*/ω\*),所以简化成了自己的语言。

本文同样可供考试复习用(比如本菜鸡,里面的解答基本都是按照老师或者书上给的模板进行的,如果对你有帮助就点个赞吧XDDDD

本文前半部分为分析,后半部分为纯答案部分(规范的形式写出)

戳我直达纯答案无分析部分

1.求元素的闭包

2.验证分解是否具有无损连接性

3.转换为3NF的保持函数依赖的分解


1.求元素的闭包

问题:已知关系模式R<U,F>,U={A,B,C,D,E},F={AB->C,B->D,C->E,EC->B,AC->B}。求(AB)+F

分析:找闭包实际上就是找能由这些元素推出什么来。比如求AB的闭包,实际上就是求由A、B、AB能推出什么来。

1.首先一个元素的闭包肯定有它本身,因为肯定有AB->AB,则(AB)+F={AB},现在闭包里面的元素有A、B

2.然后根据题上的B->D,所以能推出D,则(AB)+F={ABD},现在闭包里面的元素有A、B、D

3.然后根据题上给的AB->C,所以闭包中多了一个C,即(AB)+F={ABCD},现在闭包里面的元素有A、B、C、D

4.接着根据题上有C->E,则有(AB)+F={ABCDE},现在闭包里面的元素有A、B、C、D、E

5.至此AB的闭包已经包含了关系中的所有元素。即(AB)+F={ABCDE}(结论)

2.验证分解是否具有无损连接性

问题:设有关系模式R(B,O,I,S,Q,D),F={S->D,I->B,IS->Q,B->O},若把R分解为SD,IB,ISQ,BO这个分解具有无损连接性吗?

分析:ρ{ R1{SD},R2{IB},R3{ISQ},R4{BO} }是R的一个分解,F={S->D,I->B,IS->Q,B->O},不妨设F是一个极小依赖集。

以下为了理解学习我会分解成几步进行,实际解答考试时直接一个表就可以了

1:建立一个表格,横坐标i是R的五个属性,纵坐标j 是几种分解

BOISQD
{SD}
{IB}
{ISQ}
{BO}

2:将每行中分解中有的元素标上ai,没有的要么不标,要么标上bi(这种方式就将bi改成ai),此处我采取不做处理

BOISQD
{SD}a4a6
{IB}a1a3
{ISQ}a3a4a5
{BO}a1a2

3:关键的一步:对每一个分解,一行一行的找,只要这行已经有了这个分解的前面的元素,那么就可以在这行的 这个分解的 其余元素的地方填上ai,相当于第一个元素推出这个分解的后面的元素(比如分解IS->Q分解有IS就有Q)。当然分解所在的那行可以不看

(为方便学习,以下红色部分为新加的)

例如:对于分解{SD},第一行是此分解本行,不用看

BOISQD
{SD}a4a6

看第二行,此行中只有B和I元素,没有S元素,因此不写任何东西,跳过

BOISQD
{IB}a1a3

看第三行,此行中有I,S和Q元素,有S元素,因此在D元素的位置写上a6

BOISQD
{ISQ}a3a4a5a6

看第四行,此行中有B和O元素,没有S元素,因此不写任何东西,跳过

BOISQD
{BO}a1a2

4:用这种方法将剩下的三个分解(每个分解都是从第一行开始找)也处理了,后面的分解每次处理都是在前面已经有了的基础上(而不是最开始的那张表)进行。

第一遍当所有的分解都进行完了时,如果这张表有一行所有的元素都写满了ai则停止;如果没有则进行第二遍从头开始处理,当然是在第一遍的基础上进行。

如果始终都不能有一行满则这种分解没有无损连接性(结论),如果有一行满了则这种分解具有无损连接性(结论)

最终的处理结果为下表

BOISQD
{SD}a4a6
{IB}a1a2a3
{ISQ}a1a2a3a4a5a6
{BO}a1a2

{ISQ}分解这一行所有元素都满了,因此该分解(即ρ{R1{SD},R2{IB},R3{ISQ},R4{BO} })具有无损连接性。

3.转换为3NF的保持函数依赖的分解

问题:已知R(U,F),U={C,H,R,S,G,T},Fm={C->T,CS->G,HT->R,HR->C,HS->R},求R的一个具有保持函数依赖性的3NF的分解。

分析:(1)对R<U,F>中的函数依赖集F进行“极小化处理”,处理后得到的依赖集仍记为F。此处给出的就是最小依赖集,所以不做处理。(不知道什么是最小依赖集和怎么求的可以点->点我查看“如何求最小依赖集”

(2)找出所有U中有但F中没有出现的属性,记做U0,把这样的属性构成一个关系模式R0<U0,F0>。然后把这些属性从U中去掉,剩余的属性仍记为U。

(3)如果有X->A∈F,且XA=U,则ρ={R},算法终止。(但这个算法里面没有循环)

(4)否则,对F按具有相同左部的原则分组(假定分为k组),每一组函数依赖所涉及的全部属性形成一个属性集Ui。若Ui⊆Uj(i≠j)就去掉Ui。由于经历了步骤(2),故U=Ui(从i=1到k)(打不出来那个符号),于是ρ={R1<U1,F1>,…,Rk<Uk,Fk>}∪R0<U0,F0>构成R<U,F>的一个保持函数依赖的分解,并且每个 Ri<Ui,Fi>均属3NF。这里Fi是F在Ui上的投影,并且Fi不一定与F`i相等,但F`i一定被Fi所包含,因此分解ρ保持函数依赖是显然的。(如果看不明白可以看实例)


1.求元素的闭包

问题:已知关系模式R<U,F>,U={A,B,C,D,E},F={AB->C,B->D,C->E,EC->B,AC->B}。求(AB)+F

答:设X(0)=AB,计算X(1):逐一扫描F集合中各个函数依赖,找出左部为A、B或AB的函数依赖,得到两个:AB->C,B->D。

于是X(1)AB∪CD=ABCD。

因为X(0)≠X(1),所以再找出左部为ABCD子集的那些函数依赖,又得到C->E,AC->B,于是X(2)=X(1)∪BE=ABCDE。

因为X(2)已等于全部属性集合,所以(AB)+F=ABCDE。

2.验证分解是否具有无损连接性

问题:设有关系模式R(B,O,I,S,Q,D),F={S->D,I->B,IS->Q,B->O},若把R分解为SD,IB,ISQ,BO这个分解具有无损连接性吗?

答:ρ{ R1{SD},R2{IB},R3{ISQ},R4{BO} }是R的一个分解,F={S->D,I->B,IS->Q,B->O},不妨设F是一个极小依赖集。建立表如下:

BOISQD
{SD}a4a6
{IB}a1a2a3
{ISQ}a1a2a3a4a5a6
{BO}a1a2

{ISQ}分解这一行所有元素都满了,因此该分解具有无损连接性。

3.转换为3NF的保持函数依赖的分解

问题:已知R(U,F),U={C,H,R,S,G,T},Fm={C->T,CS->G,HT->R,HR->C,HS->R},求R的一个具有保持函数依赖性的3NF的分解。

答:

(1)找F的最小函数依赖集,题中已给出。

(2)没有属于U但F中没出现的,则U0={},此时U不变。

(3)有C->T(任意取的,也可以取其他不满足XA=U的),CT≠U。

(4)对F按左边相同原则分组。令有R1={U1,F1},…R5={U5,F5},U1=CT,U2=CSG,U3=HTR,U4=HRC,U5=HSR。(F中有几个依赖就写几个U),Ui与Uj(i=1…5,j=1…5)之间不存在子集情况,则ρ={F1,F2…F5}(U0为空,否则ρ为U0∪它们)。ρ为保持函数依赖的3NF的分解。

1.设工厂里有一个记录职工每天日产量的关系模式: R(职工编号,日期,日产量,车间编号,车间主任)。 如果规定:每个职工每天只有一个日产量; 每个职工只能隶属于一个车间; 每个车间只有一个车间主任。 试回答下列问题: 根据上述规定,写出模式R的基本FD和关键码; 说明R不是2NF的理由,并把R分解成2NF模式集; 进而再分解成3NF模式集,并说明理由。 解: 基本的FD有3个: (职工编号,日期) 日产量 职工编号 车间编号 车间编号 车间主任 R的关键码为(职工编号,日期)。 R中有两个这样的FD: (职工编号,日期) (车间编号,车间主任) 职工编号 (车间编号,车间主任) 可见前一个FD是局部依赖,所以R不是2NF模式。 R应分解成R1(职工编号,车间编号,车间主任) R2(职工编号,日期,日产量) 此处,R1和R2都是2NF模式。 R2已是3NF模式。 在R1中,存在两个FD:职工编号 车间编号 车间编号 车间主任 因此,"职工编号 车间主任"是一个传递依赖,R1不是3NF模式。 R1应分解成R11(职工编号,车间编号) R12(车间编号,车间主任) 这样,ρ= { R11,R12,R2 }是一个3NF模式集。 2.某学员为公安局的车辆信息管理系统设计了数据库的ER图,对车辆、车主、驾驶员、 制造商、保险公司、警察、车辆违章和车辆事故等信息进行了管理,其ER图如下所示。 该ER图有7个实体类型,其结构如下: 制造商(制造商编号,名称,地址) 交通管理大队(大队编号,地址,区域,电话) 警察(警号,姓名,性别,出生年月) 车主(身份证号,姓名,地址,电话) 车辆(车辆牌号,型号,发动机号,座位数,登记日期) 驾驶员(驾驶证号,姓名,性别,地址,准驾车型,发证日期) 保险公司(保险公司编号,名称,地址,电话) 该ER图有8个联系类型,其中5个是1:N联系,1个是M:N联系,2个是M:N:P联系。其联 系的属性如下: 违章(违章编号,时间,地点,违章行为,处理结果) 事故(事故编号,时间,地点,事故简要,处理结果) 被盗(被盗编号,被盗时间,被盗地点,找回时间,找回地点) 试将上述ER图转换成关系模型: 1. 写出关系模式集,并用下划线和波浪线标识出每个模式的主键和外键。 2. 在上述数据库中,写出主键和外键的总数这两个数字。 解: 根据ER图和转换规则,7个实体类型转换成7个关系模式,1个M:N联系转换成1个关系模式 ,2个M:N:P联系转换成2个关系模式。因此,该ER图可转换成10个关系模式,如下: 制造商(制造商编号,名称,地址) 交通管理大队(大队编号,地址,区域,电话) 警察(警号,姓名,性别,出生年月,大队编号) 车主(身份证号,姓名,地址,电话) 车辆(车辆牌号,型号,发动机号,座位数,登记号,制造商编号,保险公司编 号,车主身份证号) 驾驶员(驾驶证号,姓名,性别,地址,准驾车型,发证日期,保险公司编号) 保险公司(保险公司编号,名称,地址,电话) 违章(违章编号,时间,地点,违章行为,处理结果,车辆牌号,驾驶证号,警号) 事故(事故编号,时间,地点,事故简要,处理结果,车辆牌号,驾驶证号,警号) 被盗(被盗编号,被盗时间,被盗地点,找回时间,找回地点,车主身份证号, 车辆牌号) 3. 在上述数据库中,主键的总数为10个,外键的总数为13个。 3.设关系模式R(车间编号,零件编号,数量,仓库编号,仓库地址)。 如果规定:每个车间每需要一种零件只有一个数量; 每种零件只存放在一个仓库里; 每个仓库只有一个地址。 (1)试根据上述规定,写出模式R的基本FD和关键码。 (2)说明R不是2NF的理由,并把R分解成2NF模式集。 (3)再进而分解成3NF模式集,并说明理由。 解: 基本的FD有3个: (车间编号,零件编号) 数量 零件编号 仓库编号 仓库编号 仓库地址 R的关键码为(车间编号,零件编号)。 R中有两个这样的FD: (车间编号,零件编号) (仓库编号,仓库地址) 零件编号 仓库编号,仓库地址) 可见前一个FD是局部依赖,所以R不是2NF模式。 R应分解成R1(零件编号,仓库编号,仓库地址) R2(车间编号,零件编号,数量) 此处,R1和R2都是2NF模式。 R2已是3NF模式。 在R1中,存在两个FD:零件编号 仓库编号 仓库编号 仓库地址 因此,"零件编号 仓库地址"是一个传递依赖,R1不是3NF模式。 R1应分解成R11(零件编号,仓库编号) R12(仓库编号,仓库地址) 这样,ρ= { R11,R12,R2 }是一个3NF模式集。 4.某学员为高校社团信息管理系统设计了数据库的ER图,对学生、社团、社团成员、社 团活动、主管老师、对活动和成员的评价等信息进行了管理,其ER图如下所示。 该ER图有9个
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值