公开/公告号CN103186628A
专利类型发明专利
公开/公告日2013-07-03
原文格式PDF
申请/专利权人 上海可鲁系统软件有限公司;
申请/专利号CN201110458483.6
申请日2011-12-31
分类号G06F17/30(20060101);
代理机构
代理人
地址 201203 上海市浦东新区祖冲之路887弄82号二楼北
入库时间 2024-02-19 18:48:14
法律状态公告日
法律状态信息
法律状态
2020-02-07
专利权人的姓名或者名称、地址的变更 IPC(主分类):G06F17/30 变更前: 变更后: 申请日:20111231
专利权人的姓名或者名称、地址的变更
2016-09-28
授权
授权
2014-01-22
实质审查的生效 IPC(主分类):G06F17/30 申请日:20111231
实质审查的生效
2013-07-03
公开
公开
技术领域
本发明涉及一种关系数据库映射技术
背景技术
现有公共信息模型(Common Information Model,简称“CIM”)的实现大多来自对象管理组织(Object Management Group,简称“OMG”)《Utility ManagementSystem(UMS)Data Access Facility Specification》附录C——SQL Examples。该文档提出了将GDA接口映射为SQL语句的范例。由此引申出一个问题:基于面向对象模型描述的CIM模型如何映射至关系型数据库的问题。
在对象模型中,对象之间普遍存在着各种关系,如关联、组合、聚合、继承等,这种关系无法在关系型数据库中直接表达,这就是产生了所谓的对象模型与关系模型之间的“阻抗不匹配”。为解决这些问题,当前大多采用基于结构映射模式的O/R(对象-关系)映射方法。
通常的O/R映射方法,对对象模型的处理需要包括以下三方面内容:
1、对象映射——将对象映射至数据库表,即用表字段来描述面向对象模型的类属性,这样对象就映射为具体的表记录,数据表就表达为对象的集合,基于关系键映射来描述对象之间的聚合关系,如图1所示。
2、类关系映射——用数据库表之间的关系键映射来描述对象之间的关系特性,由于对象之间普遍存在着一对多甚至多对多的关系,根据关系型数据库表之间的关系键映射的处理方法,多对多关系需要引入第三张表即关联表,基于关系表映射来描述对象之间的多对多关系,如图2所示。另外对象类之间的关系还分为关联、组合、聚合,对于前两种关系还需描述关系的角色特性,对于对象类关系的这个特性,简单的关系键映射不能直接解决该问题。
3、类继承映射——在对象模型中还存在通过继承关系相互连接起来的类层次,由于标准的SQL里面没有用于继承的标准方法,所以为了在关系模型中表达对象之间这种层次关系,还需要建立数据表之间的继承映射关系。对于任何继承结构,目前都有三种选择:a、为层次中的所有类建立一个表,即单表继承,如图3所示;b、为每个具体类建立一个表,即具体表继承,如图4所示;c、为层次中每一个类建立一个表,即类表继承,如图5所示。
本发明的发明人发现,现有技术中采用的基于结构映射模式的O/R(对象-关系)映射方法存在以下问题:
1、表“膨胀”——可以看出整个映射模型中存在两大类表,即对象表与关系表。在CIM对象模型中至少存在几百个类,加上类之间的复杂关系,基于该映射方法建立起来的对象关系模型,表数量巨大,由此导致系统的可维护性很差。
2、大量连接操作——由于大量关系表的存在,导入一个对象需要涉及多个连接(join)操作,这样通常损失了数据库操作性能,虽然单表继承与具体表继承可以避免因继承关系带来的连接操作,但单表继承同时带来了存储空间上浪费,具体表继承允许从一个表中取得一个对象,但由此引起系统的可扩展性与数据的引用完整性问题。同时对象类关系的存在仍使得对象引用时大量的连接操作不可避免。
3、表记录“膨胀”——这种情况尤其体现在采用类表继承,由于每一个超类均需要保存一份子类的对应记录,这直接导致超类表记录数增多。
总之,在当前采用基于结构映射模式的O/R(对象-关系)映射方法来解决对象模型的大规模实际应用,尤其是在一些涉及海量信息资源建模应用的领域,如电力、石油、铁路等行业,以及当前广泛关注的物联网应用,由于其本身就需处理海量的“物”描述。这种映射方法显得有些困难。
发明内容
本发明主要解决的技术问题是提供一种CIM模型与关系型数据库之间的映射方法,使得在实现CIM模型到关系型数据库之间映射的同时,可以满足CIM应用中对信息模型的任意扩展要求与引用完整性约束,避免出现表“膨胀”、和大量连接操作的问题。
为了解决上述技术问题,本发明提供了一种CIM模型与关系型数据库之间的映射方法,包含以下步骤:
建立CIM模型中类的元模型描述,包含类本体的描述、类属性的描述、和类关系的描述,类关系包括类层次关系和类逻辑关系;
为类的各描述分别建立元模型,生成类本体的描述类元模型、类属性的描述类元模型、类关系的描述类元模型,和各元模型的关系;CIM模型中所有类模型均通过上述各元模型实例化得到;
建立CIM模型中对象的元模型描述,包含对象本体的描述、对象属性值的描述、和对象间关系的描述;
为对象的各描述分别建立元模型,生成对象本体的描述类元模型、对象属性值的描述类元模型、对象间关系的描述类元模型,和各元模型的关系;CIM模型中所有对象模型均通过上述各元模型实例化得到;
将类与对象的元模型映射至关系型数据库,每个元模型对应一关系表,建立由类的各元模型映射而成的模式关系表集合,与由对象的各元模型映射而成的对象关系表集合;
对象关系表集合中,由各对象元模型映射得到一组对象关系表,根据对象模型的关键节点,为每个关键节点分配一组对象关系表;
在对类元模型进行实例化,生成具体的类模型时,根据实例化的内容,在模式关系表集合中对应的关系表中新增记录;
在对对象元模型进行实例化,生成具体的对象模型时,根据实例化的内容和该对象模型所属的关键节点,在对象关系表集合中该关键节点所对应的一组对象关系表中相应的关系表中新增记录。
作为上述技术方案的改进,类本体的描述类元模型、类属性的描述类元模型、类关系的描述类元模型的关系包含:
类本体的描述类元模型自身具有继承关系;
类本体的描述类元模型与类关系的描述类元模型之间具有定义域关系,用于表明类关系的描述类所表达的具体关系由哪个类所拥有;
类本体的描述类元模型与类属性的描述类元模型之间具有从属关系,用于表明类属性的描述类所表达的具体类属性由哪个类所拥有。
作为上述技术方案的改进,对象本体的描述类元模型类为类本体的描述类元模型的实例;
对象属性值的描述类元模型为类属性的描述类元模型的实例;
对象间关系的描述类元模型为类关系的描述类元模型的实例。
作为上述技术方案的改进,建立CIM模型中类的元模型描述的步骤中,所建立的描述还包含:基本数据类型的描述;
为对象的各描述分别建立元模型的步骤中,还生成基本数据类型的描述类元模型;
基本数据类型的描述类元模型与类属性的描述类元模型之间具有关联关系,用于表明类属性的描述类所表达的具体类属性使用哪种数据类型。
作为上述技术方案的改进,建立CIM模型中类的元模型描述的步骤中,所建立的描述还包含:简单数据类型的描述;
为对象的各描述分别建立元模型的步骤中,还生成简单数据类型的描述类元模型;
基本数据类型的描述类元模型与简单数据类型的描述类元模型之间具有组合关系。
作为上述技术方案的改进,将类与对象的元模型映射至关系型数据库,每个元模型对应一关系表的步骤中,
元模型中包含的每个元素对应关系表中的一项。
作为上述技术方案的改进,类本体的描述类元模型包含以下元素:
类标识、类名称、类版型、和/或类基类;
类属性的描述类元模型包含以下元素:
属性标识、属性名称、属性变量类型、所属类、和/或注释;
类关系的描述类元模型包含以下元素:
关系标识、关系名称、重数、是否聚集、关系的定义域、关系的值域、反向角色名、和/或注释。
作为上述技术方案的改进,基本数据类型的描述类元模型包含以下元素:
基本数据类型标识、类或结构的名称、类的版型、和/或注释。
作为上述技术方案的改进,简单数据类型的描述类元模型包含以下元素:
变量名、变量类型、变量初始值、和/或所属基本数据类型。
作为上述技术方案的改进,对象本体的描述类元模型包含以下元素:
对象标识、对象名称、类标识、和/或对象关系实例标识;
对象属性值的描述类元模型包含以下元素:
属性值标识、属性名称、值类型、值数据、所属对象标识、属性标识;
对象间关系的描述类元模型包含以下元素:
关系标识、所属对象标识、类关系标识。
本发明实施方式与现有技术相比,主要区别及其效果在于:先分别建立类与对象的元模型描述,这样有关类与对象的语义差别在各自的元模型体系中得到消除;然后将元模型映射至关系型数据库,通过这样的映射将建立两种元模型的数据库表,即由类元模型映射而成的模式关系表集合(称之为模式库)与对象元模型映射而成的对象关系表集合(称之为对象库)。经过这种方法建立起来的数据库,表数量有限,而且由于元模型是通用的,这意味着表结构是稳定的,可以满足CIM应用中对信息模型的任意扩展要求与引用完整性约束。并且,在表数量有限的情况下,也可以避免大量的连接操作,而且表之间的关系预先知道,完全可以通过关系型数据库的存储过程来避免动态生成SQL语句,进一步提供系统性能。对于模式库来说,由于实际应用中CIM模型的模式类是相对有限的,基于模式库中的几张基本表来存储所有模式类已经足够了。但对于对象库,要存储海量的信息模型,依靠3张基本表来容纳整个信息模型,将会出现表记录的“膨胀”问题。因此,本发明实施方式中按对象模型的关键节点来组织对象库,通过该方式,不仅解决了表记录“膨胀”问题,而且结合CIM的实际应用,通常将一些可部署对象设置为关键节点,则从根本上解决了模型的分布式部署应用需求。
附图说明
图1是背景技术中基于关系键映射来描述对象之间的聚合关系的示意图;
图2是背景技术中基于关系表映射来描述对象之间的多对多关系的示意图;
图3是背景技术中单表继承示意图;
图4是背景技术中具体表继承示意图;
图5是背景技术中类表继承示意图;
图6是本发明一较佳实施方式中类模型与关系型数据库之间的映射流程图;
图7是本发明一较佳实施方式中CIM模型中类的元模型UML描述示意图;
图8是本发明一较佳实施方式中模式库的基本表之间的关系键映射示意图;
图9是本发明一较佳实施方式中对象模型与关系型数据库之间的映射流程图;
图10是本发明一较佳实施方式中对象库的基本表之间的关系键映射示意图;
图11是本发明一较佳实施方式中按对象模型的关键节点来分配关系表的示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明的实施方式作进一步地详细描述。
本发明一较佳实施方式涉及一种CIM模型与关系型数据库之间的映射方法,是针对CIM的一种具体实现技术。CIM是用面向对象的建模技术定义的,根据面向对象理论,对象是类的实例,类是对具有相同属性与行为的一组事物的抽象描述。类之间还具有关系,这种关系包括类层次关系(即继承)与类逻辑关系(如关联、组合等);本发明的发明人发现,由于定义CIM是为了方便数据交换,因此CIM实体除了缺省的生成、删除、更新和读出外,没有其它行为,也即CIM中定义的类只有0.属性,没有行为方法的定义,从而类、对象以及它们之间的关系是可以通过各自的元模型来统一建模描述。
因此本发明的基本思路是:先分别建立类与对象的元模型描述,这样有关类与对象的语义差别在各自的元模型体系中得到消除;然后将元模型映射至关系型数据库,通过这样的映射将建立两种元模型的数据库表,即由类元模型映射而成的模式关系表集合(称之为模式库)与对象元模型映射而成的对象关系表集合(称之为对象库)。经过这种方法建立起来的数据库,表数量有限(类元模型关系表为5张基本表、对象元模型关系表为3张基本表),而且由于元模型是通用的,这意味着表结构是稳定的,可以满足CIM应用中对信息模型的任意扩展要求与引用完整性约束。并且,在表数量有限的情况下,也可以避免大量的连接操作,而且表之间的关系预先知道,完全可以通过关系型数据库的存储过程来避免动态生成SQL语句,进一步提供系统性能。可见,相对于现有技术中采用结构映射方法来实现关系型数据库的映射,本发明采用基于元模型的映射方法实现类模型和对象模型统一映射至关系型数据库,基本上可以消除现有技术中表“膨胀”、和大量连接操作的缺点,是对CIM实现方法的一种很大改进。
另外,由于元模型是通用的,且结构是稳定,也即在系统生命周期内不会随CIM模型的改变以及系统应用目的、业务类型的改变而改变,因此我们在元模型映射时采用具体表继承来消除元模型描述类的继承关系。
具体类模型与关系型数据库之间的映射流程如图6所示。
步骤601中,建立CIM模型中类的元模型UML描述,包含三个基本的元模型描述:类本体的描述(Class)、类属性的描述(Property)、和类关系的描述(Relation),如图7所示。其中,类关系包括类层次关系(即继承)、和类逻辑关系(如关联、组合等)。
另外,根据面向对象表示方法,每一个CIM类属性都具有一个数据类型,因此在类的元模型描述中还包含了基本数据类型的描述(Datatype);并且,在CIM建模规范中,除了简单的数据类型(包括整型、浮点型、字符串型、布尔型等)外,某些数据类型还建模有单位、倍率、初始值等,因此还包含了简单数据类型的描述(Variant)。
步骤602中,为类的各描述分别建立元模型,生成类本体的描述类元模型(Class类)、类属性的描述类元模型(Property类)、类关系的描述类元模型(Relation类),和基本数据类型的描述类元模型(Datatype类)、简单数据类型的描述类元模型(Variant类);以及各元模型的关系。CIM模型中所有类模型均可以通过上述各元模型实例化得到。
其中,如图7所示,上述Class类、Property类、Relation类三个元模型类具有建模关系如下:
Class类自身具有的SubclassOf关系(表示是......的子类)表示CIM类之间的层次关系(即继承);
Class类与Relation类之间具有的Domain关系(定义域)用来说明Relation类所表达的CIM关系为哪个CIM类所拥有,两者之间的Range关系(值域)用来说明Relation类所表达的CIM关系指向哪个CIM类;
Class类与Property类之间具有的Properties关系(从属)用来说明Property类所表达的CIM类属性为哪个类所拥有。
根据面向对象表示方法,每一个CIM类属性都具有一个数据类型。因此在类的元模型中使用了DataType这个类来建模相关的CIM类属性使用哪一种数据类型,另外在CIM建模规范中,除了简单的数据类型(包括整型、浮点型、字符串型、布尔型等)外,某些数据类型还建模有单位、倍率、初始值等,因此引入Variant类对这些构成数据类型的要素进行了建模。
步骤603中,将类的元模型映射至关系型数据库,每个元模型对应一关系表,共5张基本表,建立由类的各元模型映射而成的模式关系表集合(称为模式库)。元模型中包含的每个元素对应关系表中的一项成员变量。
类本体的描述类元模型包含以下元素:类标识、类名称、类版型、类基类;对应的表结构如表1所示:
表1
类属性的描述类元模型包含以下元素:属性标识、属性名称、属性变量类型、所属类、注释;对应的表结构如表2所示:
表2
类关系的描述类元模型包含以下元素:关系标识、关系名称、重数、是否聚集、关系的定义域、关系的值域、反向角色名、注释;对应的表结构如表3所示:
表3
基本数据类型的描述类元模型包含以下元素:基本数据类型标识、类或结构的名称、类的版型、注释;对应的表结构如表4所示:
表4
简单数据类型的描述类元模型包含以下元素:变量名、变量类型、变量初始值、所属基本数据类型;对应的表结构如表5所示:
表5
上述5张表构成了模式库的基本表,这些表之间的关系以简单的关系键映射来连接,如图8所示,801表示类之间的继承关系;802表示类关系的定义域;803表示类关系的值域;804表示类关系的角色连接关系;805表示类与属性的从属关系;806表示属性与基本数据类型的关联关系;807表示基本数据类型与简单数据类型的组合关系。
步骤604中,在对类元模型进行实例化,生成具体的类模型时,根据实例化的内容,在模式关系表集合中对应的关系表中新增记录,从而实现了从CIM类模型到关系型数据库之间的映射,之后可以通过关系数据库对其进行管理和应用。
在CIM模型的实现中,分为类模型与对象模型,根据面向对象理论,对象是类的实例,因此这两种也具有实例化关系。基于这两种模型之间既存在相对独立性又具有上述所说的实例化关系,本发明分别采用了元模型来描述这两种模型,并在两种元模型之间使用键值来表达实例化关系,这种表示方法很适合关系数据库的数据表设计,“独立性”使得我们可以采用不同的数据表来表示,“相关性”则可以很方便地使用数据表之间的键值关系来表达。
对象模型与关系型数据库之间的映射流程如图9所示。
步骤901中,建立CIM模型中对象的元模型描述,包含对象本体的描述(Instance)、对象属性值的描述(PropertyValue)、和对象间关系的描述(Association),如图10所示。
步骤902中,为对象的各描述分别建立元模型,生成对象本体的描述类元模型(Instance类)、对象属性值的描述类元模型(PropertyValue类)、对象间关系的描述类元模型(Association类),和各元模型的关系;CIM模型中所有对象模型均通过上述各元模型实例化得到。
其中,对象本体的描述类元模型类为类本体的描述类元模型的实例;对象属性值的描述类元模型为类属性的描述类元模型的实例;对象间关系的描述类元模型为类关系的描述类元模型的实例。
步骤903中,将对象的元模型映射至关系型数据库,每个元模型对应一关系表,建立由对象的各元模型映射而成的对象关系表集合(称为对象库)。元模型中包含的每个元素对应关系表中的一项成员变量。
对象本体的描述类元模型包含以下元素:对象标识、对象名称、类标识、对象关系实例标识;对应的表结构如表6所示:
表6
对象属性值的描述类元模型包含以下元素:属性值标识、属性名称、值类型、值数据、所属对象标识、属性标识;对应的表结构如表7所示:
表7
对象间关系的描述类元模型包含以下元素:对象关系标识、所属对象标识、类关系标识;对应的表结构如表8所示:
表8
上述3张表构成了对象库的基本表,这些表之间的关系以简单的关系键映射来连接,如图10所示,1001表示对象与属性值之间的从属关系;1002表示对象之间关联关系(定义域部分);1003表示对象之间关联关系(值域部分);1004表示实例化关系。
步骤904中,在对象库中,根据对象模型的关键节点,为每个关键节点分配一组上述对象关系表,即每个关键节点分配3张对象关系表,如图11所示。
对于模式库来说,由于实际应用中CIM模型的模式类是相对有限的,基于现有的5张基本表来存储所有模式类已经足够了。但对于对象库,要存储海量的信息模型,依靠现有的3张基本表来容纳整个信息模型,将会出现表记录的“膨胀”问题。因此,本实施方式中按对象模型的关键节点来组织对象库,通过该方式,不仅解决了表记录“膨胀”问题,而且结合CIM的实际应用,通常将一些可部署对象设置为关键节点,则从根本上解决了模型的分布式部署应用需求。
步骤905中,在对对象元模型进行实例化,生成具体的对象模型时,根据实例化的内容和该对象模型所属的关键节点,在对象库(对象关系表集合)中该关键节点所对应的一组对象关系表中相应的关系表中新增记录,从而实现了从对象模型到关系型数据库之间的映射,之后可以通过关系数据库对其进行管理和应用。
虽然通过参照本发明的某些优选实施方式,已经对本发明进行了图示和描述,但本领域的普通技术人员应该明白,可以在形式上和细节上对其作各种改变,而不偏离本发明的精神和范围。
机译: 一种用于使用直径路由代理(DRA)获得移动用户身份和动态分配的互联网协议(IP)地址之间的映射并且使该映射可被应用访问的方法;系统和计算机可读介质
机译: 一种用于使用直径路由代理(DRA)获得移动用户身份和动态分配的互联网协议(IP)地址之间的映射并且使该映射可被应用访问的方法;系统和计算机可读介质
机译: “一种在应用程序和总线结构及其接口之间提供内存映射接口的方法”