面向对象标识方法

文档序号:6564814阅读:171来源:国知局
专利名称:面向对象标识方法
技术领域
本发明涉及数据库,具体而言,涉及一种面向对象标识方法。
背景技术
在关系数据库理论和面向对象方法中需要使用对象标识技术。关系数据库理论的三个要素是实体、实体属性和实体之间的关系。通常地,一个实体对应于一个表中的一条记录,实体的一个属性对应于记录中的一个字段,其中一个特定的属性能起到唯一标识一个实体的作用,称为主键。而两个实体之间的关系是通过一个实体的一个属性值(成为外键)和另一个实体的主键值相等的方式来建立。
针对数据库主键的设计,通常采用两种方案。
一是采用有业务含义的字段作主键,比如客户的身份证号,订单的编号。这种方案针对每个表的特点分别不同格式和长度的主键,因而可以节省存储空间并且可以提高关联查询的性能,但坏处也是显而易见的在系统的生命周期中一旦主键字段的规则发生变化会造成灾难性的后果,这一点相信有企业应用开发经验的读者都有共识。并且这种主键格式不一,不能体现为对所有对象统一的标识,所以不能满足面向对象方法的需要。
二是另外设计一个ID字段来作为主键,这个ID的值没有任何含义,只要保证其取值唯一即可。可以把这种方案称为“ID模式”,它解决了前一方案的问题,目前越来越成为企业应用开发的主流。
但是ID模式在很多情况下并不完美。以面向对象的观点来看,无任何含义的ID通常只在一个数据表的范畴内进行数据记录的区分,而不能描述一个全局性的对象体系架构。
另一方面,在面向对象方法中,通常对计算机程序中的对象的标识使用其地址值来实现,而对象之间的关系也通过使用指针或引用等来体现。
在关系数据库中,对象标识和对象关系表达目前主要采用GUID(全局唯一标识,Globally Unique Identifier)技术和O/RMapping(对象-关系映射,object-relational mapping)技术。
GUID技术使用随机生成的一个数字GUID来作为数据的主键,因为GUID非常大,可以在理论上保证在系统中生成的各个主键值是唯一的。但GUID的主要缺点是不包含有价值的信息性,不能实现体现面向对象的优点,并且难以实现有效的管理。
O/R Mapping技术是用于构建关系数据库和对象之间关系映射的技术。O/R Mapping技术并不考虑数据库结构本身的改良,而是试图在一个已经有的数据库结构上和程序开发的类和对象之间建立松散的耦合关联。
GUID的主要缺点是不包含有价值的信息性,不能实现体现面向对象的优点,并且难以实现有效的管理。获取到一个GUID,并不能简单地知道它是什么类。要记录一个全局性的所有的对象的GUID和它们所属有类之间的对应关系需要非常大的一张表,这事实上是不可行的。
将编程的对象和数据库对应起来,就是基本的O/R Mapping的思想。其缺点是O/R Mapping技术并不考虑数据库结构本身的改良,而是在一个已经有的数据库结构上和面向对象的程序结合起来,将数据库操作的SQL语句转变成了面向对象的语句,主要是一种语法便利而不能带来更深刻的思想变化,具体应用效果也会受到很大的限制。如果数据库本身没有一种面向对象的物理结构设计,那么O/R Mapping到后边会无法实现有价值的东西,而且造成O/RMapping内部结构复杂。
另一方面,O/R Mapping是静态的,需要在编译前生成代码。
在采用面向对象方法的面向对象数据库中,对象标识和对象关系表达是完备的,保证了对象标识的统一性、全局性和多态性。而关系数据库中则没有对等的方法。通常地,关系数据库设计的主键是面向表的,一个主键值在一个表的范围内唯一,并不在整个系统内唯一。以面向对象的观点来看,这样的标识不能描述一个全局性的对象体系架构。

发明内容
本发明旨在提供本发明提供了一种面向对象标识方法,用于以面向对象方式标识数据库中的数据,数据库包括多个包括业务信息的数据,每个数据的业务信息相对独立,包括以下步骤对每个数据设置ID作为主键,以将多个数据映射成相互独立的对象。
在一个复杂的系统中,管理的实体对象种类往往非常多,而且相互之间关系复杂,更主要的是这些实体种类和相互之间关系的规则都可能随时发生变化,这种情况下非常适合于本发明的应用。
本发明中的技术在这个系统中应用后,效果非常好,使系统结构非常清晰、易于管理和扩展。由此可知,本发明的可行性得到充分的验证,前边所描述的各种优点也得到很好的体现。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。


此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中图1示出了根据本发明第二实施例的数据库结构示意图。
具体实施例方式
下面将参考附图详细说明本发明。值得注意的是,下面描述本发明虽然部分内容是针对关系数据库进行阐述,但是本发明显然可应用于其他数据库。另外,在本发明中,数据库不限定于数据表集合本身,应当包括数据库产品以及以关系数据库为中心的设计和开发,例如涉及中间件开发、应用软件开发等。本发明可主要应用于关系数据库产品的设计和围绕关系数据库为核心的应用软件开发。
根据本发明的实施例,提供了一种面向对象标识方法,用于以面向对象方式标识数据库中的数据,数据库包括多个包括业务信息的数据,每个数据的业务信息相对独立,本方法包括以下步骤对每个数据设置ID作为主键,以将多个数据映射成相互独立的对象。
对每个对象设置ID可包括以下步骤将每个ID均设置成在整个数据库中是唯一的。
可以在整个数据库中采用统一的规则和数据类型来设置每个ID。
在整个数据库中采用统一的规则和数据类型来设置每个ID可包括以下步骤将ID设置为长度为N+M位的整数或字符,其中,N和M均为大于0的正整数,N位代表类标识,M位代表对象标识,类标识用于标识自己所属的类,对象标识用于在这个类的多个对象实例中唯一地标识自己。
根据本发明的实施例,将ID设置为128位二进制表示的整数,其中N=64,M=64。ID设置为二进制或十进制表示的整数,其中整个ID的值不超过64位的二进制数。
在上述的面向对象标识方法中,还可包括以下步骤通过设置外键的值等于主键的值,以映射多个对象之间的关系。
例如,通过设置外键的值等于主键的值来在两者之间建立关联包括以下步骤通过在外键中存储主键,外键不重复,以映射多个对象之间的1∶1关系;或者通过在外键中存储主键,外键有重复,以映射多个对象之间的1∶多关系;或者设置关系表,其中含有多个外键来存储多类对象的主键,外键有重复,以映射多个对象之间的多∶多关系。
本发明以这种统一形式的两段式标识作为主键来进行数据库系统中数据的标识,使系统中的数据可唯一识别并形成面向对象的识别体系。这种标识全局、简单、可识别、易于管理。
这个标识的形式是面向对象的,它包含了类标识和对象标识的信息,在一个系统内可全局唯一识别。在存储上它体现为一个单值,易于处理。
本发明可提供一种数据结构,用来记录已经被分配使用的类标识,以及每个类标识对应的已分配对象标识的和可用的对象标识。针对数据量过大的问题也可以将记录优化为用一个最小标识值和最大标识值的数据对来记录一段标识值。
在上述的面向对象标识方法中,还可包括以下步骤描述类标识和类之间的映射关系,类和表之间的映射关系、以及各个类之间的派生关系。
根据本发明的实施例,要获取类标识时,根据ID,通过分解获取到N位的类标识;要获取对应的类时,根据类标识,从映射中获取到对应的类;要获取对应的一个或多个表时,根据类,从映射中获取到对应的一个或多个表;要获取其派生的一个或多个类所对应的多个表时,根据类,从映射中获取到其派生的一个或多个类从而获取对应到的多个表。
本发明可提供一种计算机程序,创建一个机构来维护和管理类标识值和对象标识值的分配。整个系统拥有大小为N位长特定数制的一个类标识取值区间,每一个类标识又可以分别拥有大小为M位长特定数制的一个对象标识取值区间。这个机构能根据需要手动或自动地为不同的类分配不同的类标识,也能根据需要手动或自动地为同一个类的不同对象分配不同的对象标识。
本发明可提供一种计算机程序,用一个机构来描述并管理类标识和类的映射关系、类和数据表的映射关系、各个类之间的派生和组合关系。利用这个机构,系统可以在上述ID标识、类标识、类和数据表之间相互转换信息。
在上述的面向对象标识方法中,还可包括以下步骤根据ID中的类标识查询到对应的类;动态地创建出这个类的程序对象并查询到这个类对应的表;从表中查询到主键等于ID的记录来为程序对象加载完整的数据;运行程序对象的各种方法以完成相应的业务处理。
在上述的面向对象标识方法中,还包括以下步骤在一个表中存储具有相同类标识的对象;或者在一个表中存储具有不同类标识的对象;或者将一个类的对象的数据内容分布在不同的表中。
在上述的面向对象标识方法中,还包括以下步骤要查询具体类的对象时,根据这个类的名字,获取到这个类对应的表,根据表系统生成面向表的查询语句来查询对象;要查询多个类的对象时,则将每个类按上述方法处理,然后将结果汇总起来形成一个总的结果集;要查询一个基类的对象时,按照类之间关系的描述分析出基类派生的所有派生类,然后按上述的方法汇总成一个总的结果集。
在上述的面向对象标识方法中,还可包括以下步骤在界面控件中按照ID的格式存储数据来实现界面和对象的关联。本发明可提供一种计算机程序,在界面控件中存储COID格式的数据来实现界面和对象的关联。具体地,在TextBox、CheckBox、TreeView、ListView等控件中,利用控件内置的一个隐含数据存储机构来存储COID数据。在需要的时候,程序能根据这个COID值可靠地从数据库中重新生成对象来完成处理。
本发明可提供一种计算机程序,可以实现动态对象生成,根据一个上述ID值,体系可以生成一个面向对象的接口对象。系统可以通过上述的体系根据上述ID值中的类标识查询到对应的类,然后程序可以动态地创建出这个类的程序对象并查询到这个类对应的数据表,然后程序可以从数据表中查询到主键等于上述ID的记录来为程序对象加载完整的数据,最后程序就可以运行这个程序对象的各种方法完成业务处理。
本发明在系统中定义了一套数据结构来描述并管理已分配的类标识和可用的类标识、每个类标识对应的已分配对象标识和可用的对象标识、类标识和类的映射关系、类和数据表的映射关系、各个类之间的派生和组合关系。
围绕上述结构设计一套程序来进行相互之间的信息转换和处理,包括实现类标识和对象标识的分配,为类分配类标识,为类的对象实例分配对象标识,在类标识、类和数据表几者之间进行信息转换等。
同样形式的COID标识被用来作为外键表述数据对象之间的关系,这种关系和传统的数据关系表达方法相比具有和数据表解耦合、多态指向、全局指向、容易适应变化的优势。总之,这项技术在物理层实现了用关系数据库来描述面向对象的信息体系。在这个信息体系中,对数据是完全以一种面向对象中的类和对象的观点来看待的,不同的类产生的各个对象存储在不同的数据表中,但这些对象都具有统一的COID的主键来标识,而对象之间的关系通过在外键属性中设置目标对象的COID值来表达。这个体系容易实现非常复杂的数据关系而且容易扩展,这是传统的关系数据库表达方法完全不具有的优势。
和数据表解耦合的含义是一个COID形式的外键值包含了类标识的信息,因此它的含义是“指向某个类中的某个对象”,而不象传统的外键值那样是“指向特定表中的某条记录”。
多态指向的含义是因为每个COID形式的外键值的长度和含义是相同的,且包含了类和对象的识别信息,所以一个COID变量通过取不同的值可以指向不同类的对象,这是面向对象方法中多态性的实现基础。
全局指向的含义是因为系统中的各数据对象原则上都采用COID来做主键标识,因此一个COID形式的外键值可以指向整个系统中任何一个数据对象。
容易适应变化的含义是在很多业务发生变化的情况下,利用上述技术,只是COID的值本身发生变化,不需要修改表的结构就能适应业务的变化。
以上述技术来改进以关系数据库为核心的应用开发的设计,新的数据结构在概念设计、逻辑设计和物理设计以及最后的运行期都具备面向对象的特性。相比较,传统的设计方法应用面向对象的思想是局部的,基本只在概念设计阶段存在,在设计的后期和最终具体化物理数据模型后就失去了面向对象的特征和优点。
在上述的面向对象标识方法中,还可包括以下步骤通过分解ID中的N位类ID来建立针对类的索引,索引用于从多条记录中选择出属于某一个或多个类的对象。
在上述的面向对象标识方法中,还可包括以下步骤汇总多个表的数据的ID来生成索引,索引用于只根据一个对象的ID查找到其对象所对应的表和记录。
可以将根据本发明的ID称之为COID,遵循上述规则设计的ID键可以简称为COID,在这个基础推演出相关的设计和开发技术就是COID模式。
本发明可以利用COID体系,设计多态的数据库模型,比如一个表的一个字段,可以影射到一个类。而不是映射到一个具体的表。利用COID模式,实现多态的数据关系描述,这样,数据库中的一个外键字段,在含义上可以灵活地关联到系统中任意一个对象,不再和具体的表绑定。利用COID模式可以简便地实现O/R Mapping技术,实现单表模式。
本发明的核心思想是COID,COID模式的含义是Class-ObjectIdentifier,中文是类-对象标识模式。本发明提供了适用于企业应用开发的一种完全面向对象思想进行数据库设计的方法,可以对企业应用系统的设计开发甚至数据库产品的设计理念产生显著影响。
COID(Class-Object Identifier)模式是在企业应用系统的开发中,以一种面向对象的思想和方法来进行逻辑数据库的设计和实现,并以此为基础进行系统架构设计和系统功能实现,其关键特征是采用以类标识+对象标识组合成的全局唯一的COID主键来标识数据对象。
COID模式首先体现在数据库设计方面的理念改变。
一将数据库中的数据作为对象看待,采用不包含业务信息的COID字段作为数据的主键。
二整个系统中各对象的COID键采用统一的名字和数据类型。
三一个具体的COID键取值由两部分组成,N位是类标识即类标识,M位是对象标识即对象标识。同一个类的不同对象实例具有相同的类标识,只是对象标识不同,这样在整个系统中每个对象的COID键值唯一。
采用COID模式会对数据库设计理念和系统功能架构开发产生显著的影响。
本发明使系统开发变得清晰和容易。因为数据库对象都用COID形式来进行唯一标识,围绕数据库的程序开发也遵循这样的规则,程序语言可以用一个一致的单一数字或字符串变量来唯一并可靠地指示数据对象,这使系统中传递信息变得统一和容易,单一的COID值在一个程序的各函数内部、不同的计算机程序之间、不同的计算机之间,以及网络上传递COID都非常简单和有效,减少了传统方法中大量的工作和问题。
本发明也使数据库数据和用户界面的交互变得简单和容易。因为COID体现为一个简单的数值,计算机程序可以容易地在窗口控制上存储隐含地存储相关对象的COID值,使界面和对象关联起来,在需要的时候,程序能根据这个COID值可靠地从数据库中重新生成对象来完成处理。传统的方法总是针对不同情况做不同的处理,增加了不必要的复杂度。
以本技术为核心可以更好地实现ORM技术,ORM技术使用面向对象的程序来处理对关系数据库中数据的操作。以COID形式实现了数据的唯一标识和关系描述,由此获得的ORM能力比传统的实现要强大得多。例如统一、简单的动态对象生成任何时候如果获取到一个COID值,都可以通过上述的体系根据COID值中的类标识查询到对应的类,然后程序可以动态地创建出这个类的程序对象并查询到这个类对应的数据表,然后程序可以从数据表中查询到主键等于COID的记录来为程序对象加载完整的数据,最后程序就可以运行这个程序对象的各种方法完成业务处理。这个过程就提供了统一的COID数值、数据和程序对象之间的联系纽带,可以贯穿在整个程序的开发中实现各种面向对象的功能。这个过程完全是自动化的,不需要开发者再做任何的工作。
可以实现面向对象的查询甚至是基类查询比如可能需要查询一个基类的所有实例,而一个基类会有多个派生类,这些派生类的对象分别分布在不同的数据表中。利用上述技术,系统可以分析出所有的派生类,然后获取到它们对应的所有数据表,将这些表的数据都查询出来然后可以合并到一起就形成这个基类所有实例的结果。这个过程中的关键是每一个派生类的每一个对象实例都具有相同形式而数值不一的COID标识,所以可以合并结果并在后续的处理中唯一识别出各个对象来。而传统的数据库设计是难以满足这个条件的。
本发明可以实现和优化以上述思想和方法为中心的各种支持功能。具体地实现实现面向对象形式的查询语法。
针对COID形式的数据进行查询的优化。
针对COID形式数据进行特殊的索引实现。
实现其它的一些辅助操作。
进一步地,这些技术可应用在关系数据库的设计上,在关系数据库产品中内置。关系数据库产品可以直接支持形如COID这样的字段类型,以及上述的元数据管理体系和相关的处理和优化,为应用开发提供强有力的支持。
而COID首先是从数据描述层解决了对象的标识问题,将数据完全按对象的方式来进行设计,理念层面是和O/R Mapping产品不一样的。
在数据库中数据的组织已经被处理成对象体系的基础上,再利用O/R Mapping映射机制建立编程语言的对象和数据库的对象之间的联系具有更大的价值。上述的统一简单的动态对象生成、面向对象的基类查询等都充分体现这一区别。
本发明的理念将主要实现动态的ORM,在运行时可以根据元数据配置动态调整行为。在此举两个例子来描述COID的用法。
实施例一数据库设计的示例假定一个公司需要一个CRM系统来管理客户的信息以及相互之间的关系,客户的类型有多种,可能是一个人、也可能是一个组织机构如商业企业、政府部门等,同时,系统中也管理订单,每张订单需要记录所属的客户。
应用COID模式时,体现在数据库上需要定义数据表TPerson、TCorporation、Tdepartment和TorderFrom,在系统中要定义类CPerson、CCorporation、Cdepartment、CorderFrom来实现这些数据对象的行为实现。根据COID的原则,为不同的类分配类标识,具体为Cperson=000001、CCorporation=000002、CDepartment=000003、CorderFrom=000004。一个具体对象的类标识由其所属的类来确定,其对象标识值从1开始,由系统自增量来产生,假定设计为12位。这样产生的一个示例快照数据如下




从这些数据中可以看到对象的主键和外键的形式完全统一,具有相同的形式,而且具备面向对象方法中重要的多态数据的特征,比如很明显的是TorderFrom这个表的客户COID字段是一个多态的外键,可以存储不同类型的客户,在示例数据三条订单的客户分别是商业企业类型的万翔科技(000002000000000001)、个人类型的王芳(000003000000000002)和政府部门的市国土资源局(000003000000000001)。事实上系统中其它任何一种类型的对象的COID主键值也可以填写到这个外键字段中成为订单的客户,这充分体现了COID模式在数据设计和表达上的灵活性。
从系统演变的角度来看,如果哪一天这个公司的实力提升,将业务发展到了火星上,系统中需要增加新的一种客户类型,那么可以建立一个新的类CMars和TMars表简单地结合到系统中。TOrderFrom这个表不需要任何变化!系统就能接纳这样的新数据的加入从而开展轰轰烈烈的火星营销计划,这种结构上的可扩展性能解决很多类似的系统扩展和演变问题,相比较之下,ID模式是不行的,因为不同的类型的ID会产生重复从而产生二义性,而业务主键模式就更不用说了,新的数据的主键的数据类型可能和原设计的结构可能就是完全不一致的,根本无法在不改变现有结构的情况下填写进来。
实施例二业务功能实现的示例实施例一表达了COID模式下下数据库设计的简洁、灵活和高度的可扩展性,而COID更大的价值可能体现在系统的业务开发上。
想象上述系统需要用一个TreeView控件来展现很多不同类别的对象,在这个树状控件的各个节点可以是一张订单、一个个人客户、一个公司客户...等等。当用户用用鼠标双击任意一个节点的时候系统都能触发这个对象的操作。
看起来简单,但事实上这个功能的实现难度相当大,关键问题是如何以一种统一的方式来识别每个节点中存储的对象。一般是利用TreeView节点的图标、字符串等形式存储对象的识别信息,这种方法显然不通用,并且识别信息的解释常存在二义性等诸多问题。
现在采用COID模式则是非常简单和可靠的,因为每一个treeview的节点都可以隐含地保存一个数字,这样就可以将对象的COID保存起来,COID的统一性、简洁性和全局唯一性以及可识别性可以保证这种方法的通用、方便和可靠。
图1示出了根据本发明第二实施例的数据库结构示意图。下面将示出代码是如何处理的,当用户双击一个节点时,treeview对双击事件的处理代码如下{long COID=treenode->value;//从双击的树状控件节点取出隐含保存的COID;CBaseObject*p=GetObject(COID);//用COID调用系统函数GetObject创建具体的对象p->OnOpen();//调用对象的OnOpen的虚函数}
这里补充说明一下,按COID模式开发的系统遵循一定的类体系结构来充分体现面向对象方法的优势,如图中,CBaseObject类是一个系统定义的基类,其它的数据库相关的类如都CPerson、Ccorporation都从它派生。
注意CbaseObject*GetObject(long COID),这个函数体现了围绕COID模式进行开发的特征,具体来说,这个函数的作用是传入一个coID,创建并返回一个具体的对象,其是利用元数据来实现的,系统中用元数据表来存储类、类标识的对应关系。
GetObject函数在得到COID后,分析出前边6位的类标识,这样就能在系统元数据表中反查出对应的类,之后就能创建类的实例对象,然后调用对象初始化和加载数据等方法并返回。接收到这个对象的代码(这里是treeview的事件代码)在接收这个对象后就可调用其虚函数OnOpen,这样系统每增加一个类只要实现它的OnOpen函数即可,树状控件的事件处理代码一次编好后就不用作变化。
这是完全的面向对象的设计和实现方法。因为数据库设计采用了面向对象的体系,它和面向对象语言体系配合起来,就使得这个过程变得简便和艺术化。
COID模式的基础是数据库主键设计的提升和统一,传统的两种主键设计模式是包含业务信息的主键方案和完全不包含任何信息的ID模式方案。这样看起来COID模式含有两个信息一个类标识和一个对象标识。应该明白,前者模式对包含信息没有做任何规范,所以做的信息的假定是不标准的、不具有普遍性而且也可能是不稳定的,而对于类标识和对象标识这样的普遍性的描述是面向对象思想的基础的表达,因此它的概括性、普适性和稳定性都是非常强的。可以明显感觉到类标识+对象标识具备一种“简约的美感”。将ID包含信息均衡到类标识+对象标识的程度应该是比较合理的,其它信息是别属性字段应承担的职责而不是ID,ID承载类和对象的标识是其恰倒好处的职责所在。
根据本发明,COID有几种较为具体的方案1、采用N位十进制数字的类标识结合M位十进制数字的对象标识的形式,N+M长度的十进制数值的总大小不超过64位二进制数的大小。方案下总的大小可以用一个8字节长的整数类型来表示,在32位计算环境下实现容易,性能优越,且能节省空间,而且十进制的表示方式具有一定的可阅读性。缺点是一些计算要用乘除运算影响效率,另外ID的取值空间有限,要考虑ID分配溢出的问题。
2、采用64位二进制的类标识结合64位二进制的对象标识的形式,这种形式的数字总长度是128位二进制位,长度和GUID一样,这样长的数字使类标识和对象标识值溢出的可能性大大降低。更主要的是,在分解一个COID的时候不需要做除法运算,因为计算机通常是以16个字节来存储这个数字,要获取类标识和对象标识只需要直接提取各自对应的八个字节就可以了,计算性能会有大幅度提升,数据库产品也可以根据这样的数据类型更好地实现数据索引。这种方案的缺点是占用空间大,但随着硬件的不断提升这个弱点将渐渐消失。
3、采用N位字符串的类标识结合M位字符串的对象标识的形式。这种方式不用数字操作而用字符串操作,性能方面较差,也需要占用更多的存储空间。主要的好处是可以具有较好的可读性。
下面将分析本发明带来的好处。
本发明将所有数据对象的标识进行了标准化。所有的数据对象的键标识都具有相同的字段名字、数据类型和大小,这样就极大简化了数据库设计和开发工作。因为数据库的设计三个要素就是实体、实体属性、实体之间的关系,COID统一了实体的统一标识,相当于统一解决了实体和实体关系两个要素的实现问题,这使数据库结构不用在这方面下工夫。
本发明将系统中所有数据对象的键标识进行了唯一化。一个COID数字唯一标识一个对象,等于在数据库的层面解决了面向对象方法论中对象本体标识问题。可以说一个COID对于数据库就好比一个指针值对于C++,一个引用对于Java的效果。下面对此做一个比较●每一个C++指针都是32位的整数,而所有的COID都是统一大小的数字,两者是等同的。
●在一个进程中每一个C++指针都指向一个对象,而COID作为主外键在一个数据库中标识一个数据对象,两者是等同的。
●C++指针是多态的,同样是一个32位的数字可以指向不同类型的对象,COID同样具有这样的多态特征,由于包含类标识和对象标识信息,一个相同形式的COID键值可以指向系统中任何一个不同类型的数据对象。
●C++指针具有简单的形式,就是一个数字,COID总体上也体现为一个数字,这一点非常重要。可以回想一下传统ID键值不能独立标识出对象。要标识的话通常是在具体上下文环境里隐含规定了ID键值所属类别,这样带来设计和代码不能重用的问题;要想重用的话就要给ID键值再配上一个“类型”字段来完成对对象的标识,这对具有普遍性的工作带来的开销是巨大的,如果你不信的话想象一下如果每一个C++指针都需要用两个数字表达的话是什么情形。
这使数据库设计的方法发生了根本的变化。整个库不再是表、记录的组合,而是一系列对象以及对象之间关系的衔接。以前面向对象的数据库设计只是在初期阶段使用UML等面向对象的工具来辅助业务分析和设计,在后期映射为表、字段后就丢弃了初期的对象体系架构。而COID模式则在数据库初期设计、后期实现以及运行的整个生命周期中都是完全的面向对象的体系,甚至对于继承、多态等面向对象的特征也能有效地表达和实现。
开发上带来的好处是COID模式更大的价值所在。以前的代码开发在对象标识、对象间关系方面等方面的处理需要做大量的、重复的工作,而现在这些内容能作为共性化的东西提取出来统一实现,剩下来的工作就只是集中在真正的业务领域上了。而且COID标识是简约的,它只是1个数字,在设计、开发、系统交互等方面产生的方便性和效率都非常好!比如说在多层架构开发模式下,如果任何一个数据对象的标识都可以由一个数字来代表,就可以简化在不同的层、不同的模块以及不同的计算机之间传递数据对象的形式和难度,使以前错综复杂的系统业务结构变得相对简单,EAI、SOA这样理念的系统设计构建也变得更为容易。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种面向对象标识方法,用于以面向对象方式标识数据库中的数据,所述数据库包括多个包括业务信息的数据,每个所述数据的业务信息相对独立,其特征在于,包括以下步骤对每个所述数据设置ID作为主键,以将所述多个数据映射成相互独立的对象。
2.根据权利要求1所述的面向对象标识方法,其特征在于,对每个所述对象设置ID包括以下步骤将每个所述ID均设置成在整个所述数据库中是唯一的。
3.根据权利要求2所述的面向对象标识方法,其特征在于,在整个所述数据库中采用统一的规则和数据类型来设置每个所述ID。
4.根据权利要求3所述的面向对象标识方法,其特征在于,在整个所述数据库中采用统一的规则和数据类型来设置每个所述ID包括以下步骤将所述ID设置为长度为N+M位的整数或字符,其中,N和M均为大于0的正整数,N位代表类标识,M位代表对象标识,所述类标识用于唯一地标识自己所属的类,所述对象标识用于在这个类的多个对象实例中唯一地标识自己。
5.根据权利要求4所述的面向对象标识方法,其特征在于,所述ID设置为128位二进制表示的整数,其中N=64,M=64。
6.根据权利要求4所述的面向对象标识方法,其特征在于,所述ID设置为二进制或十进制表示的整数,整个ID的值不超过264。
7.根据权利要求4所述的面向对象标识方法,其特征在于,还包括以下步骤通过设置外键的值等于所述ID的值,以描述所述多个对象之间的关系。
8.根据权利要求7所述的面向对象标识方法,其特征在于,通过设置外键的值等于所述主键的值来在两者之间建立关联包括以下步骤通过在所述外键中存储所述ID,外键不重复,以映射所述多个对象之间的1∶1关系;或者通过在所述外键中存储所述ID,所述外键有重复,以映射所述多个对象之间的1∶多关系;或者设置关系表,其中含有多个外键来存储所述ID,所述外键有重复,以映射所述多个对象之间的多∶多关系。
9.根据权利要求4所述的面向对象标识方法,其特征在于,还包括以下步骤描述类标识和类之间的映射关系,类和表之间的映射关系、以及各个类之间的派生关系。
10.根据权利要求9所述的面向对象标识方法,其特征在于,还包括以下步骤要获取类标识时,根据所述ID,通过分解获取到N位的所述类标识;要获取对应的类时,根据所述类标识,从所述映射中获取到对应的类;要获取对应的一个或多个表时,根据所述类,从所述映射中获取到对应的一个或多个表;要获取其派生的一个或多个类所对应的多个表时,根据所述类,从映射中获取到其派生的一个或多个类从而获取对应到的多个表。
11.根据权利要求9所述的面向对象标识方法,其特征在于,还包括以下步骤根据所述ID中的类标识查询到对应的类;动态地创建出这个类的程序对象并查询到这个类对应的表;从所述表中查询到主键等于所述ID的记录来为所述程序对象加载完整的数据;运行所述程序对象的各种方法以完成相应的业务处理。
12.根据权利要求4所述的面向对象标识方法,其特征在于,还包括以下步骤在一个表中存储具有相同类标识的对象;或者在一个表中存储具有不同类标识的对象;或者将一个类的对象的数据内容分布在不同的表中。
13.根据权利要求4所述的面向对象标识方法,其特征在于,还包括以下步骤要查询具体类的对象时,根据这个类的名字,获取到这个类对应的表,根据表系统生成面向表的查询语句来查询对象;要查询多个类的对象时,则将每个类按上述方法处理,然后将结果汇总起来形成一个总的结果集;要查询一个基类的对象时,按照类之间关系的描述分析出基类派生的所有派生类,然后按上述的方法汇总成一个总的结果集。
14.根据权利要求13所述的面向对象标识方法,其特征在于,结果集中的每一条数据都包含一个所述ID。
15.根据权利要求14所述的面向对象标识方法,其特征在于,还包括以下步骤根据所述结果集中的所述ID中的N位类标识查询到对应的类;动态地创建出这个类的程序对象并查询到这个类对应的表;从所述表中查询到主键等于所述ID的记录来为所述程序对象加载完整的数据;运行所述程序对象的各种方法以完成相应的业务处理。
16.根据权利要求4所述的面向对象标识方法,其特征在于,还包括以下步骤在界面控件中存储所述ID来实现界面和所述对象的关联。
17.根据权利要求16所述的面向对象标识方法,其特征在于,还包括以下步骤从界面控件中取出存储的所述ID;根据所述ID中的N位类标识查询到对应的类;动态地创建出这个类的程序对象并查询到这个类对应的表;从所述表中查询到主键等于所述ID的记录来为所述程序对象加载完整的数据;运行所述程序对象的各种方法以完成相应的业务处理。
18.根据权利要求4所述的面向对象标识方法,其特征在于,还包括以下步骤通过分解所述ID中的N位类ID来建立针对类的索引,所述索引用于从多条记录中选择出属于某一个或多个类的对象。
19.根据权利要求4所述的面向对象标识方法,其特征在于,还包括以下步骤汇总多个表的数据的所述ID来生成索引,所述索引用于只根据一个对象的ID来查找到其对象所对应的表和记录。
20.根据权利要求1至19中任一项所述的面向对象标识方法,其特征在于,所述数据库包括关系数据库。
全文摘要
本发明提供了一种面向对象标识方法,用于以面向对象方式标识数据库中的数据,数据库包括多个包括业务信息的数据,每个数据的业务信息相对独立,本方法包括以下步骤对每个数据设置ID作为主键,以将多个数据映射成相互独立的对象。
文档编号G06F17/30GK1996308SQ20061017320
公开日2007年7月11日 申请日期2006年12月30日 优先权日2006年12月30日
发明者陈 峰 申请人:陈 峰
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1