数据库课程设计之无损连接性

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计说明书

设计题目:数据库课程设计

专业:计算机科学与技术班级:2010级5班设计人:王露

山东科技大学

2012年04月07 日

摘要:

本次课程设计,研究了如何判断输入的模式分解是否保持无损连接性,提示用户输入关系模式的属性集,函数依赖集以及模式分解,利用算法6.的表格法,运行程序,输出是否具有无损连接性。用java语言实现,在eclipse上运行,且只考虑了分解的无损连接性而没有考虑函数依赖的保持性。

目录:

任务书-------------------------------------------------------------------------------------2

教师评语---------------------------------------------------------------------------------3

摘要---------------------------------------------------------------------------------------4

题目要求--------------------------------------------------------------------------------4

需求分析--------------------------------------------------------------------------------4

程序设计--------------------------------------------------------------------------------6

结果分析--------------------------------------------------------------------------------15

实验总结--------------------------------------------------------------------------------20

附录(使用说明)-------------------------------------------------------------------21

正文:

1. 题目:选择一种高级语言实现判别一个分解的无损连接性

输入:某一个关系模式的属性集、函数依赖集和该关系模式的一个分解 输出:分解是否保持无损连接性 要求:(1)按算法6.2和6.4实现(P190)

(2)能给出根据模式的分解形成初始表格

(3)给出根据每一个函数依赖表格的变化情况 (4)提供课程设计报告

2.需求分析

1.关系模式R(U,F),ρ={R 1(U 1,F 1),R 2(U 2,F 2),…, R k (U k ,F k )}是R(U,F)的一组子集,若U 1⋃U 2⋃…⋃U k =U ,则称 ρ 是R(U,F)的一个分解(Decomposition)。 分解有两个准则,无损连接性和函数依赖的保持性。无损连接性的定义为 设关系模式R(U,F), ρ={R 1,R 2,…,R k }是分解R 所得的一组关系模式,对于R 的满足F 的任一个关系实例r ,都有:

成立。

即r 等于它在R i 上投影的自然连接,则称此分解为满足F 的具有无损连接性的分解。

2.分解的无损连接性判断定理6.4:

设关系模式R(U,F), ρ={R 1,R 2}是R 的一个分解,当且仅当U 1⋂U 2→U 1-U 2或 U 1⋂U 2→U 2-U 1∈F +时,则分解ρ具有无损连接性。 3.算法6.2 {判断分解ρ的无损连接性} 输入:R(U,F),U=A 1A 2…A n ; ρ={R 1,R 2,…,R k }

输出:如果ρ具有无损连接性,输出True ,否则输出False 。

(1) 构造一个n 列k 行的二维表T 。若A j ∈R i ,则T ij =a j ;否则T ij =b ij 。 (2) flag:=True; Do While Flag Flag:=False;

For 每一个X →Y ∈F Do

For T 中的任意两行t j ,t m Do

)

()()(21r r r r k R R R ∏∞∞∏∞∏=

If t j[X]=t m[X] And t j[Y]≠t m[Y] Then

EQUAY(t j,t m);Flag:=True;

(3) For T的每一行t Do

If t=a1a2…a n Then Return(True);

Return(False).

故根据定理6.2和6.4的算法和定理,可以得出判断关系模式的分解是否保持无损连接性的充分必要条件是U1⋂U2→U1-U2或U1⋂U2→U2-U1∈F+时,则分解ρ具有无损连接性。所以问题转变成为集合的并差问题,然后根据6.2算法再加以完善,就可以编写程序来实现这一功能了。

当然,关系模式分解的另一个准则是函数依赖的保持性,这两个准则虽然没有什么直接的关系,却决定了一个关系模式可以达到哪一个范式,不能单一的进行讨论,都需要进行分析,现在,为简便起见,我们只讨论一个关系模式的分解是否保持着无损连接性,暂时不讨论其函数依赖的保持性

3.程序设计

3.1粗略设计

根据算法6.2,利用表格法进行判断,以下是表格法的详细步骤。

算法:ρ={R1,R2,...,R k}是关系模式R的一个分解,U={A1,A2,...,A n},F={FD1,FD2,...,FD p},并设F是一个最小依赖集,记FD i为X i →A lj,其步骤如下:

①建立一张n列k行的表,每一列对应一个属性,每一行对应分解中的一个关系模式。若属性A j U i,则在j列i行上真上a j,否则填上b ij;

②对于每一个FD i做如下操作:找到X i所对应的列中具有相同符号的那些行。考察这些行中l i列的元素,若其中有a j,则全部改为a j,否则全部改为b mli,m 是这些行的行号最小值。

如果在某次更改后,有一行成为:a1,a2,...,a n,则算法终止。且分解ρ具有无损连接性,否则不具有无损连接性。

对F中p个FD逐一进行一次这样的处理,称为对F的一次扫描。

③比较扫描前后,表有无变化,如有变化,则返回第步,否则算法终止。如果发生循环,那么前次扫描至少应使该表减少一个符号,表中符号有限,因此,循环必然终止。

举例1:已知R,U={A,B,C},F={A→B},如下的两个分解: