专利名称::一种动态配置实体数据表的方法和系统的制作方法
技术领域:
:本发明涉及数据处理
技术领域:
,更具体地说,涉及一种动态配置实体数据表的方法和系统。
背景技术:
:在现有的诸多软件应用系统中,某些情形下需要在产品上线后或软件运行时更改数据库中数据表的结构,例如由于设计初期对原实体设计的属性不全,或者属性类型不匹配,亦或是需要实现实体的动态属性。动态属性是实体对象运行时动态增加减少或更改的属性,是在软件设计初期时考虑不到的,或者某些属性是要求软件使用者根据实际情况现场增加的,例如数据表设计初期时建立一个"学生"实体,软件后期运行时需要记录学生的身高,但软件设计初期时数据表里没有"学生身高"这个属性,因此需要在该软件后期运行时增加"学生身高"这个属性,后期增加的这个属性就叫做动态属性。然而,数据库的数据表后期增加的列一般是不会一皮原程序支持的。因此,若要改变数据表结构,就势必要更改原始数据代码。这样,不论是软件开发工作量,还是软件维护工作量都大大增加,而且更改数据代码十分容易造成遗漏或错误,而且在一些极端情况下对后期修改数据表结构是不允许的,这一切都给软件交付带来许多问题。现有技术中对于软件后期实体属性变动的问题,通常需要尽量避开列的更改,在需要增加数据列时通过业务上或技术上绕过这个环节,或者直接在软件下个版本中更改表结构,例如对于"学生"实体中增加"学生身高"属性,就重新做一个新界面一一"身高录入"界面,运行后台对应新增一个数据表,用于存储学生ID身高。这种方式就是通过业务上绕过更改"学生,,这个实体的属性。但是,这种处理方法很多时候不能完全满足业务需求,例如上面的"学生身高,,录入界面,显然逻辑上不如在"学生录入"界面一次录入方便,很可能不能被客户所接受。此外,还有很多系统都是采用预留字段的方式进行软件后期实体属性变动的处理,一般是在系统设计初期预留多个字段给日后列的变更,有的系统甚至会设置上百预留列,例如"学生"实体预留若干数字型列,后期"学生身高"应用其中一列即可。但是,通过预留字段的方式进行软件后期实体属性变动的处理往往由于设计之初很难确定后期的需求,很可能列的数据类型不合适或精度不够,而且预留列的数目难以确定,预留列过多又会影响系统的性能。可见,现有技术不能满足数据表动态属性的业务需求,当后期运行阶段需要对原数据表属性变动时,仍需对原数据表进行繁重的二次开发。
发明内容有鉴于此,本发明实施例提供一种实现动态列的方法和系统,能够满足数据表动态属性的业务需求,当后期运行阶段需要对原始实体数据表属性变动时,避免对原始实体数据表进行繁重的二次开发。本发明实施例是这样实现的获取所述实体数据表的配置信息,所述配置信息包括属性信息和值信自.将所述配置信息以配置表形式保存,包括将所述属性信息保存到所述配置表的属性信息子表中,将所述值信息保存到所述配置表的值信息子表中;将所述属性信息子表中的属性信息和值信息子表中的相应值信息生成列,导入实体数据表,并显示所述实体数据表。其中,优选的,所述配置表还包括以列组ID进行标识的列组信息子表;所述将所述配置表导入实体数据表具体为将所述配置表导入所述列组ID对应的实体数据表。进一步,所述配置表还包括以对象ID进行标识的个性信息子表;所述方法还包括以所述个性信息子表的对象ID对配置表中相应的对象进行编辑。优选的,将所述配置信息以配置表形式保存具体包括校验所述属性信息子表和值信息子表中的配置信息是否相对应,若是,则将所述配置信息以属性信息子表和值信息子表形式保存;若否,则保存失败。进一步,所述方法还包括对保存到所述配置表中的属性信息和值信息进行修改或删除。当对所述配置表中的属性信息进行删除时,同时删除所述属性信息对应的值信息。根据本发明的实施例,还公开了一种动态配置实体数据表的系统,包括配置信息获取单元,用于获取所述实体数据表的配置信息,所述配置信息包括属性信息和值信息;配置表保存单元,用于将所述配置信息以配置表形式保存,包括将所述属性信息保存到所述配置表的属性信息子表中,将所述值信息保存到所述配置表的值信息子表中;显示单元,用于将所述属性信息子表中的属性信息和值信息子表中的相应值信息生成列,导入实体数据表,并显示所述实体数据表。其中,所述配置表还包括以列组ID进行标识的列组信息子表;所述将所述配置表导入实体数据表具体为将所述配置表导入所述列组ID对应的实体数据表。优选的,所述配置表还包括以对象ID进行标识的个性信息子表;以所述个性信息子表的对象ID对配置表中相应的对象进行编辑。进一步,所述系统还包括校验单元,用于校验所述属性信息子表和值信息子表中的配置信息是否相对应,若是,则将所述配置信息以属性信息子表和值信息子表形式保存;若否,则保存失败。更进一步,所述系统还包括修改单元,用于对保存到所述配置表中的属性信息和值信息进行修改;删除单元,用于对保存到所述配置表中的属性信息和值信息进行删除;当删除属性信息时,同时删除值信息表中相应数据信息。对现有技术相比,本发明实施例提供的技术方案具有以下优点和特点首先,本发明通过建立多个配置表存储列信息,运行环境提供界面满足用户更改配置表,而业务系统通过关联方式调用配置表,将相应列属性信息导入原始数据表,在应用过程中可以实现一次成型,省去由于后期需求更改而进行的繁重的二次开发;而且,用配置表实现动态配置实体数据表,可以对后期需求问题直接定位,不论是精度、数据类型还是列的数量,都可以在运行中配置,应用简单,无技术障碍另外,当需要更改列数据时,只要更改配置表的列存储信息即可,从而在设计层面上实现了动态列的功能,在客户层面表现为实现了动态属性,可以根据需要灵活地显示信息;此外,动态配置实体数据表的实现让产品处处可配置,灵活面向客户,极大地丰富了用户的应用场景,从而使产品功能更加强大。为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以才艮据这些附图获得其他的附图。图1为本发明一种动态配置实体数据表的方法实施例的步骤流程图;图2是本发明一种动态配置实体数据表的系统实施例的结构框图。具体实施例方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。本发明的核心构思之一在于,建立多个配置表存储列信息,运行环境提供界面满足用户更改配置表,而业务系统通过关联方式调用配置表,当需要更改列数据时,只要更改配置表的列存储信息即可。配置表是数据库中的多个数据表,在这些数据表中存储了一系列配置信息,配置信息用于保存各种设置参量,比如列设置信息。实际应用中,动态属性典型的表现方式是动态列,动态列是一种可以在软件运行环境动态增加或者减少列的实现方式。参考图l,示出了本发明一种实现动态列的方法实施例的步骤流程图,具体可以包括以下步骤步骤IOI、获取所述实体数据表的配置信息,所述配置信息包括属性信息和值信息;步骤102、将所述配置信息以配置表形式保存,包括将所述属性信息保存到所述配置表的属性信息子表中,将所述值信息保存到所述配置表的值信息子表中;所述属性信息子表及值信息子表是配置表的具体表现形式,其中,属性信息子表存储了列的相关属性信息,如名称、类型或精度等;值信息子表存储所述属性信息子表中属性描述的相应值信息。在预置这两个配置表的同时,建立原始实体数据表与属性信息子表的组合关系及原始实体数据表与值信息子表的组合关系。属性信息子表及值信息子表可以分别以身份识别号码(ID)进行标识,并通过ID建立与原始实体数据表的组合关系。当属性信息子表及值信息子表可以分别以ID进行标识,并通过ID建立与原始实体数据表的组合关系之后,可以通过ID确定某一列属性,进而获取相应的列属性值化息。步骤103、将所述属性信息子表中的属性信息和值信息子表中的相应值信息生成列,导入实体数据表,并显示所述实体数据表。本发明所述生成的列可以是多列,也可以是只生成一列。本发明通过建立多个配置表存储列信息,运行环境提供界面满足用户更改配置表,而业务系统通过关联方式调用配置表,将相应列属性信息导入原始数据表,在软件应用过程中可以实现一次成型,省去由于后期需求更改而进行的繁重的二次开发,用户可以根据实际的业务需要配置出所需要的信息显示项目。为了方便叙述,下面以本发明的一个具体应用领域,即学生登记的业务场景为例,对本发明技术方案进行更为详细的说明。其中,该业务要求存储学生的相关信息,但最初不确定"学生"这个实体有多少属性,目前只知道名称,到运行时需要增加"身高"、"体重"等属性。其中,"学生"表的结构如表l所示8表1学生ID名称CI张三C2李四当在后期运行时需要增加"身高,,属性时,预置两个表,分别为(l)属性信息子表,如表2所示,其中列的相关属性信息包括名称、类型、ID及精度,表2歹寸ID名称类型精度Ll身高BigDecimal1(2)值信息列表,参见表3,存储上述属性信息子表中属性"身高"的值信息,表3学生ID列ID值ClU175.5表1通过列ID获取需要增加的"身高"属性,并结合学生ID导入相应的"身高"属性值。如果后期运行时还需要增加"体重"属性时,可以通过更改属性信息子表实现,更改后的属性信息子表如下表4列ID名称类型精度Ll身高BigDecimal1L2体重BigDecimal2在进行配置表信息的读取时,通过读取属性信息子表,获取原"学生"表中需要增加的"身高"、"体重,,属性;然后,通过列ID及学生ID的对应关系,获取相应学生的"身高"、"体重"属性的具体属性值;进而,将相应学生的"身高"、"体重"属性的具体属性值生成列,导入到原"学生"表。其中,需要说明的是,关于业务实体的信息展示和录入界面尽量采用列表界面,省去了因属性增加导致界面变化的处理难度,如"学生,,表的界面显示为表5结构形式表5<table>tableseeoriginaldocumentpage10</column></row><table>动态属性的配置界面提供用户在后期软件应用系统运行中对列的配置工作,界面要简洁。上述两个数据表模式虽然实现简单,但由于某个学生实体,如"张三,,,独占属性信息子表,因此,对于多个学生实体,当需要增加列属性时,需要建立多个属性信息子表,而且属性信息子表之间无法复用。针对这种缺陷,本发明的一种改进的方案在于,所述预置属性信息子表之前还包括预置列组信息子表,所述列组信息子表存储实体列组的名称属性及实体列组ID标识,并将实体列组ID标识生成列导入所述属性信息子表。仍以前述学生登记的业务场景为例,"学生"表中增加了列组ID数据列,如表6所示表6<table>tableseeoriginaldocumentpage10</column></row><table>当在后期运行时需要增加"身高,,属性时,预置三个表,分别为列组信息子表,如表7所示,存储"学生,,列组整体信息,以列组ID进行标识,并与实体"学生"相对应表7<table>tableseeoriginaldocumentpage10</column></row><table>属性信息子表,与两个表数据模式中类似,区别在于,增加一个列组ID列,表明属于哪个实体列组,详见表8:表8<table>tableseeoriginaldocumentpage10</column></row><table>属性信息子表,与两个表数据模式模式中的属性信息子表相同,参见表9:表9<table>tableseeoriginaldocumentpage11</column></row><table>在进行配置表信息的读取时,用户根据列组ID获取相应的列ID,获取原"学生,,表中需要增加的"身高,,、"体重"属性;然后,通过列ID及学生ID的对应关系,获取相应学生的"身高"、"体重,,属性的具体属性值;进而,将相应学生的"身高"、"体重"属性的具体属性值生成列,导入到原"学生"表。这种三个数据表的列分组模式吸纳了两个表数据模式的优点,同时对学生"身高,,、"体重"数据列进行归类抽象,统一归类至一个列组。如果后期需要再增加一个"老师"实体,就对应增加一个"老师"列组,建立方法与"学生"表相类似"老师"表的结构为表IO所示表10<table>tableseeoriginaldocumentpage11</column></row><table>则增加"老师"实体后的列组信息子表更改为如表ll结构:表11<table>tableseeoriginaldocumentpage11</column></row><table>对"老师"列组也可以进4亍详细编辑,例如增加"身高,,属性,如表12所示表12<table>tableseeoriginaldocumentpage11</column></row><table>可见,该列组信息子表中同时存储有"学生"和"老师"的属性信息,然而,"学生,,和"老师"的属性信息又独立存在,以列组ID进行区分。在这样的列信息表中,对"学生"和"老师"两个实体属性信息中任何一方的修改对另一方的属性信息毫不影响如果后期运行时又要增加一个"实习生"实体,该实体属性和"学生"相同,那么就可以直接应用学生列组建立"实习生"表,复用十分方便。所述"实习生"表的结构为表13所示表13<table>tableseeoriginaldocumentpage12</column></row><table>但是,这种三个数据表的列分组模式在实际应用中也存在着一个问题,具体为发生复用的实体之间的列更改会导致相互影响,例如若在"实习生"的属性信息子表中再增加"实习年限"属性,该"实习年限"属性是"学生,,属性信息子表中所不存在的一个属性,那么增加该属性势必要影响"学生"的属性。为了避免发生复用的实体之间的列属性更改导致的相互影响,本发明又提出了一种改进的技术方案,具体为列组信息子表以及值信息子表的结构同三个数据表的列分组模式中一致,区别在于将属性信息子表经过复制保存成为模板属性信息子表,并且建立个性信息子表,所述个性信息子表通过将属性信息子表中的实体列组ID列替换为对象标识列实现,所述对象标识列记录数据表运行实体的名称属性,以所述个性信息子表的对象ID对配置表中相应的实体对象进行编辑,具体表现为表14结构形式表14<table>tableseeoriginaldocumentpage12</column></row><table>"学生,,、"老师"以及"实习生,,三个实体的属性信息子表均可以直接调用模板属性信息子表进行建立。此时,当在"实习生"的属性信息子表中再增加"实习年限"属性时,将不会影响"学生"、"老师"的属性。模板属性信息子表的建立使得各实体的属性信息子表建立起来十分方便。个性信息子表在模板属性信息子表的基础上去掉列组ID列,增加一个"对象标识"列,在对象标识列中写明属于哪一实体的对象标识,如"学生"或是"实习生",这样,后期对于"实习生"的列属性编辑,例如增加"实习期限"时就不会影响"学生"列属性信息。可见,通过建立多个配置表存储列信息,运行环境提供界面满足用户更改配置表,而业务系统通过关联方式调用配置表,将配置表导入原始数据表,使得用户可以方便地根据实际的业务需求配置出自己需要的信息显示项目。概括地说,用户在分析业务场景之后,当明确当前实体数据表需要增加动态属性设计时,首先确定将要增加的实体数目及实体属性,以确定是否需要使用模板属性信息子表,从而确定配置表的数目。进一步,通过前面所述配置表的具体设置,实现当前实体数据表的动态属性设置。需要说明的是,在上述各子表的写入时需要注意以下情形对属性信息子表进行写入时,需要校验所述属性信息子表和值信息子表中的配置信息是否相对应,例如校验写入的属性列是否存在,校验列组ID和实体上设置的列组ID是否相同,校验个性信息子表中的对象标识和实体是否相同。当列数据的类型不合适或是精度不够需要修改时,同时修改属性信息子表中写入的具体数值,使写入的数值满足类型和精度需要。当系统在后期运行时,如果不需要某列记录在实体信息展示界面上显示,则可将该列记录设置为隐藏状态,这样用户就看不到该列了。关于所述隐藏功能的实现,通常可以利用控件KDSpread展示,每列记录设置一个复选框CheckBox,选中复选框,表示该列记录属性值(如身高)会在实体信息展示界面上显示,在数据库中用l进行标记;未选中复选框,表示该列记录属性值(如身高)不会在实体信息展示界面上显示,在数据库中用O进行标记。还应注意当删除列属性信息时,同时要对应删除值信息子表中的对应数据行,保证系统在以后运行中没有多余数据。列数据类型可以是日期、数字等数据库支持的所有类型,也可以使用枚举型,比如在进行性别展示时,此时的属性信息子表如下所示表15<table>tableseeoriginaldocumentpage13</column></row><table>还可以使用对象型的类型,比如学生增加"启蒙老师"属性,则属性信息子表改为表16歹'JID名称类型对象精度LI身高Object启蒙老师0此时,配置界面上的复杂度将大大增加,具体操作这里就不在进行赘述。本发明可用于众多通用或专用的计算系统环境或配置中,例如个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、包括以上任何系统或设备的分布式计算环境等等。本发明可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的程序、对象、组件或数据结构等等,也可以在分布式计算环境中实践本发明。在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。参考图2,示出了本发明一种实现动态列的系统实施例的结构框图,所述系统200具体可以包括以下单元配置信息获取单元201,用于获取所述实体数据表的配置信息,所述配置信息包括属性信息和值信息;配置表保存单元202,用于将所述配置信息以配置表形式保存,包括将所述属性信息保存到所述配置表的属性信息子表中,将所述值信息保存到所述配置表的值信息子表中;显示单元203,用于将所述属性信息子表中的属性信息和值信息子表中的相应值信息生成列,导入实体数据表,并显示所述实体数据表。进一步,所述配置表还包括以列组ID进行标识的列组信息子表;所述将所述配置表导入实体数据表具体为将所述配置表导入所述列组ID对应的实体数据表。更进一步,所述配置表还包括14以对象ID进行标识的个性信息子表;以所述个性信息子表的对象ID对配置表中相应的对象进行编辑。优选的,所述实现动态列的系统还包括校验单元204,用于校验所述属性信息子表和值信息子表中的配置信息是否相对应,若是,则将所述配置信息以属性信息子表和值信息子表形式保存;若否,则保存失败。优选的,所述系统还包括修改单元205,用于对保存到所述配置表中的属性信息和值信息进行修改;删除单元206,用于对保存到所述配置表中的属性信息和值信息进行删除;当删除属性信息时,同时删除值信息表中相应数据信息。对于系统实施例而言,由于其基本相应于方法实施例,所以描述的比较简单,相应之处参见方法实施例的部分说明即可,本发明在此不再进行赘述。对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。权利要求1、一种动态配置实体数据表的方法,其特征在于,所述方法包括获取所述实体数据表的配置信息,所述配置信息包括属性信息和值信息;将所述配置信息以配置表形式保存,包括将所述属性信息保存到所述配置表的属性信息子表中,将所述值信息保存到所述配置表的值信息子表中;将所述属性信息子表中的属性信息和值信息子表中的相应值信息生成列,导入实体数据表,并显示所述实体数据表。2、根据权利要求1所述的动态配置实体数据表的方法,其特征在于,所述配置表还包括以列组ID进行标识的列组信息子表;所述将所述配置表导入实体数据表具体为将所述配置表导入所述列组ID对应的实体数据表。3、根据权利要求2所述的动态配置实体数据表的方法,其特征在于,所述配置表还包括以对象ID进行标识的个性信息子表;所述方法还包括以所述个性信息子表的对象ID对配置表中相应的对象进行编辑。4、根据权利要求1-3所述的动态配置实体数据表的方法,其特征在于,将所述配置信息以配置表形式保存具体包括校验所述属性信息子表和值信息子表中的配置信息是否相对应,若是,则将所述配置信息以属性信息子表和值信息子表形式保存;若否,则保存失败。5、根据权利要求1-3所述的动态配置实体数据表的方法,其特征在于,所述方法还包括对保存到所述配置表中的属性信息和值信息进行修改或删除。6、根据权利要求5所述方法,其特征在于,还包括当对所述配置表中的属性信息进行删除时,同时删除所述属性信息对应的值信息。7、一种动态配置实体数据表的系统,其特征在于,包括配置信息获取单元,用于获取所述实体数据表的配置信息,所述配置信息包括属性信息和值信息;配置表保存单元,用于将所述配置信息以配置表形式保存,包括将所述属性信息保存到所述配置表的属性信息子表中,将所述值信息保存到所述配置表的值信息子表中;显示单元,用于将所述属性信息子表中的属性信息和值信息子表中的相应值信息生成列,导入实体数据表,并显示所述实体数据表。8、根据权利要求7所述的动态配置实体数据表的系统,其特征在于,所述配置表还包括以列组ID进行标识的列组信息子表;所述将所述配置表导入实体数据表具体为将所述配置表导入所述列组ID对应的实体数据表。9、根据权利要求8所述的动态配置实体数据表的系统,其特征在于,所述配置表还包括以对象ID进行标识的个性信息子表;以所述个性信息子表的对象ID对配置表中相应的对象进行编辑。10、根据权利要求7-9所述的动态配置实体数据表的系统,其特征在于,所述系统还包括校验单元,用于校验所述属性信息子表和值信息子表中的配置信息是否相对应,若是,则将所述配置信息以属性信息子表和值信息子表形式保存;若否,则保存失败。11、根据权利要求7所述的动态配置实体数据表的系统,其特征在于,所述系统还包括修改单元,用于对保存到所述配置表中的属性信息和值信息进行修改;删除单元,用于对保存到所述配置表中的属性信息和值信息进行删除;当删除属性信息时,同时删除值信息表中相应凝:据信息。全文摘要本发明公开了一种动态配置实体数据表的方法,所述方法包括获取所述实体数据表的配置信息,所述配置信息包括属性信息和值信息;将所述配置信息以配置表形式保存,包括将所述属性信息保存到所述配置表的属性信息子表中,将所述值信息保存到所述配置表的值信息子表中;将所述属性信息子表中的属性信息和值信息子表中的相应值信息生成列,导入实体数据表,并显示所述实体数据表。相应地,本发明还公开了一种动态配置实体数据表的系统。通过本发明,能够满足数据表动态属性的业务需求,当后期运行阶段需要对原始实体数据表属性变动时,避免对原始实体数据表进行繁重的二次开发。文档编号G06F17/24GK101504672SQ200910119620公开日2009年8月12日申请日期2009年3月23日优先权日2009年3月23日发明者孙海亮申请人:金蝶软件(中国)有限公司