自适应数据库变迁的通用查询系统研究

2016-05-14 22:04孙仁鹏吴聪卞光亮
软件导刊 2016年5期

孙仁鹏 吴聪 卞光亮

摘要:MIS系统的查询模块一般与数据库和业务紧耦合、不通用,不能满足一些特定的应用场景。为解决该不足,基于数据字典和用户数据字典来设计查询,并且将查询权限融入设计。查询自定义模块根据链接的数据库产品类别,定位存放查询对象和查询字段的数据字典表,翻译查询信息至用户数据字典表,然后查询模块提取翻译的查询信息,由终端用户选择和输入条件,实现灵活动态查询,并对查询结果进行统计和输出。同时,为用户动态分配权限,权限的粒度可控制到字段。系统动态链接数据库、动态生成界面、动态生成SQL、动态设置权限、动态数据处理,实现了查询的通用性和自适应数据库的变迁,实际应用效果较好。

关键词:通用查询;数据字典;查询权限;自适应数据库变迁;动态界面

DOIDOI:10.11907/rjdk.161380

中图分类号:TP392

文献标识码:A 文章编号:1672-7800(2016)005-0169-02

0 引言

MIS系统查询模块往往面向特定数据库、特定企业业务,与具体数据库应用系统紧密耦合,不通用。正是这种不通用,导致一些实际场景想查看数据就显得非常不便。比如:数据库初始化、导库已完成,想查看数据是否正确或完整;业务系统还没有正式上线,想验证封装业务的sql语句执行的结果否正确;一线员工往往无权使用企业业务系统,但是随时想查看自己每天的工作量有没有被弄错等。另外,用户可能需要根据各个属性的各种组合条件选择性地查询需要的实体属性,灵活方便查询。自适应数据库变迁的通用查询系统由于通用,难以实现丰富的个性化查询图表报表需求,但是有其应用需求,而这方面的研究并不多见。

1 研究思路

自适应数据库变迁的通用查询系统需满足通用性、灵活性和翻译性。通用性指不因查询需求的多少和改变而修改程序,不因数据库结构的改变或数据库的变迁而修改程序。灵活性指查询项由用户选择,查询条件由用户动态输入和组合,查询结果可统计、可写入Excel,查询权限的粒度可细到字段。翻译性指查询需求信息具有国际化功效,能自适应不同语言的用户。

1.1 查询sql语句与查询系统分离

显然,查询sql语句不能事先嵌入到查询程序中,因为查询系统是通用的,事先不知道查询需求和数据库情况,查询程序只是查询运行的平台。

1.2 数据字典实现通用性

数据字典记录了数据库的总体信息,包括表、视图、字段名、类型等,其维护工作也由数据库服务器自动完成。用户查询需求用视图封装,自动存放在数据字典中。当有新的查询需求时,就编写相应的视图,只不过该视图一般不含任何参数,具体参数是通过查询软件传递过来并动态构建查询sql,从视图对应的数据集中提取用户所需的子集。对于业务复杂的查询需求,即不能直接用视图来表达,可以通过业务系统或存储过程的执行,将执行结果集存于中间表中,然后再用视图封装。通过对数据字典的设计来对数据库表进行管理和控制,实现应用程序和表结构的分离,开发人员仅需在查询定义中引入完善的数据字典,即可完成系统定制查询功能。

1.3 查询翻译

数据字典中存放视图和表等数据库服务器端对象信息,也存放其对应的字段信息。从数据字典中提取查询需求(在数据库服务器端以视图和字段形式表现),动态生成查询翻译界面,翻译成用户可理解的语言,包括视图名和对应字段的翻译。查询需求和翻译的对应关系,即翻译结果保存在用户数据字典中。一个用户数据字典表存放视图、表对象和对应的翻译信息,比如视图名、视图中文名等;另一个用户数据字典表存放对应字段名和中文名。查询翻译需要操作存放对象的数据字典表和存放对象对应字段的数据字典表,对象的约束条件为视图,存放翻译结果的对应两个用户数据字典表。显然,查询翻译不是给终端用户用来查询数据,而是给了解企业数据库信息的工作者用来完成查询设置的,即将数据库中定义的查询需求信息翻译成用户可理解的语言,方便不同语言用户。

1.4 查询

查询翻译的结果是供查询程序使用。查询程序根据用户数据字典和用户选择的查询需求动态生成查询界面,根据用户选择的查询需求、字段信息和输入的查询条件(字段的精确值、模糊值和范围),再映射回用户数据字典,构建最终所需的完整SQL语句,输出查询结果。

1.5 查询结果处理

对查询结果设定汇总和统计功能,完成查询范围中数值型字段的汇总统计,实现查询结果和汇总结果写入到Excel文件中。

1.6 权限管理

基于角色—用户—权限进行权限管理,为用户分配角色,为角色分配查询项,包括分配查询对象和查询字段,不同用户登录后能够查询不同的内容。

1.7 自适应数据库变迁

JAVA的数据库访问技术JDBC可为不同关系数据库提供统一访问,通过加载不同的数据库驱动访问不同数据库产品,同时将加密数据库链接信息写入配置文件,实现自适应对不同数据库的访问。通过操作数据库元数据,获取数据库产品和版本,获取不同数据库产品存放视图和字段的数据字典信息。

2 关键实现

2.1 表设计

不同数据库产品,数据字典表名不同,下面以oracle产品为例说明。数据字典表user_objects记录了数据库对象信息,user_tab_cols记录了对象与字段的关系及字段类型。用户数据字典表tablename记录数据库服务器端视图名和供客户理解的翻译信息对应关系,比如中英文对应关系;columnname记录中英文字段对应关系、字段类型、属于哪个对象和显示顺序等信息;querycondition记录用户常用的查询,以免重复选择查询字段和输入查询条件。用户权限表role、acount、roleaccount和rolepermission用于权限管理,控制用户查询权限,权限粒度可到字段。以自定义的部分用户数据表为例说明。

2.2 数据库链接

链接模块从界面配置数据库URL信息、从配置文件读取驱动名,创建用户数据字典表和权限管理相关表,生成权限管理的Root角色和管理员账号密码,为系统作初始化配置。

2.3 查询自定义

查询自定义需要Root角色的账号,功能包括将视图翻译成用户可理解的文字信息和查询权限管理。程序从user_tab_cols表中取出视图对象,选择一个视图对象时,再从user_tab_cols表中取出对应字段名,动态显示在界面上。如果该视图名和对应的字段名已进行了中英文翻译,则在界面上显示相应的中英文翻译结果,并可修改,也可设定字段的显示顺序。可以给角色分配视图和视图中的字段,用户的权限可以细化到字段的查询。

2.4 查询

用户登录后,根据权限、所选的中文对象名(视图翻译)、中文字段名(字段翻译)和用户输入的条件,映射对应的视图名和字段名,动态构建SQL语句。根据tablename中翻译信息动态生成查询需求,根据用户选择的查询需求和columnname中翻译的信息动态生成查询界面中相应文本框、复选框、标签和日期等控件;根据用户的选择、输入和数据字典中信息,生成查询结果。字段值可精确查询,也可模式匹配查询(在文本框前后加上%),也可在一定范围内查询(在左右文本框中分别输入值)。也可将经常使用的查询信息命名保存起来,下次直接选择已有的查询设置,避免再次选择和输入查询条件。

3 结语

传统的查询模块与具体应用紧耦合,不同的数据库应用系统需独立编写,每次用户查询需求变化后都要重新编写、修改和部署查询程序。本系统是一个通用查询工具,能够自适应数据库的变迁、结构变化和查询需求变化,可对任何字段进行条件查询,权限控制粒度可到每个字段,查询结果可统计、可写入Excel文件,同时具有国际化效果,独立于具体数据库应用系统。所有变化可通过简单设置和配置来完成,方便用户数据查询,是传统查询模块的有益补充。

参考文献:

[1]王德广,张军卒,李文.基于数据字典的通用查询平台的设计[J].科学技术与工程,2009,9(19):5850-5851.

[2]任庆东,李永盛,袁文翠等.基于元数据驱动的勘探开发综合数据库通用查询系统[J].大庆石油学院学报,2010,34(6):91-92.

[3]江海龙,吴晓东,邵志骅. 公安交通管理信息系统通用查询统计模型研究与应用[J]. 交通信息与安,2014,32(4):150-151.

(责任编辑:陈福时)