一种数据库中对象关系的处理方法

文档序号:6598110阅读:199来源:国知局
专利名称:一种数据库中对象关系的处理方法
技术领域
本发明涉及数据对象关系管理技术,具体涉及一种数据库中对象关系的处理方法。
背景技术
随着计算机技术的发展和数据处理的要求,数据库技术也得到了迅速发展。在目前应用的数据库中一般都包含了大量的数据对象,如何管理这些数据对象,也就是如何处理这些数据对象之间的关系,成为考察一个数据库性能的重要方面。数据库中处理对象的数量以及对象之间关系的复杂度,往往决定了一个数据库的复杂度,而对大量对象间关系处理的好坏,往往也成为一个数据库设计成功与否的关键。
在数据库的大量数据对象中,它们之间关系的拓扑结构通常是如图1所示的网状结构,即存在一个对象与多个对象间发生引用的关系,或者两个或更多的对象之间的循环引用。这些关系使对一个对象的处理会影响到另外一些对象的存在状态、属性内容或行为方式,而且这种影响根据具体情况千变万化、错综复杂。因此对于其中任何一个对象进行增加、删除、修改等维护时,都必然需要对和这个对象具有各种关系的其他所有对象进行相应修改,由于在目前没有通用代码来完成这种处理过程,因此这个处理过程是非常复杂和繁琐的,其工作量非常惊人,从而会由于维护不及时造成数据库系统性能的降低。

发明内容
有鉴于此,本发明的目的是提供一种数据库中对象关系的处理方法,通过建立关系总线,对对象关系进行简单有效的统一管理,以减小系统维护的工作量,提高系统性能。
本发明的目的是通过如下的技术方案予以实现的一种数据库中对象关系的处理方法,包括a.判断发生变化的对象的类型;b.对于发生变化的对象是离散对象的情况,关系总线不作处理;对于发生变化的对象是纯引用对象、纯被引用对象或者既是引用对象又是被引用对象的对象的情况,发生变化的对象将变化信息发送到关系总线,关系总线对该变化进行响应;c.关系总线在响应该变化后将该变化信息发送到与变化对象具有引用关系的对象,与变化对象具有引用关系的对象对该对象变化进行响应。
在上述数据库中对象关系的处理方法中,发生变化的对象将变化信息发送到关系总线是通过调用关系总线提供的和变化对象类型以及变化类型相应的接口存储过程实现的;关系总线将变化信息发送到与变化对象具有引用关系的对象是通过关系总线调用与变化对象具有引用关系的对象提供的和变化对象类型以及变化类型相应的接口存储过程实现的。
在上述数据库中对象关系的处理方法中,纯被引用对象的创建信息不发送到关系总线;纯被引用对象的删除信息通过调用关系总线提供的通知删除被引用对象的接口存储过程发送到关系总线;纯被引用对象的修改信息通过调用关系总线提供的通知修改被引用对象的接口存储过程发送到关系总线。
在上述数据库中对象关系的处理方法中,纯引用对象的创建信息通过调用关系总线提供的注册接口存储过程发送到关系总线;纯引用对象的删除信息通过调用关系总线提供的注销接口存储过程发送到关系总线;纯引用对象的修改信息通过先后调用关系总线提供的注销接口存储过程和注册接口存储过程发送到关系总线。
在上述数据库中对象关系的处理方法中,对于既是引用对象又是被引用对象的对象,其创建信息通过调用关系总线提供的注册接口存储过程发送到关系总线;其删除信息通过先后调用关系总线提供的注销接口存储过程和通知删除被引用对象的接口存储过程发送到关系总线;其修改信息通过先后调用关系总线提供的注销接口存储过程、注册接口存储过程和通知修改被引用对象的接口存储过程发送到关系总线。
在上述数据库中对象关系的处理方法中,通知删除被引用对象的接口存储过程和通知修改被引用对象的接口存储过程发送的信息为被引用对象实例标识符。
在上述数据库中对象关系的处理方法中,关系总线的注册接口存储过程发送的信息包括被引用对象实例标识符、被引用对象实例类型名称、引用对象实例的标识符、引用对象实例的类型名称以及引用号。它还可以进一步包括表示是否通知被引用对象的参数。关系总线的注销接口存储过程发送的信息包括被引用对象实例标识符和引用对象实例标识符。它还可以进一步包括表示是否通知被引用对象的参数。
在上述数据库中对象关系的处理方法中,对于两个对象互为引用关系且其中一个作为引用对象被删除的情况,由关系总线调用被引用对象响应由关系总线发送的引用对象注销的接口存储过程;对于两个对象互为引用关系且其中一个作为引用对象被修改的情况,由关系总线先后调用被引用对象响应由关系总线发送的引用对象注销接口存储过程和注册接口存储过程。其中,被引用对象响应由关系总线发送的引用对象注销接口存储过程和注册接口存储过程发送的信息包括被引用对象实例的标识符、引用对象类型名称以及由引用对象信息确定的临时表的名称信息。
在上述数据库中对象关系的处理方法中,对于被引用对象被删除的情况,关系总线调用引用被引用对象的引用对象的响应删除通知的接口存储过程;对于被引用对象被修改的情况,关系总线调用引用被引用对象的引用对象的响应修改通知的接口存储过程。其中,引用对象的响应删除通知的接口存储过程和响应修改通知的接口存储过程发送的信息包括引用对象实例标识符、被应用对象类型名称以及存放被删除或修改对象信息的临时表的名称和引用号。
在上述数据库中对象关系的处理方法中,关系总线还提供包括通过对象实例属性获取对象实例标识符以及通过对象实例标识符获取对象实例属性的内部通用访问接口存储过程。
在上述数据库中对象关系的处理方法中,对象还可以通过是否提供相应接口存储过程决定自己的实例是否处理关系总线发送的相关对象变化消息。
在上述数据库中对象关系的处理方法中,步骤c可以进一步包括关系总线接收到被引用对象被删除或修改的消息后,寻找引用该被引用对象的引用对象,将该被引用对象信息存储于临时表之中,然后连同该变化的通知发送到相应的引用对象。
在上述数据库中对象关系的处理方法中,步骤b可以进一步包括对于引用对象增加的情况,关系总线的响应为进行注册处理;对于引用对象删除的情况,关系总线的响应为进行注销处理;对于引用对象修改的情况,关系总线的响应为先后进行注销和注册的处理。其中注册处理包括关系总线检查引用对象和被引用对象的标识符和类型名称信息,对于有效信息进行保存,对于无效信息返回注册失败信息。注销处理包括对于引用对象删除的情况中的注销处理是获知引用对象的标识符,然后关系总线全部注销所有该引用对象对其他对象的引用关系;对于引用对象修改的情况中的注销处理是获知引用对象和被引用对象的标识符,关系总线仅注销该引用对象对该被引用对象的引用关系。修改处理进一步包括如果引用对象的修改没有引起对被引用对象的引用关系的变化,不注销已经存在的对被引用对象的引用关系,同时也不再进行注册关系的处理。
通过本发明的技术方案可以看出,通过使用关系总线技术,将数据库中对象与对象之间的直接处理关系转化为对象与关系总线之间的间接处理关系,也就是将各个对象之间的网状拓扑关系改变为星型关系,这样所有对象只需将其变化消息通知关系总线,关系总线再将此变化消息通知与该对象有引用关系或被引用关系的其他对象,上述其他对象可以通过调用标准的接口存储过程对所述变化进行响应。在数据库中,各个对象不用关心其他对象的维护操作,只需要关心关系总线发送的消息即可。关系总线提供的接口存储过程是标准的,不因为具体对象的不同而不同。因此,对象之间关系的管理由一种错综复杂的状态变得简单和有效,减小了系统维护工作量,提高了数据库系统的应用性能。
同时,由于使用关系总线技术,使数据库对象之间的结构更加清晰,对象处理的公共部分被封装在关系总线里,关系总线作为关键内核,一旦调试稳定,即可长期保持基本不变。另外,由于使用了关系总线技术,不会因为某个对象结构没有确定下来而影响到相关对象的开发,因此使数据库的开发工作更加容易分步实施,这样更有利于开发计划的灵活制定。


下面结合附图和具体实施方式
对本发明进行进一步的说明。
图1是根据现有技术的对象关系示意图;图2是根据本发明的对象关系示意图;图3是对象关系在使用对象关系总线前后的变化示意图。
具体实施例方式
为了更清楚地说明本发明的技术方案和具体实施方式
,在对具体实施方式
进行详细介绍之前先简单地描述与本发明相关的一些术语。
引用、引用关系对象实例A的诸如删除、修改的变化影响了对象实例B,就是对象B引用对象A的引用关系。
关联、关联关系A对象实例引用B对象实例,同时,B对象实例引用A对象实例,就是A对象和B对象的关联关系。
聚合关系A对象实例的存在是B对象实例存在的前提,就是A对象聚合B对象的聚合关系。
离散对象如果一个对象不和其它对象发生关系,或这种关系不需要特别考虑,则这个对象为离散对象。
纯引用对象只引用其它对象而不被其它对象所引用的对象称为纯引用对象。
纯被引用对象不引用其它对象而只被其它对象所引用的对象称为纯被引用对象。
关系总线对象之间的关系通道,用于管理对象之间的关系处理。
下面介绍本发明的具体实施方式

如图2所示为一个对象关系总线的示意图。其中Oa、Ob、Oc对象为引用对象,Od、Oe、Of对象为被引用对象。假设Oa、Ob两种对象创建时,用到了Od对象;Oc对象创建时用到了Oe和Of对象。那么,在Od对象发生诸如被删除或修改等变化时,这种变化就可以通过对象关系总线通知到Oa、Ob对象;同样,Oe或Of对象的变化也能通过对象关系总线通知到Oc对象。
在这个例子中,由于Od、Oe、Of是被引用对象,不必关心其它对象的变化。它们可以不响应从对象关系总线发来的消息,也就是作丢弃处理,或者可以从对象关系总线里直接屏蔽这种消息,也就是不订阅关于各自引用对象的消息。但是,由于Od是Oa、Ob的被引用对象,因此Od的变化消息经过对象关系总线通知到Oa、Ob之后,Oa、Ob需要处理这种消息。
对象关系总线保证了被引用对象的任何变化消息总能通知到引用者,这种通知机制是可以固化的。所有对象向关系总线发送被删除或修改变化通知消息的机制也是可以固化的,且相应的代码处理可以统一和固化,不会因为对象类型的扩展而需要进行改变。例如,如果要新增一种新的对象类型,只需要写好该对象类型本身的处理创建、删除、修改、通知关系总线自己的变化、关系总线发来的被引用对象变化的消息即可。
如果一个对象既是引用对象又是被引用对象,它在处理关系时同样可以利用对象关系总线机制;如果两个对象互为引用,即它们存在关联关系,这两个对象也同样可以利用对象关系总线机制。
对于离散的对象,由于这些对象不和其他任何对象发生任何关系,因此它们的创建、删除、变化就不需要通知关系总线。对于聚合关系的对象,它们的维护也不需要使用关系总线,因此其创建、删除、变化也不需要通知关系总线。
如图3所示,增加了关系总线后,对象之间的关系图由原来的网状简化为星型。从图3中可以看到,采用关系总线前,一个对象要直接面对多个与其发生关系的其它对象,而采用关系总线以后,每个对象只需关心其与关系总线的接口,而不用再关心各个具体的对象。由于关系总线对外提供的接口是一致的,这样就大大地简化了系统处理的复杂程度。
在本发明中,对象和关系总线的通信采用的是触发器和存储过程的调用,仅仅要求引用对象、被引用对象、关系总线分别提供一些存储过程,这些存储过程将分别由引用对象、被引用对象、关系总线等在不同时期调用。在实际情况中,一个对象类可以决定自己的实例是否处理关系总线发来的相关对象引用、变化等消息,这种功能是通过消息订阅机制来实现的。表现在我们的系统中,就是该对象类,即数据表是否提供相关的接口存储过程,使关系总线在分发消息时是否能检索到相应的存储过程。而关系总线在每接收到一条消息时,都要检查是否有对象订阅该消息,如果有,就检查是否存在相应的回调函数。若存在一个回调函数,关系总线就将相应的消息类型和消息作为参数去调用该回调函数。
在本发明中的回调函数有两种,一种是关系总线调用的回调函数,一种是由包括关系总线和对象的整个系统调用的注册、注销回调函数。在关系总线调用的回调函数中,对象实例将其消息类型以及相关消息发送到关系总线,关系总线在调用时返回一个响应值。下述为关系总线调用的回调函数的一个示例<pre listing-type="program-listing">CallBackProc()ParameterList {LONGMsgType;//消息类型LONGFirst;LONGSecond;LONGThree;LONGFour;LONGFive;LONGSix; } Result {BOOL(TRUE|FALSE)//若响应,则返回TRUE,否则,返回FALSE }</pre>在由系统调用的注册、注销回调函数中,关系总线将回调函数名称发送到系统,系统在调用时返回一个响应值。下述为系统调用的注册、注销回调函数的一个示例CallBack()ParameterList{CHAR CallBackProcName;//回调函数名字,=NULL表示注销}Result{BOOL(TRUE|FALSE) //若响应,则返回TRUE,否则,返回FALSE}如前所述,一个对象根据它和其他对象之间的引用或被引用关系,可以分为纯被引用对象、纯引用对象和既是引用对象又是被引用对象以及离散对象这四种。其中离散对象由于和其他对象不具有任何引用关系或被引用关系,因此其变化不被处理。下面分别介绍使用关系总线处理其它三种对象的处理方式。
纯被引用对象被创建、删除、修改的处理流程为A)纯被引用对象被创建的处理流程和通常的离散对象的创建一样,一个纯被引用对象被创建时,没有必要通知关系总线。
B)纯被引用对象被删除的处理流程一个纯被引用对象被删除时,在删除之前先写好包含被删除对象的标识符MOID的删除通知,并将该通知发送给关系总线,也就是,由被引用对象调用关系总线的通知删除被引用对象的接口存储过程,该接口存储过程包括由被引用对象实例向关系总线发送被引用对象实例的标识符MOIID,关系总线通过接口存储过程返回一个响应值。下述为关系总线提供的通知删除被引用对象的接口存储过程的一个示例DeleteMOINotify()ParameterList{LONGMOIID;//对象标识}Result{BOOL(TRUE|FALSE)//若响应,则返回TRUE,否则,返回FALSE}该接口存储过程的调用者是被引用对象,在删除一个对象的任何时候都可以调用该接口函数,但是在该被引用对象没有被别的对象引用的情况下,可以不调用该函数。
C)纯被引用对象被修改的处理流程一个纯被引用对象被修改后,将包含被修改对象的标识符MOID的修改通知发送给关系总线,也就是,由被引用对象调用关系总线的通知修改被应用对象的接口存储过程,该接口存储过程包括由被引用对象实例向关系总线发送被引用对象实例的标识符MOIID,关系总线返回响应值。下述为关系总线提供的通知修改被引用对象的接口存储过程的一个示例ModifyMOINotify()ParameterList{LONG MOIID;//对象标识}Result{BOOL(TRUE|FALSE)//若响应,则返回TRUE,否则,返回FALSE}纯引用对象被创建、删除、修改的处理流程为A)纯引用对象被创建的处理流程一个纯引用对象被创建后,如果发生了对某些对象的引用,则将该引用关系通知关系总线。也就是,由引用对象调用关系总线的注册的接口存储过程,该过程包括,引用对象实例取得被引用对象实例的标识符MOIID、类型名ClassName,本对象实例的标识符MOIID、类型名ClassName以及引用号Num,组成关系五元组,而后将该五元组发送给关系总线。关系总线在接收到该五元组信息后,向引用对象实例返回一个响应值。在五元组中的引用号Num在一个对象实例引用另一个对象的两个实例时使用,其缺省值为0,表示没有对同一对象实例的多引用。下述为关系总线提供的注册的接口存储过程的一个示例<pre listing-type="program-listing">RegisterReference()ParameterList{LONGFMOIID;//引用对象实例ID&lt;!-- SIPO &lt;DP n="10"&gt; --&gt;&lt;dp n="d10"/&gt; LONGFTypeName; //引用对象类型名 LONGSMOIID; //被引用对象实例ID LONGSTypeName; //被引用对象类型名 LONGNum;//引用号,缺省时为0,表示没有对同一对象实例的多引用。
BYTENotifySecondMO; //通知被引用对象否。1通知,0不通知}Result{ BOOL(TRUE|FALSE) //若响应,则返回TRUE,否则,返回FALSE}</pre>在关系总线提供的注册的接口存储过程中,向关系总线发送的消息中除了上述五元组包括的五个参数之外,可以进一步包括一个表示是否要通知被引用对象的参数NotifySecondMO。当两个对象互为引用时,参数NotifySecondMO的值设置为1,表示该引用对象的注册要通知被引用对象。在其他情况下,参数NotifySecondMO的值设置为0,表示该引用对象的注册不需要通知被引用对象。
B)纯引用对象被删除的处理流程一个纯引用对象被删除前,简单地向关系总线发送本对象被删除的通知即可。也就是,由引用对象调用关系总线的注销的接口存储过程,该过程包括,引用对象实例分别取得被引用对象实例的标识符MOIID和引用对象实例的标识符MOIID,而后将它们发送给引用关系总线,关系总线在接收到该信息后,向引用对象实例返回一个响应值。其中如果引用对象实例标识符为NULL时,表示没有纯引用对象被删除;如果被引用对象实例标识符为NULL时,表示这个引用对象引用了所有被引用对象。下述为关系总线提供的注销的接口存储过程的一个示例<pre listing-type="program-listing">UnregisterReference()ParameterList&lt;!-- SIPO &lt;DP n="11"&gt; --&gt;&lt;dp n="d11"/&gt;{ LONG FMOIID; //引用对象实例ID。=NULL时,无效 LONG SMOIID; //被引用对象实例ID。=NULL时,表示所有全部 BYTE NotifySecondMO; //通知被引用对象否。1通知,0不通知}Result{ BOOL(TRUE|FALSE)//若响应,则返回TRUE,否则,返回FALSE}</pre>在引用对象删除或修改时,如果解除了相关的引用关系,则调用该接口函数。在这个接口函数中,向关系总线发送的消息中除了引用对象实例和被引用对象实例的标识符之外,可以进一步包括一个表示是否要通知被引用对象的参数NotifySecondMO,当两个对象互为引用时,参数NotifySecondMO的值设置为1,表示该注销要通知被引用对象。在其他情况下,参数NotifySecondMO的值设置为0,表示该注销不需要通知被引用对象。
C)纯引用对象被修改的处理流程该过程可以分解为修改前删除旧对象和修改后增加新对象两个步骤。也就是,纯引用对象先调用关系总线的注销的接口存储过程,该过程包括,引用对象实例分别取得被引用对象实例的标识符MOIID和引用对象实例的标识符MOIID,而后将它们发送给关系总线,关系总线在接收到该信息后,向引用对象实例返回一个响应值。然后调用关系总线的注册的接口存储过程,该过程包括,引用对象实例取得被引用对象实例的标识符MOIID、类型名ClassName,本对象实例的标识符MOIID、类型名ClassName以及引用号Num,组成关系五元组,而后将该五元组发送给关系总线。关系总线在接收到该五元组信息后,向引用对象实例返回一个响应值。
既是引用对象又是被引用对象的对象被创建、删除、修改的处理流程为A)被创建的处理流程和纯引用对象被创建的处理流程相同。也就是,调用关系总线的注册的接口存储过程,该过程包括,该对象作为引用对象实例取得其它被引用对象实例的标识符MOIID、类型名ClassName,本对象实例的标识符MOIID、类型名ClassName以及引用号Num,组成关系五元组,而后将该五元组发送给关系总线。关系总线在接收到该五元组信息后,向该对象实例返回一个响应值。
B)被删除的处理流程先作为纯引用对象,按纯引用对象被删除的处理流程,向关系总线注销引用,即先切断引用关系;后作为纯被引用对象,按纯被引用对象被删除的处理流程,向关系总线发送纯被引用对象的删除通知;最后删除该对象。也就是,先调用关系总线的注销的接口存储过程,该过程包括,该对象作为引用对象实例分别取得其它被引用对象实例的标识符MOIID和本对象实例的标识符MOIID,而后将它们发送给关系总线,关系总线在接收到该信息后,返回一个响应值。然后调用关系总线的通知删除被引用对象的接口存储过程,该接口存储过程包括,该对象作为被引用对象实例向关系总线发送本对象实例的MOIID,关系总线返回一个响应值。然后对本对象实例进行删除操作。关系总线通过比较调用这两个接口存储过程的先后顺序,保证该顺序不会颠倒。
C)被修改的处理流程先作为纯引用对象,按纯引用对象被修改的处理流程处理。后作为纯被引用对象,按纯被引用对象被修改的处理流程处理。也就是,先调用关系总线的注销的接口存储过程,该过程包括,该对象作为引用对象实例分别取得其它被引用对象实例的标识符MOIID和本对象实例的标识符MOIID,然后将它们发送给关系总线,关系总线在接收到该信息后,返回一个响应值。然后调用关系总线的注册的接口存储过程,该过程包括,该对象作为引用对象实例取得其它被引用对象实例的标识符MOIID、类型名ClassName,本对象实例的标识符MOIID、类型名ClassName以及引用号Num,组成关系五元组,而后将该五元组发送给关系总线。关系总线在接收到该五元组信息后,向该对象实例返回一个响应值。最后调用关系总线的通知修改被引用对象的接口存储过程,该过程包括,该对象作为被引用对象实例向关系总线发送本对象实例的MOIID,关系总线返回一个响应值。关系总线通过比较调用这三个接口存储过程的先后顺序,保证该顺序不会颠倒。
在上面的情况中,对于相互引用的两个对象中的一个对象被创建的处理比较特殊。其中一个创建时,可以通过在注册关系时设置参数NotifySecondMO来告诉关系总线是否要通知被引用对象。
被引用对象响应关系总线发来的引用对象删除、修改的处理流程为A)被引用对象响应关系总线发来的引用对象删除的处理流程在一般情况下可以不处理。在这两个对象互为引用关系时,被引用对象需要对此进行处理,也就是,由关系总线调用被引用对象响应由关系总线发来的引用对象注销的接口存储过程,该过程包括,关系总线将被引用对象实例的标识符MOIID、引用对象类型名称ClassName以及由引用对象类型名称ClassName确定的临时表名发送到被引用对象实例,被引用对象实例返回一个响应值。下述为被引用对象提供的响应由关系总线发来的引用对象注销的接口存储过程的一个示例ReplyUnregisterReferenceNotify()ParameterList{LONG SMOIID; //被引用对象实例IDCHAR TypeName[32]; //引用对象类型名字CHAR TmpTableName[128];//临时表名,结构由TypeName决定}Result{BOOL(TRUE|FALSE)∥若响应,则返回TRUE,否则,返回FALSE
}B)被引用对象响应关系总线发来的引用对象修改的处理流程在一般情况下可以不处理。在这两个对象互为引用关系时,被应用对象需要对此进行处理,也就是,由关系总线调用被引用对象响应由关系总线发来的引用对象注销的接口存储过程,该过程包括,关系总线将被引用对象实例的标识符MOIID、原引用对象类型名称ClassName以及由原引用对象类型名称ClassName确定的临时表名发送到被引用对象实例,被引用对象实例返回一个响应值。然后关系总线调用被引用对象响应由关系总线发来的引用对象注册的接口存储过程,该过程包括,关系总线将被引用对象实例的标识符MOIID、新引用对象的类型名称ClassName以及由新引用对象类型名称ClassName确定的临时表名发送到被引用对象实例,被引用对象实例返回一个响应值。下述为被引用对象提供的响应由关系总线发来的引用对象注册的接口存储过程的一个示例ReplyRegisterReferenceNotify()ParameterList{LONG SMOIID; //被引用对象实例IDCHAR TypeName[32]; //引用对象类型名字CHAR TmpTableName[128];//临时表名,结构由TypeName决定}Result{BOOL(TRUE|FALSE)//若响应,则返回TRUE,否则,返回FALSE}引用对象响应关系总线发来的被引用对象删除、修改的处理流程为A)引用对象响应关系总线发来的被引用对象删除的处理流程当被引用对象被删除时,关系总线调用引用该被删除对象的引用对象的响应删除通知的接口存储过程,也就是,由关系总线将引用对象实例标识符MOIID、被应用对象类型名称ClassName、临时表名和引用号Num发送到引用对象实例,引用对象实例返回一个响应值。下述为引用对象提供的响应删除被引用对象通知的接口存储过程的一个示例ReplyDeleteMOINotify()ParameterList{LONG FMOIID; //引用对象实例IDCHAR TypeName[32]; //被引用对象类型名字CHAR TmpTableName[128];//临时表名,结构由TypeName决定LONG Num; //引用号,缺省(或=0)时为1。
}Result{BOOL(TRUE|FALSE)//若响应,则返回TRUE,否则,返回FALSE}B)引用对象响应关系总线发来的被引用对象修改的处理流程当被引用对象被修改时,关系总线调用引用该被修改对象的引用对象的响应修改通知的接口存储过程,也就是,由关系总线将其标识符MOIID、被应用对象类型名称ClassName、临时表名和引用号Num发送到引用对象实例,引用对象实例返回一个响应值。下述为引用对象提供的响应修改被引用对象通知的接口存储过程的一个示例<pre listing-type="program-listing">ReplyModifyMOINotify()ParameterList{LONG FMOIID; //引用对象实例IDCHAR TypeName[32]; //被引用对象类型名字CHAR TmpTableName[128];//临时表名,结构由TypeName决定LONG Num; //引用号,缺省(或=0)时为1。}&lt;!-- SIPO &lt;DP n="16"&gt; --&gt;&lt;dp n="d16"/&gt;Result{BOOL(TRUE|FALSE)//若响应,则返回TRUE,否则,返回FALSE}</pre>关系总线响应被引用对象删除、修改的处理流程为关系总线接到该消息后,寻找引用该被引用对象的引用对象,将该被引用对象信息存储于临时表之中,然后连同这个变化的通知发送到相应的引用对象。
关系总线响应引用对象增加、删除、修改的处理流程为引用对象发往关系总线的通知只有注册关系和注销关系两种。
A)注册关系注册关系时要求告诉关系总线引用对象实例的标识符MOIID、类型名称ClassName和被引用对象实例的标识符MOIID、类型名称ClassName,这些信息必须有效,否则注册关系失败。关系总线检查这些信息的有效性,并将有效的信息保存下来。
B)注销关系在对象被删除时,注销关系需要要求告诉引用对象实例的标识符MOIID,关系总线将所有该对象对其它对象的引用关系全部注销。在对象被修改时,需要同时告诉引用对象的MOIID和被引用对象的MOIID,此时,关系总线仅注销该引用对象对该被引用对象的引用。
在本发明中,关系总线还提供获取对象实例标识符以及获取对象实例属性的通用访问接口存储过程。在获取对象实例标识符的接口存储过程中,通过对象类型和对象某一特定属性的值,可以得到该对象实例的标识符,也就是,对象实例将其对象类型、对象关键属性名称和对象属性值发送到关系总线,关系总线即可确定并返回其标识符。下述为关系总线提供的确定对象实例标识符的接口存储过程的一个示例GetMOIID()
ParameterList{CHAR TypeName[32]; //对象类型名字CHAR AttrName[32]; //对象关键属性名字或表的关键字段名字。
LONG AttrValue; //对象属性值。
}Result{LONG MOIID //对象ID}所指定的属性名字一般应该是该对象的关键属性或表的关键字段,否则得到的MOIID为第一个满足条件的对象ID,那么将不能得到真正需要的ID信息。
在获取对象实例属性的接口存储过程中,通过对象类型和对象标识符可以得到一个对象的某个具体属性,也就是,对象实例将其类型名称和标识符发送到关系总线,关系总线即可返回一个存放某个具体属性的临时表名,通过这个临时表即可获取对象实例的具体属性。下述为关系总线提供的确定对象实例标识符的接口存储过程的一个示例GetMOI()ParameterList{CHAR TypeName[32];//对象类型名字LONG MOIID; //对象ID。
}Result{CHAR TmpTableName[128] ///临时表名}通过对象类型和对象ID得到一个对象,这里是指通过表名和记录的MOIID值来得到一条记录。该记录放在一个临时表里,表名作为返回值返回给调用者。
在本发明中调用接口存储过程时,如果一个变化对象和多个其他对象之间有引用关系或被引用关系,那么这些其他对象将分别调用相应的接口存储过程。例如,对象Oa和Ob都引用了对象Od,那么Od被删除时,Oa和Ob各自独立地调用关系总线提供的删除被引用对象实例的接口存储过程,并且关系总线分别调用对象Oa和Ob响应Od被删除的接口存储过程。
上述全面地介绍了本发明通过关系总线技术将现有技术的对象与对象之间的直接处理关系是如何转化为对象与关系总线之间的间接处理关系的,为了更清楚地说明本发明,下面再通过一个具体的例子进行更直接的说明。
例如两个对象Oa和Ob都分别引用了另一个对象Od。那么当Od被修改时,将由Od首先调用关系总线提供的通知修改被引用对象实例的接口存储过程ModifyMOINotify(),即Od将其标识符MOIID发送到关系总线,关系总线在接收到该通知之后,如果可以修改则返回一个可以修改的通知。然后关系总线寻找引用Od都有哪些引用对象,那么将查找到Oa和Ob分别引用了对象Od,然后关系总线将该被引用对象Od的信息存储于临时表之中。关系总线随后将Oa的MOIID、Od的类型名称、临时表的名称和引用号NUM发送到Oa,并将Ob的MOIID、Od的类型名称、临时表的名称和引用号NUM发送到Ob,这也表现为由关系总线分别调用由Oa和Ob提供的相应被引用对象修改的接口存储过程ReplyModifyMOINotify(),然后由Oa和Ob分别返回对Od被修改的响应。
通过本发明的具体介绍可以看出,关系总线技术作为一种对象之间关系的处理方法,不仅仅适用于小型系统的内部对象的管理,而且对大型的分布式软件系统的分布式对象的管理也同样适用。因此可以理解,以上只是对本发明的具体介绍,并不用以限制本发明的保护范围。
权利要求
1.一种数据库中对象关系的处理方法,包括a.判断发生变化的对象的类型;b.对于发生变化的所述对象是离散对象的情况,关系总线不作处理;对于发生变化的所述对象是纯引用对象、纯被引用对象或者既是引用对象又是被引用对象的对象的情况,所述发生变化的对象将变化信息发送到关系总线,关系总线对所述变化进行响应;c.关系总线在响应所述变化后将所述变化信息发送到与所述变化对象具有引用关系的对象,所述与变化对象具有引用关系的对象对所述对象变化进行响应。
2.根据权利要求1所述的数据库中对象关系的处理方法,其特征是,所述发生变化的对象将变化信息发送到关系总线是通过调用关系总线提供的和变化类型相应的接口存储过程实现的;所述关系总线将变化信息发送到与所述变化对象具有引用关系的对象是通过关系总线调用与变化对象具有引用关系的对象提供的和变化类型相应的接口存储过程实现的。
3.根据权利要求2所述的数据库中对象关系的处理方法,其特征是,所述纯被引用对象的创建信息不发送到关系总线;所述纯被引用对象的删除信息通过调用关系总线提供的通知删除被引用对象的接口存储过程发送到关系总线;所述纯被引用对象的修改信息通过调用关系总线提供的通知修改被引用对象的接口存储过程发送到关系总线。
4.根据权利要求2所述的数据库中对象关系的处理方法,其特征是,所述纯引用对象的创建信息通过调用关系总线提供的注册接口存储过程发送到关系总线;所述纯引用对象的删除信息通过调用关系总线提供的注销接口存储过程发送到关系总线;所述纯引用对象的修改信息通过先后调用关系总线提供的注销接口存储过程和注册接口存储过程发送到关系总线。
5.根据权利要求2所述的数据库中对象关系的处理方法,其特征是,对于既是引用对象又是被引用对象的对象,所述对象的创建信息通过调用关系总线提供的注册接口存储过程发送到关系总线;所述对象的删除信息通过先后调用关系总线提供的注销接口存储过程和通知删除被引用对象的接口存储过程发送到关系总线;所述对象的修改信息通过先后调用关系总线提供的注销接口存储过程、注册接口存储过程和通知修改被引用对象的接口存储过程发送到关系总线。
6.根据权利要求3或5所述的数据库中对象关系的处理方法,其特征是,所述通知删除被引用对象的接口存储过程和通知修改被引用对象的接口存储过程发送的信息为被引用对象实例标识符。
7.根据权利要求4或5所述的数据库中对象关系的处理方法,其特征是,所述关系总线的注册接口存储过程发送的信息包括被引用对象实例标识符、被引用对象实例类型名称、引用对象实例的标识符、引用对象实例的类型名称以及引用号。
8.根据权利要求7所述的数据库中对象关系的处理方法,其特征是,所述关系总线的注册接口存储过程发送的信息进一步包括表示是否通知被引用对象的参数。
9.根据权利要求4或5所述的数据库中对象关系的处理方法,其特征是,所述关系总线的注销接口存储过程发送的信息包括被引用对象实例标识符和引用对象实例标识符。
10.根据权利要求9所述的数据库中对象关系的处理方法,其特征是,所述关系总线的注销接口存储过程发送的信息进一步包括表示是否通知被引用对象的参数。
11.根据权利要求2所述的数据库中对象关系的处理方法,其特征是,对于所述两个对象互为引用关系且其中一个作为引用对象被删除的情况,由关系总线调用被引用对象响应由关系总线发送的引用对象注销的接口存储过程;对于所述两个对象互为引用关系且其中一个作为引用对象被修改的情况,由关系总线先后调用被引用对象响应由关系总线发送的引用对象注销接口存储过程和注册接口存储过程。
12.根据权利要求11所述的数据库中对象关系的处理方法,其特征是,所述被引用对象响应由关系总线发送的引用对象注销接口存储过程和注册接口存储过程发送的信息包括被引用对象实例的标识符、引用对象类型名称以及由引用对象信息确定的临时表的名称信息。
13.根据权利要求2所述的数据库中对象关系的处理方法,其特征是,对于被引用对象被删除的情况,关系总线调用引用所述被引用对象的引用对象的响应删除通知的接口存储过程;对于被引用对象被修改的情况,关系总线调用引用所述被引用对象的引用对象的响应修改通知的接口存储过程。
14.根据权利要求13所述的数据库中对象关系的处理方法,其特征是,所述引用对象的响应删除通知的接口存储过程和响应修改通知的接口存储过程发送的信息包括引用对象实例标识符、被应用对象类型名称以及存放被删除或修改对象信息的临时表的名称和引用号。
15.根据权利要求2所述的数据库中对象关系的处理方法,其特征是,所述关系总线提供包括通过对象实例属性获取对象实例标识符以及通过对象实例标识符获取对象实例属性的内部通用访问接口存储过程。
16.根据权利要求2所述的数据库中对象关系的处理方法,其特征是,对象可以通过是否提供相应接口存储过程决定自己的实例是否处理关系总线发送的相关对象变化消息。
17.根据权利要求1所述的数据库中对象关系的处理方法,其特征是,步骤c进一步包括关系总线接收到被引用对象被删除或修改的消息后,寻找引用该被引用对象的引用对象,将该被引用对象信息存储于临时表之中,然后连同该变化的通知发送到相应的引用对象。
18.根据权利要求1所述的数据库中对象关系的处理方法,其特征是,步骤b进一步包括对于引用对象增加的情况,关系总线的响应为进行注册处理;对于引用对象删除的情况,关系总线的响应为进行注销处理;对于引用对象修改的情况,关系总线的响应为先后进行注销和注册的处理。
19.根据权利要求18所述的数据库中对象关系的处理方法,其特征是,所述注册处理包括关系总线检查引用对象和被引用对象的标识符和类型名称信息,对于有效信息进行保存,对于无效信息返回注册失败信息。
20.根据权利要求18所述的数据库中对象关系的处理方法,其特征是,所述注销处理包括对于引用对象删除的情况中的注销处理是获知引用对象的标识符,然后关系总线全部注销所有该引用对象对其他对象的引用关系;对于引用对象修改的情况中的注销处理是获知引用对象和被引用对象的标识符,关系总线仅注销该引用对象对该被引用对象的引用关系。
21.根据权利要求18所述的数据库中对象关系的处理方法,其特征是,所述修改处理进一步包括如果引用对象的修改没有引起对被引用对象的引用关系的变化,不注销已经存在的对被引用对象的引用关系,同时也不再进行注册关系的处理。
全文摘要
本发明公开了一种数据库中对象关系的处理方法,首先判断发生变化的对象的类型;对于发生变化的对象是离散对象的情况,关系总线不作处理;对于发生变化的对象是纯引用对象、纯被引用对象或者既是引用对象又是被引用对象的对象的情况,发生变化的对象将变化信息发送到关系总线,关系总线对该变化进行响应;关系总线在响应变化后将变化信息发送到与变化对象具有引用关系的对象,与变化对象具有引用关系的对象对该对象变化进行响应。本发明还提供了固定的标准接口存储过程,因此通过使用本发明,对象之间关系的管理由一种错综复杂的状态变得简单和有效,极大地简化数据库中对象关系的处理过程,减小了系统维护工作量,提高了数据库系统的应用性能。
文档编号G06F12/00GK1503147SQ0214879
公开日2004年6月9日 申请日期2002年11月21日 优先权日2002年11月21日
发明者王正伟, 李岩, 郭志鹏 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1