<数据库概论|第六章 关系数据库理论> 算法合集

X F + X_{F}^{+} XF+求解算法

即求 X X X在函数依赖集 F F F条件下所能决定的属性的集合。

  1. X F + = X X_F^+=X XF+=X
  2. 逐一考察 F F F中的每一个函数依赖 v → w v \rightarrow w vw, 如果 v ∈ X F + v \in X_F^+ vXF+,则 w w w并入 X F + X_F^+ XF+
  3. X F + = U X_F^+ = U XF+=U or X F + X_F^+ XF+不再增加,算法结束

极小函数依赖集求解算法

拆右,去左(属性冗余),去重(函数依赖冗余)

  1. 分解右部属性,得 F 1 F_1 F1
  2. 去除左侧属性冗余,即变动 X F + X_F^+ XF+中的 X X X,函数依赖集为 F F F,此步骤将 F 1 F_1 F1修改得到 F 2 F_2 F2
  3. 去除函数依赖冗余,函数依赖集为上一步得到的 F 2 F_2 F2

候选码求解算法

  1. 划分L,R,N,LR类属性,L,N类属性必包含在候选码中,R类属性必不在候选码中,LR类属性不确定,需要筛选。 X X X为L,N类属性的集合, Y Y Y为LR属性的集合
  2. X F + = U X_F^+ = U XF+=U,算法结束。 X X X是唯一的候选码
  3. 逐一查看 Y Y Y中的单个属性 A A A,若 ( X A ) F + = U (XA)_F^+ = U (XA)F+=U,则 X A XA XA为候选码, Y = Y − A Y=Y-A Y=YA
  4. Y Y Y不为空,依次查看 Y Y Y中任意2个、3个、…属性 Z Z Z,若 ( X Z ) F + = U (XZ)_F^+=U (XZ)F+=U,且 X Z XZ XZ不包含已求得的候选码, X Z XZ XZ为候选码,直至取完所有属性的集合

模式分解

无损连接性的判定算法(通用)

  1. 建立一张 n n n k k k行的表,每一列对应一个属性 A j A_j Aj,每一行对应一个关系模式 R i R_i Ri。若属性 A j A_j Aj属于 U i U_i Ui,则在表中 i行j列处填上 a j a_j aj,否则填上 b i j b_{ij} bij
  2. 把表看作 R < U , F > R<U, F> R<U,F>的一个关系,依次检查 F F F中每一函数依赖在表中是否成立.若不成立,则做出修改使其成立。修改原则:能改成 a a a则改成 a a a,否则改成下标最小的 b b b;(称为一趟扫描过程)【看某一函数依赖 X → Y X\rightarrow Y XY左侧的属性 X X X所在的列,是否有两行出现相同的 a a a。若出现,,且有一行 Y Y Y所在的列取值也为 a a a,则将另一行的 Y Y Y所在列的值也改为 a a a
  3. 如果在一趟扫描中的某次更改之后出现形如 a 1 , a 2 , … , a n a_1,a_2,…,a_n a1,a2,,an的行,算法结束,分解ρ具有无损连接性;否则,继续下一趟扫描过程,直到一趟扫描之后表无任何变化时算法结束 (此时未出现形如 a 1 , a 2 , … , a n a_1,a_2,…,a_n a1,a2,,an的行),分解ρ不具有无损连接性

一分为二的模式分解的无损连接性判定算法

不考虑多值依赖

关系模式 R < U , F > R<U, F> R<U,F>的一个分解 ρ = R 1 < U 1 , F 1 > , R 2 < U 2 , F 2 > ρ={ R1<U1,F1>,R2<U2,F2> } ρ=R1<U1,F1>R2<U2,F2>具有无损连接性的充分必要条件是: U 1 ∩ U 2 → U 1 - U 2 U1∩U2 → U1-U2 U1U2U1U2 U 1 ∩ U 2 → U 2 - U 1 U1∩U2 → U2-U1 U1U2U2U1成立。

考虑多值依赖(Multivalued Dependency,MVD)

MVD 定义:设 R ( U ) R(U) R(U)是一个属性集 U U U上的关系模式, X X X Y Y Y U U U的子集。如果对 R ( U ) R(U) R(U)的任一关系 r r r r r r中任意在 X X X上值相同的元组 s , t s, t s,t,交换 s , t s, t s,t Y Y Y上的分量而得到的元组仍在关系$ r$ 中,则称 Y Y Y多值依赖于 X X X,或 X X X多值决定 Y Y Y,记为 X → → Y X→→Y X→→Y

关系模式 R < U , F > R<U, F> R<U,F>中, F F F R R R中的函数依赖和多值依赖的集合。分解 ρ = R 1 < U 1 , F 1 > , R 2 < U 2 , F 2 > ρ={ R1<U1,F1>,R2<U2,F2> } ρ=R1<U1,F1>R2<U2,F2>具有无损连接性的充分必要条件是 U 1 ∩ U 2 → → U 1 - U 2 U1∩U2 →→ U1-U2 U1U2→→U1U2 成立

函数依赖集的投影求解算法

ρ = R 1 < U 1 , F 1 > , R 2 < U 2 , F 2 > , … , R k < U k , F k > ρ={ R1<U1, F1>,R2<U2, F2>,…,Rk<Uk, Fk>} ρ=R1<U1,F1>R2<U2,F2>Rk<Uk,Fk>是关系模式 R < U , F > R<U, F> R<U,F>的一个分解,求解 F F F在每个 U i U_i Ui上投影 F i ( i = 1 , 2 , . . . , k ) F_i (i=1, 2, ..., k) Fi(i=1,2,...,k)

  1. 初始令每个 F i F_i Fi为空集;
  2. 依次取 U i U_i Ui中的单一属性 X X X,求 X F + X_F^+ XF,若 A ∈ U i A\in U_i AUi A ∈ X F + A\in X_F^+ AXF X → A X→A XA不能由当前求得的 F i F_i Fi推导出,则将 X → A X→A XA加入 F i F_i Fi,如加入使得 F i F_i Fi中一部分已有依赖变得多余,则从 F i F_i Fi中删除多余的依赖;
  3. 依次任取 U i U_i Ui中的两个、三个、…个属性构成属性组 X X X,求 X F + X_F^+ XF,若 A ∈ U i A \in U_i AUi A ∈ X F + A\in X_F^+ AXF X → A X→A XA不能由当前求得的 F i F_i Fi推导出,则将 X → A X→A XA加入 F i F_i Fi ,如加入使得 F i F_i Fi中一部分已有依赖变得多余,则从 F i F_i Fi中删除多余的依赖;
  4. 重复3,直到取尽Ui中的所有属性组 X X X,算法结束
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值