数据库系统概论需要掌握(候选码、闭包、范式、模式分解算法)

闭包计算(视频点击)

例1:设有函数依赖集F={AB->CE,A->C,GP->B,EP->A,CDE->P,HB->P,D->HG,ABC->H},求属性D关于F的闭包D+?
解:设X={D},X0={D,H,G},X1={D,H,G};X0=X1所以属性D关于F的闭包D+为X=D,H,G

例2:设有函数依赖集F={AC->PE,PG->A,B->CE,A->P,GA->B,GC->A,PAB->G,AE->GB,ABCP->H},求属性BG关于F的闭包BG+?
解:设X={B,G},X0={B,C,E,G},X1={B,C,E,G};X0=X1所以属性D关于F的闭包D为X=B,C,E,G

例3:已知关系模式R{A,B,C,D,E}和函数依赖集F={AB->C,B->D,C->E,EC->B,AC->B,D->BE},求属性集AC关于函数依赖集的F的闭包
解:设X={A,C},X0={A,C,E,B},X1={A,B,C,D,E};X1=R所以属性AC关于F的闭包AC+为X=A,B,C,D,E

确定最小函数依赖集(视频点击)

定义

最小函数依赖集需满足三个条件:

  1. F中任一函数依赖的右部仅包含一个属性

  2. F中不存在这样的函数依赖X->A,使得F与F-{X->A}与F等价

  3. F中不存在这样的函数依赖X->A,X有真子集Z使得F-{X->A}U{Z->A}与F等价

做法

  1. 右切(右部最小化)

  2. 除本求包(除去本身,求闭包)(规则最小化)

  3. 左部最小化

例:已知关系模式R<U,F>,U={A,B,C,D,E,F,G},F={BCD->A,BC->E,A->F,F->G,C->D,A->G},求F的最小函数依赖集?
解:1.对F进行右部最小化:右部仅含有一个属性,全体满足
   2.对F进行规则最小化,闭包:(BCD)=BCDE,(BC)=BCDAFG,(A)=AG,(F)=F,(C)=C,(A)=AFG(与A->G重复),去除A->G
   3.对F进行左部最小化,BCD->A,有C->D,可用BC->A替换;BC->E,不可替代
所以最小函数依赖集{BC->A,BC->E,A->F,F->G,C->D}

过程模板

1.对F进行右部最小化
2.对F进行规则最小化
3.对F进行左部最小化

数据库无损分解和保持函数依赖

在关系范式中分解关系基本原则

  • 实现无损连接

  • 保持原有依赖关系

判断是否具有无损连接性

例:U={A,B,C,D,E},F={AB->C,C->D,D->E},R1={A,B,C},R2={D,E}

解:

在这里插入图片描述

判断是否保持函数依赖

e.g:F={E->D,C->B,CE->G,B->A},F={R1(A,B),R2(B,C),R3(E,D),R4(E,A,G)}
解:1.F'={E->D,C->B,CE->G,B->A}
    2.R1(A,B),F1={B->A}
	  R2(B,C),F2={C->B}
	  R3(E,D),F3={E->D}
      R4(E,A,G),F4={EAG->EAG}
    3.G={B->A,C->B,E->D,EAG->EAG},G与F'相比,无CE->G
F'!=(F1 u F2 u F3 u F4),所以不保持函数依赖

注意:当且仅当G=F’时,也就是F’中的依赖要在G中全部找到

确认候选码(视频点击)

算法描述

候选键的定义:

若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选键。

若w是候选键,则必须满足两个条件:

  1. W的闭包是U;

  2. W没有冗余。

设关系模式R中U=ABC… …等N个属性,U中的属性在F中有四种范围:

  1. 左右出现;

  2. 只在左部出现;

  3. 只在右部出现;

  4. 不在左右出现;

算法:按以下步骤求候选键:

  1. 只在F右部出现的属性,不属于候选码;

  2. 只在F左部出现的属性,一定存在于某候选码当中;

  3. 两边都没有出现的节点,一点存在于候选键中。

  4. 其他属性逐个与2,3的属性组合,求属性闭包,直至X的闭包等于U,若等于U,则X为候选码。

//关系的候选码的含义:若关系中的某一属性组的值可以唯一的标识元组,而其子集不能,则称该属性组为候选码
(候选码中的属性称为主属性)
例1:R{A,B,C,D},F{AB->C,AB->E,CDE->AB},求候选码?
LR:A,B,C,E
L:D
R:null
NULL:null
//开始进行其他属性与L并(未出现)组合闭包排查
L并(未出现)={D},{A,B,C,E}
{
	{AD}={AD},{BD}={BD},{CD}={CD},{ED}={ED}
	{ABD}={ABDEC},{ACD}={ACD},{AED}={AED},{BCD}={BCD},{BED}={BED},{CED}={ABCDE}//有满足时就停止计算
	候选码为:{ABD}、{CDE}
}

例2:R<U,F>,U=(A,B,C,D,E,G),F={AB->C,CD->E,E->A,A->G},求候选码?
L:B,D
R:G
LR:A,C,E
NULL:NULL
//开始进行其他属性与L并(未出现)组合闭包排查
L并(未出现)={B,D},{A,C,E}
{
	{A,B,D}={A,B,C,D,E,G},{C,B,D}={A,B,C,D,E},{E,B,D}={A,B,C,D,E}//有满足时就停止计算
	候选码为:{A,B,D}、{B,C,D}、{B,D,E}
}

关系模式范式的判断和范式的分解(视频点击)

1NF(最基本的范式)

e.g. 关系模式R(A,B,C,D),函数依赖F={AB->D,A->C}
1.候选码:A,B
2.是否是2NF?为什么?
不是2NF,因为存在A->C,即存在非主属性对码的部分函数依赖
3.如何分解变成2NF?
R1(A,B,D)、R2(A,C)

2NF(消除非主属性对码的部分函数依赖)

e.g. R(A,B,C,D),F{A->BC,B->D}
1.候选码:A
2.是否是3NF,为什么?
不是3NF,因为存在A->B,B->D,得A->D,存在非主属性对码的传递函数依赖
3.如何分解为3NF
R1(A,B,C)、R2(B,D)

3NF(消除非主属性对码的传递函数依赖)

e.g. R(A,B,C),F{AB->C,BC->A,C->B}
1.候选码:AB or C
2.此题是否是BCNF,为什么?(该题有错误)
不是BCNF,因为C是决定性因素,但是C不包含码
3.若一个题是BCNF,为什么?
不存在任何属性对码的传递函数依赖和部分函数依赖

BCNF(消除主属性对码的部分和传递函数依赖)

e.g. R(A,B,C),F:{A->B,A->C}
不为4NF,分解成R1(A,B),R2(A,C)

4NF(消除非平凡且非函数依赖的多值依赖)

多值依赖:一个主码可以决定一组值

5NF(消除连接依赖)

一个表可以分成三个表二又可以通过自然连接,合到一起

例:

例1:
R(商店编号,商品编号,数量,部门编号,负责人)
如果规定:(1)每个商店的每种商品只能在一个部门销售
		(2)每个商店的每个部门只有一个负责人
		(3)每个商店的每种商品只有一个库存数量
试回答下列问题:
		(1)根据上述规定,写出关系模式R的基本函数依赖
		(2)找出关系模式R的候选码
		(3)试问关系模式R最高达到了第几范式?为什么?
		(4)如果R不属于3NF,请将R分解成3NF模式集?
答案:
(1)有三个函数依赖:(商店编号,商品编号)->部门编号,(商店编号,部门编号)->负责人,(商店编号,商品编号)->数量
(2)候选码:(商店编号,商品编号)
(3)最高达到2NF,因为存在着非主属性"负责人"对候选码(商店编号,商品编号)的传递函数依赖,所以R属于2NF,R不属于3NF
(4)R1(商店编号,商品编号,部门编号,数量),R2(商店编号,商品编号,负责人)


例2:
设有关系模式R(A,B,C,D,E),R中的属性均不可再分解,若基于函数依赖进行讨论,试根据给定的函数依赖集F,分析R最高属于第几
范式,并说明原因?

(1)F={AB->C,AB->E,CDE->AB}
答:R最高属于3NF,因为候选码为CDE,ABD;因为AB是决定性因素,不包含码,所以他不满足BCNF

(2)F={CD->A,CD->B,AB->E}
答:R最高属于2NF,因为候选码为CD,即主属性为C,D且存在非主属性对码的传递函数依赖(CD->AB->E)

保持无损连接性的BCNF分解算法(视频1&视频2)

INPUT:关系模式R以及R上成立的函数依赖集F

  • 1.关系模式R以及在R上成立的函数依赖集F1.初始化P={R}

  • 2.若P中的所有关系模式S都是BCNF,则转步骤4

  • 3.若P中有一个模式S不是BCNF,则S中必能找到一个函数依赖X->A,X不是S的候选码,且A不属于x。设S1=XA,S2 = S-A,分解后的{S1,S2}替代S,转步骤2

  • 4.算法结束,输出P

例:R={A,B,C,D,E,F,G},F={A->B,A->C,C->D,C->E,E->FG},将R分解成BCNF

R={A,B,C,D,E,F,G},F={A->B,A->C,C->D,C->E,E->FG}
1.P={A,B,C,D,E,F,G},Fp={A->B,A->C,C->D,C->E,E->FG}
2.先判断满足BC范式的函数依赖,(BC范式:看下函数依赖的左侧是否都为候选码)
左:A
右:B,D,F,G
左右:C,E
未出现:null
左 “并” 未出现={A},A是唯一候选码
此时指针从F的左边依次进行判断(是否是BC范式)
指针到:C->D,不满足BC范式,开始进行S1=XA,S2=S-A
S1={C,D},S2=S-A={A,B,C,E,F,G},F2={A->B,A->C,C->E,E->FG,C->FG} (注意这里要将传递函数依赖也写出来)
......依次递归即可
  • 8
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

five-five

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

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

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

打赏作者

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

抵扣说明:

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

余额充值