数据库一致性错误的重要度判定方法与流程

文档序号:13557614阅读:590来源:国知局
数据库一致性错误的重要度判定方法与流程

本发明属于计算机应用技术领域,具体涉及一种数据库一致性错误的重要度判定方法。



背景技术:

文献"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,u=x∪y。对于σ中的每一个σi:xi→yi,有一个超边ei∈e,t(ei)=xi且h(ei)=yi。d-graph:根据c-graphgσ和关系表r,gr=(v,e):t∈r,每一个节点vi∈v被定义为vi=(ai,fi),对于每一个属性ai∈u的不同的值,都有一个在v中标为(ai,fi)的节点。给出c-graph边eσ={tσ(e),hσ(e)},会产生许多条d-graph边,每一个d-graph边ei∈e被定义为ei={t(ei),h(ei),ω(ei)},其中t(ei).ai=tσ(e);h(ei).ai=hσ(e),每一个包含所有和相关的元组的ids,被定义为函数依赖x→y意味着x的值相同则y值也必须相同,根据x的值将关系表中的数据分为不同的等价类,每一个等价类中,所有成员有相同的x值,其y值相同或者不同。在d-graph中有两种超边,一种是只有一个头结点及|h(e)|=1,另一种则是有多个头结点及|h(e)|>1,分别为b-arc边和边。在d-graph中,如果包含一个或者多个边,意味着至少一个函数依赖等价类的左属性映射到多个等价类的右属性。若图中只包含b-arc边,意味着每一个等价类的左属性仅映射一个等价类的右属性,因此没有函数依赖违规。所以函数依赖违规检查转变为在d-graph中查找函数依赖违规修复问题转化为转换所有的边为b-arc边,其目标是对所有违反函数依赖的元组集合排序即对函数依赖违规进行排序,因此问题转换为对d-graph中所有边进行排序。

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之间关系分为四类:

σi和σj中的属性表示如下:

如果σi和σj共享约束左边的一些属性,表示如下:

如果约束的右边属性值相同,表示如下:

如果约束左边和右边都有共享属性,表示如下:

如果σi和σj中的属性满足以下:

如果σi和σj中的属性满足以下:

σ:函数依赖集合名称;

步骤三、找出关系表中的函数依赖违规并对不同函数依赖违规间的关系进行分类。假设当解决函数依赖违规问题时,仅修正函数依赖约束的右边属性的值。σi和σj之间的违规模式分为以下四类:

中解决其中一个约束的违规将不会影响另一个约束的违规,定义为模式。

中当修正约束的右边属性的值时,将影响所有共享属性所在函数依赖约束的右属性的值,定义为模式。

中修改约束右属性的值将影响另一个约束中违规的左属性的值,定义为模式。

模式中分为以下几种情况:

假设边且边转变为b-arc影响

假设边且边转变为b-arc将自动使转变为b-arc边。

假设边且边转变为b-arc将自动使转变为b-arc边。

假设是b-arc边且边且转变边为b-arc将产生新的

假设边且无论转变边为b-arc还是边转变为b-arc都会将新的

模式中分为以下几种情况:

表示边从v开始,表示边从v'开始,u=e.t(e)-{v},u'=e'.t(e')-{v'}。

对于每一对e和e',假设转变会带来新的边。

对于每一对e和e',假设转变会移动中的元组从b-arc边e'到另一条b-arc边e。

对于每一对e和e',假设转变会移动中的元组从边e'到另一条b-arc边e。

对于每一对e和e',假设转变会移动中的元组从边e'到一条新边e;

转变会移动中的元组从边e'到边e。

对于每一对e和e',u≠u',转变不影响另一条新边的形成。

步骤四、函数依赖违规重要度评估,忽视所有的代价模型,修正函数依赖违规可能给数据库带来一些消极和积极的影响。一个函数依赖违规修正可以给关系表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,假设相关的违规vio(σi,r,v)。表示将转变为b-arc后其他边的改变,下面讨论如何通过超图的属性计算公式(1)中的|δ(vio(σi,r,v))|。

假设约束σi和其他约束的模式是或者清除这些函数依赖违规不会影响其他约束中的违规。所以当计算函数依赖违规vio(σi,r,v)的|δ(vio(σi,r,v))|时,仅仅计算和其相关联的元组的数量,即但是边和其他的超边同时是模式时,是在这两个模式中超边影响的和,如公式(3)。

表示在模式中对超边的影响,表示在模式中对超边的影响。

公式(4)中为在模式中函数依赖违规满足时,转变为b-arc边的改变量。

为在模式中函数依赖违规满足时,转变为b-arc边的改变量。

为在模式中函数依赖违规满足时,转变为b-arc边的改变量。

在公式(4)中当违规满足时,改变量为0。

公式(5)中为在模式中函数依赖违规满足时,转变为b-arc边的改变量。

为在模式中函数依赖违规满足转变为b-arc边的改变量。

在公式(5)中当违规满足时改变量为0。

步骤五、对数据库中函数依赖违规重要度进行排序,根据步骤一得到关系表的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,对于σ中的每一个σi:xi→yi,有一个超边ei∈e,t(ei)=xi且h(ei)=yi。d-graph:根据c-graphgσ和关系表r,gr=(v,e):t∈r,,每一个节点vi∈v被定义为vi=(ai,fi),对于每一个属性ai∈u的不同的值,都有一个在v中标为(ai,fi)的节点。给出c-graph边eσ={tσ(e),hσ(e)},会产生许多条d-graph边,每一个d-graph边ei∈e被定义为ei={t(ei),h(ei),ω(ei)},其中t(ei).ai=tσ(e);h(ei).ai=hσ(e),vei∈h(ei),每一个包含所有和相关的元组的ids,被定义为函数依赖x→y意味着x的值相同则y值也必须相同,根据x的值可以将关系表中的数据分为不同的等价类,每一个等价类中,所有成员有相同的x值,其y值可能相同也可能不同。在d-graph中有两种超边,一种是只有一个头结点及|h(e)|=1,另一种则是有多个头结点及|h(e)|>1,分别为b-arc边和边。在d-graph中,如果包含一个或者多个边,意味着至少一个函数依赖等价类的左属性映射到多个等价类的右属性。若图中只包含b-arc边,意味着每一个等价类的左属性仅映射一个等价类的右属性,因此没有函数依赖违规。所以函数依赖违规检查转变为在d-graph中查找函数依赖违规修复问题转化为转换所有的边为b-arc边,本专利的目标是对所有违反函数依赖的元组集合排序即对函数依赖违规进行排序,因此问题转换为对d-graph中所有边进行排序。

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',根据函数依赖最小覆盖的定义:

或者σi和σj之间关系分为四类:

σi和σj中的属性表示如下:

如果σi和σj共享约束左边的一些属性,表示如下:

如果约束的右边属性值相同,表示如下:

如果约束左边和右边都有共享属性,表示如下:

如果σi和σj中的属性满足以下:

如果σi和σj中的属性满足以下:

σ:函数依赖集合名称

步骤三、找出违反函数依赖的集合并进行归类。

根据d-graph超图和函数依赖a,b→ec,d→e,找到五组违反函数依赖的元组集合。在d-graph超图中得到e1~e5为边,对应于关系表2中的函数依赖违规vio1~vio5。根据关系表1的c-graph、d-graph超图得到e1和e4满足转变e1边为b-arc边,e4边将自动转变为b-arc边;e2和e5满足e3和e6满足e3转变为b-arc边会使e6变成

找出关系表中的函数依赖违规并对不同函数依赖违规间的关系进行分类。假设当解决函数依赖违规问题时,仅修正函数依赖约束的右边属性的值。σi和σj之间的违规模式分为以下四类:

中解决其中一个约束的违规将不会影响另一个约束的违规,定义为模式。

中当修正约束的右边属性的值时,将影响所有共享属性所在函数依赖约束的右属性的值,定义为模式。

中修改约束右属性的值将影响另一个约束中违规的左属性的值,定义为模式。

模式中分为以下几种情况:

假设边且边转变为b-arc影响

假设边且边转变为b-arc将自动使转变为b-arc边。

假设边且边转变为b-arc将自动使转变为b-arc边。

假设是b-arc边且边且.转变边为b-arc将产生新的

假设边且无论转变边为b-arc还是边转变为b-arc都会将新的

模式中分为以下几种情况:

表示边从v开始,表示边从v'开始,u=e.t(e)-{v},u'=e'.t(e')-{v'}。

对于每一对e和e',假设转变会带来新的边。

对于每一对e和e',假设转变会移动中的元组从b-arc边e'到另一条b-arc边e。

对于每一对e和e',假设,转变会移动中的元组从边e'到另一条b-arc边e。

对于每一对e和e',假设|h(e)|>1∧|h(e')|>1∧u=u',若转变会移动中的元组从边e'到一条新边e;若转变会移动中的元组从边e'到边e。

对于每一对e和e',u≠u',转变不影响另一条新边的形成。

步骤四、对函数依赖违规重要度进行评估,计算函数依赖违规的效益值。

根据公式(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,假设相关的违规vio(σi,r,v)。表示将转变为b-arc后其他边的改变,下面讨论如何通过超图的属性计算公式(1)中的|δ(vio(σi,r,v))|。

假设约束σi和其他约束的模式是或者,清除这些函数依赖违规不会影响其他约束中的违规。所以当计算函数依赖违规vio(σi,r,v)的|δ(vio(σi,r,v))|时,仅仅计算和其相关联的元组的数量,即但是边和其他的超边同时是模式时,是在这两个模式中超边影响的和,如公式(3)

表示在模式中对超边的影响,表示在模式中对超边的影响。

公式(4)中为在模式中函数依赖违规满足时,转变为b-arc边的改变量。

为在模式中函数依赖违规满足时,转变为b-arc边的改变量。

为在模式中函数依赖违规满足时,转变为b-arc边的改变量。

在公式(4)中当违规满足时,改变量为0。

公式(5)中为在模式中函数依赖违规满足时,转变为b-arc边的改变量。

为在模式中函数依赖违规满足转变为b-arc边的改变量。

在公式(5)中当违规满足时改变量为0。

步骤五、对数据库中函数依赖违规重要度进行排序。

新建一个列表,根据步骤四中得到函数依赖违规的效益值,比较函数依赖违规的效益值,并将其插入列表中。

对数据库中函数依赖违规重要度进行排序,根据步骤一得到关系表的c-graph和d-graph超图;通过步骤二得到函数依赖间的关系并对该关系进行分类;在步骤三找出关系表的所有函数依赖违规,并对函数依赖违规关系进行分类;在步骤四中根据步骤三的分类计算每一个函数依赖违规的效益值。当对函数依赖违规排序时,首先创建一个列表,当通过步骤四得到函数依赖违规的效益值,根据比较函数依赖违规效益值将违规插入到列表中。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1