本发明属于计算机应用技术领域,具体涉及一种数据库一致性错误的重要度判定方法。
背景技术:
文献"onapproximatingoptimumrepairsforfunctionaldependencyviolations,dblp,2009年53-62页"公开了一种通过最小化距离度量修复数据库中违反函数依赖的一致性错误的方法。该距离度量取决于数据库中修改元组的数量以及修改元组的权重,通过尽可能小的距离度量对数据库中的函数依赖进行值修复。该方法中对数据库的函数依赖修复主要考虑修改元组的数量以及修改元组的权重,并未考虑函数依赖之间的关系。函数依赖违规即违反函数依赖的情况,在实际中函数依赖违规之间不是相互独立的,其重要性也是不尽相同的。在数据库中,其中一些函数依赖违规比另一些更重要,一些函数依赖违规会引起另一些函数依赖违规。在修复数据库中函数依赖时,找出函数依赖违规之间的关系并且根据函数依赖违规的重要度对函数依赖进行修复,帮助用户找出函数依赖违规根本的原因,以更低的代价修复数据库中的函数依赖违规。
技术实现要素:
为了克服现有方法实用性差的不足,本发明提供一种数据库一致性错误的重要度判定方法。该方法首先根据c-graph和d-graph的定义构建关系表的c-graph和d-graph超图,利用这两种超图描述数据库中关系表的属性之间的依赖关系以及属性值之间的依赖关系;再根据给出的函数依赖约束间关系的分类对表中的函数依赖约束关系进行归类;找出函数依赖违规并根据给出的函数依赖违规间关系的分类对函数依赖违规间的关系进行归类;利用公式计算函数依赖违规的效益值;根据计算得到的函数依赖违规效益值对函数依赖违规重要度进行排序。在修复数据库中的函数依赖违规时,找出函数依赖违规中根本的原因,以降低因修复一个函数依赖违规而引起另一些函数依赖违规带来的代价,实用性好。
本发明解决其技术问题所采用的技术方案:一种数据库一致性错误的重要度判定方法,其特点是包括以下步骤:
步骤一、对数据库中的关系表构建c-graph和d-graph超图。c-graph给出数据库d上的函数依赖集合σ,c-graphgσ=(v,e):σi:xi→yi,
x、y:为关系表中的属性,u=x∪y;
σ:函数依赖集合;
v:为超图中节点的集合;
e:为超图中超边的集合;
h(e):表示超边的头结点;
t(e):表示超边的尾节点;
t:为表r中的元组;
ai:是属性名且ai∈u;
fi:是t[ai]的一个值;
步骤二、对不同函数依赖之间的关系进行分类。假设σ集合为最小覆盖,σi:x→y和σj:x'→y',根据函数依赖最小覆盖的定义:
若
如果约束的右边属性值相同,表示如下:
如果约束左边和右边都有共享属性,表示如下:
σ:函数依赖集合名称;
步骤三、找出关系表中的函数依赖违规并对不同函数依赖违规间的关系进行分类。假设当解决函数依赖违规问题时,仅修正函数依赖约束的右边属性的值。σi和σj之间的违规模式分为以下四类:
在
在
在
在
在
若
步骤四、函数依赖违规重要度评估,忽视所有的代价模型,修正函数依赖违规可能给数据库带来一些消极和积极的影响。一个函数依赖违规修正可以给关系表r质量的提高带来一些效益,所以根据每一个违规带来的潜在效益来评估其重要性。用函数依赖违规修正操作前和操作后脏元组的改变数量来评估函数依赖违规的重要性。vio(σ,r)θvio(σi,r,v)表示修正函数依赖违规vio(σi,r,v)之后的函数依赖违规集合。|vio(σ,r)|表示包括vio(σ,r)的元组数量。因为vio(σi,r,v)的消除可能削减脏元组的数量或者可能带来新的的脏元组,所以|vio(σ,r)θvio(σi,r,v)|≥|vio(σi,r,v)|或者|vio(σ,r)θvio(σi,r,v)|≤|vio(σi,r,v)|。|vio(σi,r,v)|-|vio(σ,r)θvio(σi,r,v)|评估关系表r中违规数量的改变和修正后的实例r',定义其改变量为δ(vio(σi,r,v)),违规的效益值计算公式如下:
违规不是孤立的,数据库中的一个函数依赖违规会影响另一个违规。当评估一个函数依赖违规修正所带来的效益时,不仅考虑函数依赖违规本身还要考虑函数依赖违规的演变因素。在公式(1)中评估一个函数依赖违规消除的潜在好处为函数依赖违规所在的关系表中元组消除或增加的比率。给出由约束集合σ和关系表r创建的相关的d-graph,假设
假设约束σi和其他约束的模式是
公式(4)中
在公式(4)中当违规满足
公式(5)中
在公式(5)中当违规满足
步骤五、对数据库中函数依赖违规重要度进行排序,根据步骤一得到关系表的c-graph和d-graph超图;通过步骤二得到函数依赖间的关系并对函数依赖间的关系进行分类;在步骤三找出关系表的所有函数依赖违规,并对函数依赖违规关系进行分类;在步骤四中根据步骤三的分类计算每一个函数依赖违规的效益值。当对函数依赖违规排序时,首先创建一个列表,当通过步骤四得到函数依赖违规的效益值,根据比较函数依赖违规效益值将违规插入到列表中。
本发明的有益效果是:该方法首先根据c-graph和d-graph的定义构建关系表的c-graph和d-graph超图,利用这两种超图描述数据库中关系表的属性之间的依赖关系以及属性值之间的依赖关系;再根据给出的函数依赖约束间关系的分类对表中的函数依赖约束关系进行归类;找出函数依赖违规并根据给出的函数依赖违规间关系的分类对函数依赖违规间的关系进行归类;利用公式计算函数依赖违规的效益值;根据计算得到的函数依赖违规效益值对函数依赖违规重要度进行排序。在修复数据库中的函数依赖违规时,找出函数依赖违规中根本的原因,以降低因修复一个函数依赖违规而引起另一些函数依赖违规带来的代价,实用性好。
下面结合附图和具体实施方式对本发明作详细说明。
附图说明
图1是本发明数据库一致性错误的重要度判定方法实施例中关系表的函数依赖图。
图2是本发明数据库一致性错误的重要度判定方法实施例中关系表的constraintgraphc-graph超图。
图3是本发明数据库一致性错误的重要度判定方法实施例中关系表的datagraphd-graph超图。
具体实施方式
参照图1-3。本发明数据库一致性错误的重要度判定方法具体步骤如下:
关系表1
关系表2
步骤一、对数据库中的关系表构建c-graph、d-graph超图。
以关系表1为例,根据关系表1得到函数依赖a,b→ec,d→e,创建关系表1的c-graph,如图2所示。根据关系表1和图2创建关系表1的d-graph,如图3所示。
对数据库中的关系表构建c-graph、d-graph超图。c-graph:给出数据库d上的函数依赖集合σ,c-graphgσ=(v,e):σi:xi→yi,
x、y:为关系表中的属性,u=x∪y;
σ:函数依赖集合;
v:为超图中节点的集合;
e:为超图中超边的集合;
h(e):表示超边的头结点;
t(e):表示超边的尾节点;
t:为表r中的元组;
ai:是属性名且ai∈u;
fi:是t[ai]的一个值;
步骤二、对函数依赖之间的关系进行归类。
步骤一对函数依赖之间的关系进行了相应的分类,从关系表1中得到函数依赖a,b→ec,d→e。根据图2和步骤一所述函数依赖的分类对a,b→ec,d→e进行归类,函数依赖间的违规属于
对不同函数依赖之间的关系进行分类。假设σ集合为最小覆盖,σi:x→y和σj:x'→y',根据函数依赖最小覆盖的定义:
若
如果约束的右边属性值相同,表示如下:
如果约束左边和右边都有共享属性,表示如下:
σ:函数依赖集合名称
步骤三、找出违反函数依赖的集合并进行归类。
根据d-graph超图和函数依赖a,b→ec,d→e,找到五组违反函数依赖的元组集合。在d-graph超图中得到e1~e5为
找出关系表中的函数依赖违规并对不同函数依赖违规间的关系进行分类。假设当解决函数依赖违规问题时,仅修正函数依赖约束的右边属性的值。σi和σj之间的违规模式分为以下四类:
在
在
在
在
在
步骤四、对函数依赖违规重要度进行评估,计算函数依赖违规的效益值。
根据公式(1)计算得到每一个违规的效益值,其中每一个违规的|δ(vio(σi,r,v))|计算根据公式(2)得到,根据公式(3)计算得到公式(2)中的
函数依赖违规重要度评估,忽视所有的代价模型,修正函数依赖违规可能给数据库带来一些消极和积极的影响。一个函数依赖违规修正可以给关系表r质量的提高带来一些效益,所以根据每一个违规带来的潜在效益来评估其重要性。用函数依赖违规修正操作前和操作后脏元组的改变数量来评估函数依赖违规的重要性。vio(σ,r)θvio(σi,r,v)表示修正函数依赖违规vio(σi,r,v)之后的函数依赖违规集合。|vio(σ,r)|表示包括vio(σ,r)的元组数量。因为vio(σi,r,v)的消除可能削减脏元组的数量或者可能带来新的的脏元组,所以|vio(σ,r)θvio(σi,r,v)|≥|vio(σi,r,v)|或者|vio(σ,r)θvio(σi,r,v)|≤|vio(σi,r,v)|。|vio(σi,r,v)|-|vio(σ,r)θvio(σi,r,v)|评估关系表r中违规数量的改变和修正后的实例r',定义其改变量为δ(vio(σi,r,v)),违规的效益值计算公式如下:
违规不是孤立的,数据库中的一个函数依赖违规会影响另一个违规。当评估一个函数依赖违规修正所带来的效益时,不仅考虑函数依赖违规本身还要考虑函数依赖违规的演变因素。在公式(1)中评估一个函数依赖违规消除的潜在好处为函数依赖违规所在的关系表中元组消除或增加的比率。给出由约束集合σ和关系表r创建的相关的d-graph,假设
假设约束σi和其他约束的模式是
公式(4)中
在公式(4)中当违规满足
公式(5)中
在公式(5)中当违规满足
步骤五、对数据库中函数依赖违规重要度进行排序。
新建一个列表,根据步骤四中得到函数依赖违规的效益值,比较函数依赖违规的效益值,并将其插入列表中。
对数据库中函数依赖违规重要度进行排序,根据步骤一得到关系表的c-graph和d-graph超图;通过步骤二得到函数依赖间的关系并对该关系进行分类;在步骤三找出关系表的所有函数依赖违规,并对函数依赖违规关系进行分类;在步骤四中根据步骤三的分类计算每一个函数依赖违规的效益值。当对函数依赖违规排序时,首先创建一个列表,当通过步骤四得到函数依赖违规的效益值,根据比较函数依赖违规效益值将违规插入到列表中。