数据库讲解---(关系规范化)【二】

目录

前言

一.函数依赖相关

1.1函数依赖集F的逻辑蕴涵

1.2函数依赖集闭包

1.3函数依赖的推理规则

1.3.1独立推理规则

自反律

增广律

传递律

1.3.2其他推理规则

合并规则

分解规则

伪传递规则

二.数据集闭包与F逻辑蕴涵的充要条件

2.1属性集闭包

2.2F逻辑蕴涵的充要条件

2.3求属性集闭包算法

2.4例题

2.5算法终止条件

三.码值理论

3.1函数依赖集F的属性分类

 3.2(L、R、N、LR)四类属性的定理

 3.3例题

四.函数依赖集的等价和最小函数依赖集

4.1函数依赖集的覆盖与等价

4.2最小函数依赖集的定义

4.3求最小函数依赖集例题

五.关系模式的分解方法

5.1模式分解的概念

5.2分解的无损连接性判定(无损分解)

 5.3分解的函数依赖保持性判定

5.4满足3NF的函数依赖保持分解算法

5.5满足3NF的函数依赖保持和无损连接的分解算法

前言

数据库讲解---(关系规范化)【一】_关系数据库规范化-CSDN博客

一.函数依赖相关

1.1函数依赖集F的逻辑蕴涵

对于一个函数依赖F的关系模式R(U,F),其任何一个关系r,若函数依赖X->Y都成立,则称F逻辑蕴涵X->Y

1.2函数依赖集闭包

所有被一个已知函数依赖集F逻辑蕴涵的那些函数依赖的集合为F的闭包,记为F+

1.3函数依赖的推理规则

1.3.1独立推理规则

  • 自反律

如果Y包含于X,则X->Y

  • 增广律

如果Z包含于W,且X->Y,则XW->YZ

  • 传递律

如果X->Y且Y->Z,则X->Z

1.3.2其他推理规则

  • 合并规则

X->YX->Z,有X->YZ

  • 分解规则

X->YZ包含于Y,有X->Z

  • 伪传递规则

X->YWY->Z,有XW->Z

二.数据集闭包与F逻辑蕴涵的充要条件

2.1属性集闭包

X_{F}^{+}属性集X关于函数依赖集F闭包

换句话说,属性XF上的属性集闭包就是属性X能够推导出来的所有属性的集合

2.2F逻辑蕴涵的充要条件

于是判断某一函数依赖X->Y能否由F根据Armstrong公理导出的问题,就转换为求:X_{F}^{+}

2.3求属性集闭包算法

求:X_{F}^{+}

属性集X关于U上的函数依赖集F闭包X_{F}^{+}

步骤

PS:“该算法计算过程是有限的,经过有限次循环后,一定会得到一个不会再次迭代的结果

2.4例题

解法

  1. X_{F}^{0} = X = BD
  2. F中搜寻所有仅由X_{F}^{0}中属性决定的函数依赖,有一个:“D->EG”,注意“ACD->B”不能算作,因为其中还包含了“AC”,此时的X_{F}^{1} = BDEG
  3. F(此时的F中已经不包含“D->EG”了)中搜寻所有仅由X_{F}^{1}中属性决定的函数依赖,有一个:“BE->C”,此时的X_{F}^{2} = BCDEG
  4. F(此时的F中已经不包含“BE->C”了)中搜寻所有仅由X_{F}^{2}中属性决定的函数依赖,有三个:“C->A、BC->D、CG->BD”,此时的F_{X}^{3} = ABCDEG

此时F_{X}^{3}已经包含了F中所有属性可以直接退出算法此时的F_{X}^{3}就是最后所求X_{F}^{+}

2.5算法终止条件

  • X_{i}^{i+1} = X^{i}
  • 发现X^{i}包含全部属性
  • F中的函数依赖的右边属性中,再也找不到X^{i}中未出现过的属性
  • F中未用过的函数依赖的左边属性中已没有X^{i}的子集

三.码值理论

3.1函数依赖集F的属性分类

  • L类:仅出现在F的函数依赖左边的属性
  • R类:仅出现在F的函数依赖右边的属性
  • N类:在F的函数依赖左右两边均未出现的属性
  • LR类:在F的函数依赖左右两边均出现的属性

 3.2(L、R、N、LR)四类属性的定理

  1. 对于给定关系模式R及其函数依赖集F,若X是L类属性,则X必是R的候选码的成员
  2. 对于给定关系模式R及其函数依赖集F,若X是N类属性,则X必是R的候选码的成员
  3. 对于给定关系模式R及其函数依赖集F,若X是R类属性,则X不在任何候选码中
  4. 对于给定关系模式R及其函数依赖集F,若X是L类或N类属性组成的属性集,且X^{+}包含R的全部属性,则X是R的唯一候选码

 3.3例题

解题方法

  • 在做这种题时,我们要首先写出R的L类属性和N类属性,因为只有这两个属性才是候选码中成员
  • 在这道题中,L类属性有:“CE”,N类属性有:“P
  • 因此X为:“CEP”,而X^{+}为“ABCDEPX^{+}包含了R的全部属性,因此“CEP”是R的唯一候选码

四.函数依赖集的等价和最小函数依赖集

4.1函数依赖集的覆盖与等价

  • F和G是依赖集,若F^{+}=G^{+},则称F与G等价,记为F\equivG
  • F和G等价充分必要条件是:“F\subseteqG^{+},且G\subseteqF^{+}

检查两个函数依赖集F合G是否等价的方法

  1. 检查F中的每个函数是否属于G^{+},若全部满足,则F\subseteqG^{+}。例如:“若有X->Y\inF,则计算X_{G}^{+},若果Y\subseteqX_{G}^{+},那么X->Y\inG^{+}
  2. 检查是否G\subseteqF^{+}
  3. 如果G\subseteqF^{+},且F\subseteqG^{+},则F与G等价

4.2最小函数依赖集的定义

如果函数依赖集F满足下列条件,则称F是一个极小函数依赖集最小覆盖

  • F中每一个函数依赖的右边都是单个属性
  • 对F中任一函数依赖X->A,F-(X->A)都不与F等价
  • 对于F中的任一函数依赖X->A,{F-(X->A)}∪{Z->A}都不与F等价,Z为X的任一子集

如果函数依赖集F与某个最小函数依赖集Fm等价,则称Fm是F的最小覆盖或Fm是F的最小依赖集

最小函数依赖集的求解算法

  1. 检查F中的每个函数依赖X->A,若A = A1,A2,....,则根据分解规则,用X->A_{i}(i=1,2,3...,k)取代X->A
  2. 检查F中的每个函数依赖集X->A,令G = F - (X->A),若有A\inX_{G}^{+},则从F中去掉此函数依赖
  3. 检查F中各函数依赖X->A,设X = B1,B2,....,Bm,检查B_{i}(i=1,2,3,...,m),当A\in(X-B_{i})时,即以X-B_{i}替换X

4.3求最小函数依赖集例题

问题

将下列函数依赖集F划分为最小函数依赖集

解答

  1. 消去F中冗余的函数依赖,即可求得最小函数依赖集
  2. 考察A->B,将A->B从F中删除,令X=A,则X^{+}=AC,因为B不属于X^{+},所以A->B不冗余,保留
  3. 考察B->A,将B->A从F中删除,令X=B,则X^{+}=ABC,因为A属于X^{+},所以B->A冗余,删除
  4. 考察B->C,将B->C从F中删除,令X=B,则X^{+}=B,因为C不属于X^{+},所以B->C不冗余,保留
  5. 考察A->C,将A->C从F中删除,令X=A,则X^{+}=ABC,因为C属于X^{+},所以A->C冗余,删除
  6. 考察C->A,将C->A从F中删除,令X=C,则X^{+}=C,因为A不属于X^{+},所以C->A不冗余,保留
  7. 因此可以得到F2 = {A->B,B->C,C->A}
  8. 判断每个函数依赖左边是否有冗余属性(即判断左边属性是否仅为单属性)
  9. 如果首先考察B->C,那么求得F3 = {A->B,B->A,A->C,C->A}也是F的最小覆盖,因此可知函数依赖集

五.关系模式的分解方法

5.1模式分解的概念

5.2分解的无损连接性判定(无损分解)

无损分解的判定算法

输入

一个关系模式R(A1,A2,...,An),R上的一个函数依赖集F以及R的一个分解ρ = {{R1,F1},{R2,F2},...,{Rk,Fk}}

输出

确定ρ是否是一个连接不失真分解

方法

  1. 构造一个n列k行表,第i对应于R_{i},第j列对应于属性A_{j}
  2. 填表:若A_{j}\inR_{i}则第i行第j列上填入a_{j},否则填入b_{ij}
  3. 修改表:注意检查F中的每一个函数依赖X->Y,如果在对应于X的那些属性的所有列上X的符号相同,就使这些符号相同的行中对应于Y的那些属性的那些列上的符号也相同。即如果其中有a_{j},则将b_{ij}改为a_{j},若没有a_{j},则将它们全部改为b_{ij}
  4. 反复进行(3),如发现某一行变成a1,a2,....,ak,则此分解ρ具有连接不失真性

例题

解法

  1. 首先构造初始表,并填表:
  2. 逐一考察函数依赖并修改表
  3. S->D,可以将b_{36}改为a_{6}
  4. I->B,b_{31}改为a_{1}
  5. IS->Q,因为IS上没有值相等的行,所以不用修改表
  6. B->O,将b_{22}b_{32}都改为a_{2}
  7. 此时表中出现了“a1、a2、a3、a4、a5、a6”的行,所以该分解具有无损连接性

 5.3分解的函数依赖保持性判定

保持依赖的判定算法

  • 检验任一个函数依赖X->Y\inF是否可以用G根据Armstrong公理导出,即Y\subseteqX_{G}^{+}是否成立
  • 检验任一个函数依赖X->Y\inG是否可以用F根据Armstrong公理导出,即Y\subseteqX_{F}^{+}是否成立
  • 若上述Y\subseteqX_{G}^{+}与Y\subseteqX_{F}^{+}均成立,则函数保持依赖 

例题

解法

5.4满足3NF的函数依赖保持分解算法

例题

解法

5.5满足3NF的函数依赖保持和无损连接的分解算法

例题

解法

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

是洋洋a

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

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

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

打赏作者

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

抵扣说明:

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

余额充值