暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

算法描述-数据库规范化设计

数离dharma 2021-05-11
1178

规范化设计算法描述

1)FD推导求F+。

问题描述:已知R(U,F),求FD集闭包F+。

输入:U, F

输出:F+

算法描述:

① A1规则生成的所有FDs;

② A2规则生成的所有FDs;

③ A3规则生成的所有FDs。


2)求属性集闭包

问题描述:已知关系R(U,F),求属性集X的闭包X+。

输入:U, F和属性集X

输出:属性集X相对于F的闭包X+。

算法描述:

① X+ = X;

② 对于FD: Y→Z,如果Y⊆X+,那么Z也放入X+中。

③ 验证F中所有FD,直到X+不再扩充。


3)用属性集闭包求F+。

问题描述:已知关系R(U,F),用属性集闭包方法求F+。

输入:U, F

输出:F+

算法描述:Fclosure2(U,F)

① 求U的所有子集;

② 对U的所有子集X求X+;

③ 求X+的所有子集Yi,构造X→Yi;

引用算法:

substring(U): 求属性集U的所有子集;

Xclosure(X,F):相对于F求属性集X的闭包X+。


4)求属性集U的所有子集substring(U)

问题描述:已知属性集U,求U的所有子集,包括空集∅,用字符串并置表示,按字母次序排列。

输入:属性集U

输出:U的所有子集,用字符串的列表表示。

数据结构:

U = 'ABC'

P = [∅,A,B,C,AB,BC,AC,ABC]


5)FD求关系模式所有候选键

问题描述:已知R(U)与F,求R的所有候选键。

输入:U, F

输出:R的所有候选键

算法描述:

① 找出FD右边没有出现过的属性,设为K;

② 求K+,如果K+=U,则K为唯一候选键;

③ 如果K+⊆U,则K与其他属性结合,继续求闭包,同理判断,找出所有候选键。

④ 如果所有属性都出现在FD右边,则从单个属性开始求闭包,依次组合进行判断。


6)求最小依赖集Fmin

问题描述:已知R(U, F),求最小依赖集Fmin。

输入:F

输出:Fmin

算法描述:

① FD集右边分解为单属性;

② 消除FD右边重复属性;

③ 消除重复FD和平凡FD;

即得Fmin。


7)无损连接测试算法

分两种情况测试无损分解:① 模式存有数据集;② 模式不含数据集。

②又分成两种情况:子模式3个及以上,用表格法CHASE过程进行更新;如果分解为2个子模式,用定理进行验证。

问题描述:已知R(U,F,P),判断基于F,U分解为P是否为无损分解。

输入:R(U,F,P)

输出:True无损分解,False损失分解

① 有数据集情况

r = mρ(R)为无损分解,否则为损失分解。

② 无数据集情况-表格作业法

  • 作初始化表;

  • 在表中按照FD集来更新数据,使其符合约束条件。

  • 更新完后,如果有一行数据全是aj,则为无损分解,否则损失分解。

③ R分解为2个子模式情况,根据定理判断,满足:

    R1∩R2 → R1-R2  或者  R1∩R2 → R2-R1 成立。


8)FD集F在属性集Z上投影

问题描述:已知FD集F,求F在属性集Z上投影。

输入:F

输出:πZ(F)

算法描述:

① 首先把F中的FD投影Z上,即对于X→Y,有:XY⊆Z;

② 把F+中跟属性集Z有关联的FD也同样投影过来,不包含平凡FD。


9)判断范式

问题描述:已知R(U,F),判断关系模式是第几范式?

输入:U, F

输出:第几范式(?NF)

算法描述:

① BCNF:要求每个FD左边包含候选键;

② 3NF:要求每个FD要么左边包含候选键,要么右边是主属性;

③ 2NF:要求每个FD都完全依赖于候选键。

④ 1NF:默认都是。


10)模式分解

问题描述:已知R(U,F),把R分解为3NF或BCNF。

输入:U, F

输出:3NF或BCNF模式集

算法描述:

① 无损分解且保持依赖分解为3NF模式集;

    根据最小依赖集进行分解。

② 无损分解为BCNF模式集。

根据不满足条件的FD集进行无损分解。


文章转载自数离dharma,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论