一种支持表自由关联的sql生成方法和系统的制作方法

文档序号:9524304阅读:456来源:国知局
一种支持表自由关联的sql生成方法和系统的制作方法
【专利说明】一种支持表自由关联的SQL生成方法和系统
[0001]
技术领域
[0002]本发明涉及数据处理技术领域,特别涉及一种支持表自由关联的SQL生成方法和系统。
[0003]
【背景技术】
[0004]现有技术中,对数据进行分析可以提高企业的管理和业务精确度,实现精细化管理。为了便于业务人员进行数据分析,因此很多企业通常会采用SQL自动生成技术和宽表设计来降低取数难度、提高取数的效率;这样业务人员不用编写SQL,仅使用鼠标选择需要的字段和约束条件就能自动生成对应的SQL语句,从预定的宽表中获取到所需的数据。这样可以使得不懂数据库技术的业务人员可以自行完成操作和数据分析,提高系统的易用度。
[0005]但是这种技术也存在着局限性,主要表现在:随着业务增加,数据库中会用多个宽表来满足不同的应用。随着宽表数量的增加,表间的关系也会变得很复杂。如果系统生成的SQL语句不支持表关联,那么用户只能从单一宽表中获取数据,这就不够灵活,难以满足用户的大部分取数需求。因此现有技术中都需要在宽表间进行自由关联,而这种关联需要预先进行大量的配置以将所有宽表之间的两两关联的关联规则都定义出来。这样在有η个宽表的数据库中就需要预先配置η*(η-1)/2条关联规则。特别是当宽表之间的关联关系发生变化时,配置难度就会变为η的二次方级别,所需要的维护量非常大。同时,在有多个宽表需要进行关联时,很难确定那宽表之间的关联顺序导致很难实现宽表之间的自由关联;例如需要对A、B、C三个宽表尽心关联时,程序很难判断到底是应该那两个表首先进行关联:到底是应该A、Β先关联,还是A、C先关联,还是B、C先关联?

【发明内容】

[0006]为解决这些问题,本发明提供了一种支持表自由关联的SQL生成方法,通过提出一种分冶式的关联算法来实现宽表之间的自由关联。
[0007]为达到上述目的,本发明的具体技术方案是这样实现的:一种支持表自由关联的SQL生成方法,包括:
步骤1、将所有宽表进行分组以生成至少两个宽表组,其中每一宽表组内的宽表都具有相同的主键,且宽表组之间有一对一或一对多的外键关系;并每一组中具有最大完整度的宽表作为组长,其他宽表作为组员;获取用户输入以确定所述用户输入所涉及的宽表,并根据每一宽表确定其所对应的宽表组;
步骤2、将所述涉及的宽表的组长作为主表,且所述涉及的宽表作为附表,依照主键关系作为关联条件以依次进行左外联接,形成组内关联; 步骤3、根据每一宽表组组长的关联优先级进行排序后,依照外键关系作为关联条件后对各个宽表组依次进行左外联接,形成组间关联;
步骤4、根据关联结果获取可执行语句。
[0008]其中,所述方法还包括:
对表达式进行封装,以将一个或多个字段组合封装起来作为一个字段元素;
对约束条件进行封装,以使一个或多个字段的常用约束条件封装起来作为一个条件元素。
[0009]其中,所述步骤4具体包括:获取用户选择的表达式和约束条件,并将所述表达式和约束条件通过预设的SQL语句模板转换为可执行的SQL语句。
[0010]其中,所述方法还包括:
为所述宽表的每个特征型字段设置字典表以使用户能够基于所述字典表进行选择;
为所述宽表的每个度量型字段设置值域以使用户能够基于所述值域进行选择;
为每一宽表设置一个主键。
[0011 ] 其中,所述步骤4具体包括:
根据组内关联和组间关联填充到SQL语句模板中得到用于建立组内关联和组间关联的FROM和JOIN子句;
根据用户输入的封装填充到SQL语句模板中得到SELECT和WHERE子句;
按照预设的SQL模板,将FROM、JOIN、SELECT、WHERE子句拼装起来以获取可以执行的SQL语句。
[0012]进一步的,本发明实施例还提出了一种支持表自由关联的SQL生成系统,包括: 分组模块,用于将所有宽表进行分组以生成至少两个宽表组,其中每一宽表组内的宽表都具有相同的主键,且宽表组之间有一对一或一对多的外键关系;并每一组中具有最大完整度的宽表作为组长,其他宽表作为组员;获取用户输入以确定所述用户输入所涉及的宽表,并根据每一宽表确定其所对应的宽表组;
组内关联模块,用于将所述涉及的宽表的组长作为主表,且所述涉及的宽表作为附表,依照主键关系作为关联条件以依次进行左外联接,形成组内关联;
组间关联模块,用于根据每一宽表组组长的关联优先级进行排序后,依照外键关系作为关联条件后对各个宽表组依次进行左外联接,形成组间关联;
填充模块,用于根据关联结果获取可执行语句。
[0013]其中,所述系统还包括:
封装模块,用于对表达式进行封装,以将一个或多个字段组合封装起来作为一个字段元素;
还用于对约束条件进行封装,以使一个或多个字段的常用约束条件封装起来作为一个条件元素。
[0014]其中,所述系统还包括:
底层映射模块,用于获取用户选择的表达式和约束条件,并将所述表达式和约束条件通过预设的SQL语句模板转换为可执行的SQL语句。
[0015]其中,所述系统还包括:
配置解析模块,用于为所述宽表的每个特征型字段设置字典表以使用户能够基于所述字典表进行选择;还用于为所述宽表的每个度量型字段设置值域以使用户能够基于所述值域进行选择;还用于为每一宽表设置一个主键。
[0016]其中,所述填充模块具体包括:
根据组内关联和组间关联填充到SQL语句模板中得到用于建立组内关联和组间关联的FROM和JOIN子句;
根据用户输入的封装填充到SQL语句模板中得到SELECT和WHERE子句;
按照预设的SQL模板,将FROM、JOIN、SELECT、WHERE子句拼装起来以获取可以执行的SQL语句。
[0017]
本发明实施例提供的技术方案带来的有益效果是:本发明实施例提出的方法,利用分冶式的关联算法将数据库中的η个宽表,根据关系的密切程度(例如主键一致)划分成m个组,这样就把配置复杂度降低到了 n+m2。由于m是远远小于η的,所以复杂度就约等于n,这样维护的难度就大大降低了,就能比较容易的实现表关联。
[0018]
【附图说明】
[0019]图1为本发明实施例的方法流程图;
图2为本发明实施例中关联语句的生成装置的示意图;
图3为本发明实施例中宽表关联的方法流程图;
图4为本发明实施例中封装元素填充过程的流程图。
[0020]
【具体实施方式】
[0021]本发明的核心思想是:利用分冶的思想,将一个大问题切分为若干个小问题,分别解决,这样可以有效降低问题的复杂度,从而完成宽表的自由关联。通过提出一种分冶式的关联算法,将数据库中的η个宽表,根据关系的密切程度(主键一致),划分成m个组,这样就把配置复杂度降低到了 n+m2,由于m是远远小于η的,所以复杂度就约等于n,这样维护的难度就大大降低了,就能比较容易的实现表关联。
[0022]本发明实施例提供了一种支持表自由关联的SQL生成方法,其流程如图1所示,包括:
为达到上述目的,本发明的具体技术方案是这样实现的:一种支持表自由关联的SQL生成方法,包括:
步骤1、将所有宽表进行分组以生成至少两个宽表组,其中每一宽表组内的宽表都具有相同的主键,且宽表组之间有一对一或一对多的外键关系;并每一组中具有最大完整度的宽表作为组长,其他宽表作为组员;获取用户输入以确定所述用户输入所涉及的宽表,并根据每一宽表确定其所对应的宽表组;
步骤2、将所述涉及的宽表的组长作为主表,且所述涉及的宽表作为附表,依照主键关系作为关联条件以依次进行左外联接,形成组内关联;
步骤3、根据每一宽表组组长的关联优先级进行排序后,依照外键关系作为关联条件后对各个宽表组依次进行左外联接,形成组间关联;
步骤4、根据关联结果获取可执行语句。
[0023]其中,所述方法还包括:
对表达式进行封装,以将一个或多个字段组合封装起来作为一个字段元素;
对约束条件进行封装,以使一个或多个字段的常用约束条件封装起来作为一个条件元素。
[0024]其中,所述步骤4具体包括:获取用户选择的表达式和约束条件,并将所述表达式和约束条件通过预设的SQL语句模板转换为可执行的SQL语句。
[0025]其中,所述方法还包括:
为所述宽表的每个特征型字段设置字典表以使用户能够基于所述字典表进行选择;
为所述宽表的每个度量型字段设置值域以使用户能够基于所述值域进行选择;
为每一宽表设置一个主键。
[0026]其中,所述步骤4具体包括:
根据组内关联和组间关联填充到SQL语句模板中得到用于建立组内关联和组间关联的FROM和JOIN子句;
根据用户选择的字段元素和条件元素填充到SQL语句模板中得到SELECT和WHERE子句;
按照预设的SQL模板,将FROM、JOIN、SELECT、WHERE子句拼装起来以获取可以执行的SQL语句。
[0027]进一步的,本发明实施例还提出了一种支持表自由关联的SQL生成系统,包括: 分组模块,用于将所有宽表进行分组以生成至少两个宽表组,其中每一宽表组内的宽表都具有相同的主键,且宽表组之间有一对一或一对多的外键关系;并每一组中具有最大完整度的宽表作为组长,其他宽表作为组员;获取用户输入以确定所述用户输入所涉及的宽表,并根据每一宽表确定其所对应的宽表组;
组内关联模块,用于将所述涉及的宽表的组长作为主表,且所述涉及的宽表作为附表,依照主键关系作为关联条件以依次进行左外联接,形成组内关联;
组间关联模块,用于根据每一宽表组组长的关联优先级进行排序后,依照外键关系作为关联条件后对各个宽表组依次进行左外联接,形成组间关联;
填充模块,用于根据关联结果获取可执行语句。
[0028]其中,所述系统还包括:
封装模块,用于对表达式进行封装,以将一个或多个字段组合封装起来作为一个字段元素;
还用于对约束条件进行封装,以使一个或多个字段的常用约束条件封装起来作为一个条件元素。
[0029]其中,所述系统还包括:
底层映射模块,用于获取用户选择的表达式和约束条件,并将所述表达式和约束条件
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1