CN110109951B - 一种关联查询的方法、数据库应用***及服务器 - Google Patents
一种关联查询的方法、数据库应用***及服务器 Download PDFInfo
- Publication number
- CN110109951B CN110109951B CN201711487511.0A CN201711487511A CN110109951B CN 110109951 B CN110109951 B CN 110109951B CN 201711487511 A CN201711487511 A CN 201711487511A CN 110109951 B CN110109951 B CN 110109951B
- Authority
- CN
- China
- Prior art keywords
- connection model
- query
- query statement
- connection
- target
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2452—Query translation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
- G06F16/24535—Query rewriting; Transformation of sub-queries or views
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24553—Query execution of query operations
- G06F16/24558—Binary matching operations
- G06F16/2456—Join operations
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供了一种关联查询的方法、数据库应用***及服务器,简化了关联查询语句的构建难度,使得查询方便。本申请实施例方法包括:获取待查询数据及连接模型库,连接模型库包括至少一个连接模型,连接模型由至少两个原始表之间的关联关系定义得到;根据待查询数据构建第一查询语句,根据第一查询语句从连接模型库中得到目标连接模型,目标连接模型至少为一个;根据目标连接模型,将第一查询语句转换为第二查询语句,第二查询语句为数据库管理***的专用语言,数据库管理***用于管理存储有至少两个原始表的数据库;根据第二查询语句查询数据库管理***得到查询结果。
Description
技术领域
本申请涉及计算机领域,尤其涉及一种关联查询的方法、数据库应用***及服务器。
背景技术
在数据库应用***(Database Application System,DBAS)中,多个表之间往往会有各种各样的关系,常见的有通过主键和外键描述的关系;也有由数据库应用***保证一致性和完整的弱关系。DBAS往往需要把各表中有关系的数据查询出来,同时会对各个所查询的表设置过滤条件,每个表的过滤条件往往又有相互约束的关系。当DBAS需要到数据库查询某个对象时,需要构造数据库管理***(Database Management System,DBMS)提供的领域专用语言(Domain Specific Language,DDL)语句,例如结构化查询语言(StructuredQuery Language,SQL)语句,由于各种对象均保存在各自不同的表中,因此在查询对象时构造出来的查询语句会很复杂,影响了查询效率。
第一种查询方法是DBAS利用各个表之间的关联关系构造查询语句,例如,通过JOIN子句构造多表关联查询的SQL语句,并且在构建SQL语句时,需要考虑查询结果是否会有重复记录来确实是否需要使用DISTINCT关键字。
第二种查询方法是DBAS利用各个表之间的关联关系,将关联的表通过子查询嵌套连接起来,构造查询语句,例如,在WHERE子句中使用EXISTS、IN等子查询构造SQL语句。
第三种查询方法是DBAS将需要进行关联查询的表及其关联关系定义成数据库视图,查询此视图。
但是,以上第一种查询方法中DBAS和表结构及表数据的耦合性都较大,即在各个表的关联关系变化时,DBAS也必须联动修改,并且查询结果是否会有重复记录,也需要根据表数据的多重性来判断;第二种查询方法同样存在DBAS和表结构的耦合性较大的问题,并且需要将关联的表通过子查询嵌套连接起来,查询语句将非常复杂;第三种查询方法如果关联的表组合较多时,需要定义很多的数据库视图,并且数据库视图不允许DBAS指定视图中WHERE子句中的子查询过滤条件,而且存在DBAS和表数据的耦合性较大的问题。因此,以上三种查询方法都使得DBAS的多表关联查询语句构造难,查询不方便。
发明内容
本申请提供了一种关联查询的方法、数据库应用***及服务器,简化了关联查询语句的构建难度,使得查询方便。
本申请第一方面提供一种关联查询的方法,包括:
获取待查询数据及连接模型库,所述连接模型库包括至少一个连接模型,所述连接模型由至少两个原始表之间的关联关系定义得到;
根据所述待查询数据构建第一查询语句,根据所述第一查询语句从所述连接模型库中得到目标连接模型,所述目标连接模型至少为一个;
根据所述目标连接模型,将所述第一查询语句转换为第二查询语句,所述第二查询语句为数据库管理***的专用语言,所述数据库管理***用于管理存储有所述至少两个原始表的数据库;
根据所述第二查询语句查询所述数据库管理***得到查询结果。
当用户需要通过DBAS查询某个数据时,在DBAS上输入待查询数据,DBAS从连接模型存储库或者连接模型配置文件中获取到连接模型库,连接模型库包括至少一个连接模型,连接模型是由DBAS根据至少两个原始表之间的关联关系定义得到,由于原始表中是包括有各种数据的,而在某些原始表中包括有待查询数据,而DBAS根据待查询数据从连接模型库中查询到具有待查询数据的连接模型,那么根据待查询数据构建第一查询语句,第一查询语句实际上就是查询连接模型的查询语句,查询语句是DSL语言,具体可以是SQL语言,根据第一查询语句从连接模型库中得到目标连接模型,由于具有待查询数据的原始表可能存在与多个原始表中,而多个原始表均有连接模型,那么目标连接模型也可以为多个,所有的原始表都是存储在DBMS管理存储的DB中的,那么查询实际上是由DBMS来执行,而第一查询语句只是基于连接模型查询的语句,那么还需要将第一查询语句转换为DBMS支持的第二查询语句,因此,DBAS还需要根据目标连接模型,按照当初定义目标连接模型的规范将第一查询语句转换为DBMS可执行的第二查询语句,得到第二查询语句后将,将第二查询语句提交给DBMS,DBMS根据第二查询语句进行查询,得到查询结果,之后再将查询结果返回给DBAS,由于DBAS预先将多个表之间的关联关系包装为了连接模型,那么可以使用类似查询单表的第一查询语句直接查询得到目标连接模型,使得DBAS从复杂的查询语句构建中解放出来;而且支持数据库视图所不支持的由子查询进行的表关联同时允许指定子查询的过滤条件;并且根据目标连接模型,将第一查询语句转换为第二查询语句,使得第二查询语句可以在现有的DBMS上执行,与上述的第一种查询方法、第二种查询方法和第三种查询方式相比,简化了关联查询语句的构建难度,使得查询方便。
结合本申请第一方面,本申请第一方面第一实施方式中,所述获取待查询数据及连接模型库之前,还包括:
获取至少两个原始表的表信息,所述表信息包括表标识及表字段;
根据所述至少两个原始表的关联关系建立至少一个连接模型,每一个连接模型包括连接模型基本信息、连接模型属性及表关系,所述连接模型基本信息包括连接模型标识及连接模型名称,所述连接模型属性包括属性标识、属性名称、对应的原始表的表标识及表字段,所述表关系包括表关系标识、各原始表的表标识、相邻原始表的连接方式及连接表达式;
根据所述至少一个连接模型得到连接模型库;
将所述连接模型库存储至连接模型存储库;
或,
根据所述连接模型库得到连接模型配置文件。
获取至少两个原始表的表信息,表信息包括表标识及表字段,根据至少两个原始表的关联关系建立至少一个连接模型,每一个连接模型包括连接模型基本信息、连接模型属性及表关系,连接模型基本信息包括连接模型标识及连接模型名称,连接模型属性包括属性标识、属性名称、对应的原始表的表标识及表字段,表关系包括表关系标识、各原始表的表标识、相邻原始表的连接方式及连接表达式,连接模型建立的方式可以通过连接模型存储库或连接模型配置文件等形式保存。经过包装,DBAS将连接模型看做一个表或视图构造第一查询语句,不必关心连接模型其内部的组成。
结合本申请第一方面第一实施方式,本申请第一方面第二实施方式中,所述获取待查询信息及连接模型库,包括:
接收用户输入的待查询数据;
从连接模型存储库获取连接模型库;
或,
接收连接模型配置文件,从所述连接模型配置文件解析得到连接模型库。
在通过以上实施例建立了连接模型库后,在DBAS接收到用户输入的待查询数据后,可以从连接模型存储库中获取连接模型库,也可以通过接收连接模型配置文件,从连接模型配置文件解析得到连接模型库,具体的获取方式不做限定。
结合本申请第一方面第二实施方式,本申请第一方面第三实施方式中,所述根据所述待查询数据构建第一查询语句,根据所述第一查询语句从所述连接模型库中得到目标连接模型,包括:
根据所述待查询数据构建第一查询语句;
根据所述第一查询语句中查询所述连接模型库中的每一个连接模型;
当查询的连接模型的连接模型属性中对应的原始表的表字段中具有所述待查询数据时,确定所述查询的连接模型为目标连接模型,所述目标连接模型至少为一个。
根据待查询数据构建第一查询语句,第一查询语句是对连接模型进行查询的语句,具体可以为SQL,根据第一查询语句中查询连接模型库中的每一个连接模型,当查询的连接模型的连接模型属性中对应的原始表的表字段中具有待查询数据时,表明该连接模型中是具有待查询数据的原始表的,那么确定该连接模型为目标连接模型,目标连接模型至少为一个。
结合本申请第一方面、第一方面第一实施方式、第一方面第二实施方式或第一方面第三实施方式,本申请第一方面第四实施方式中,所述根据所述目标连接模型,将所述第一查询语句转换为第二查询语句,包括:
判断所述第一查询语句是否为数据库管理***的专用语言;
若是,则根据所述目标连接模型,对所述第一查询语句进行展开,得到第二查询语句;
若否,则根据所述目标连接模型,对所述第一查询语句进行翻译,得到第二查询语句。
在将第一查询语句转换为第二查询语句的时候,还需要确定第一查询语句是否就是为DBAS所支持的专用语言,例如DBAS支持的为SQL,而第一查询语句就是SQL,那么表明第一查询语句为数据库管理***的专用语言,此时,只需要对第一查询语句进行展开即可,而如果DBAS所支持的专用语言不是SQL,而第一查询语句是SQL,那么就需要按照特定的转换方式,将第一查询语句进行翻译,得到第二查询语句,具体的翻译规则是根据DBAS所支持的专用语言而定的,不做具体说明。
结合本申请第一方面第四实施方式,本申请第一方面第五实施方式中,所述根据所述目标连接模型,对所述第一查询语句进行展开,得到第二查询语句,包括:
确定所述目标连接模型中具有所述待查询数据的目标原始表的表标识和表字段,所述目标原始表至少为一个;
确定所述目标原始表的顺序,得到表集合;
根据所述表集合及所述目标连接模型中的表关系,将所述第一查询语句展开为第二查询语句。
由于目前各种DBMS均不支持连接模型,而查询又必须由DBMS来完成,因此需要将查询SQL(或其他查询DSL)展开并翻译为DBMS支持的SQL,再交由DBMS查询并获得结果。一个查询语句可以只查一个连接模型,也可以同时查询多个连接模型和其他表。当同时查询多个连接模型或其他表时,为减少其他表对展开逻辑的影响,可以将SQL中FROM或JOIN子句等出现连接模型的地方替换为对连接模型的子查询,得到一个与输入的SQL等效的SQL,展开动作在此子查询中进行即可。
本申请第二方面提供一种数据库应用***,包括:
获取模块,用于获取待查询数据及连接模型库,所述连接模型库包括至少一个连接模型,所述连接模型由至少两个原始表之间的关联关系定义得到;
查询模块,用于根据所述待查询数据构建第一查询语句,根据所述第一查询语句从所述连接模型库中得到目标连接模型,所述目标连接模型至少为一个;
查询语句转换模块,还用于根据所述目标连接模型,将所述第一查询语句转换为第二查询语句,所述第二查询语句为数据库管理***的专用语言,所述数据库管理***用于管理存储有所述至少两个原始表的数据库;
所述查询语句转换模块,还用于根据所述第二查询语句查询所述数据库管理***得到查询结果。
由于DBAS预先将多个表之间的关联关系包装为了连接模型,那么获取模块获取待查询数据及连接模型库之后,查询模块可以使用类似查询单表的第一查询语句直接查询得到目标连接模型,使得DBAS从复杂的查询语句构建中解放出来;而且支持数据库视图所不支持的由子查询进行的表关联同时允许指定子查询的过滤条件;并且查询语句转换模块根据目标连接模型,将第一查询语句转换为第二查询语句,使得第二查询语句可以在现有的DBMS上执行,与上述的第一种查询方法、第二种查询方法和第三种查询方式相比,简化了关联查询语句的构建难度,使得查询方便。
结合本申请第二方面,本申请第二方面第一实施方式中,所述数据库应用***还包括:
连接模型构建模块,用于获取至少两个原始表的表信息,所述表信息包括表标识及表字段;
所述连接模型构建模块,还用于根据所述至少两个原始表的关联关系建立至少一个连接模型,每一个连接模型包括连接模型基本信息、连接模型属性及表关系,所述连接模型基本信息包括连接模型标识及连接模型名称,所述连接模型属性包括属性标识、属性名称、对应的原始表的表标识及表字段,所述表关系包括表关系标识、各原始表的表标识、相邻原始表的连接方式及连接表达式;
所述连接模型构建模块,还用于根据所述至少一个连接模型得到连接模型库;
所述连接模型构建模块,还用于将所述连接模型库存储至连接模型存储库;
或,
所述连接模型构建模块,还用于根据所述连接模型库得到连接模型配置文件。
连接模型构建模块获取至少两个原始表的表信息,表信息包括表标识及表字段,根据至少两个原始表的关联关系建立至少一个连接模型,每一个连接模型包括连接模型基本信息、连接模型属性及表关系,连接模型基本信息包括连接模型标识及连接模型名称,连接模型属性包括属性标识、属性名称、对应的原始表的表标识及表字段,表关系包括表关系标识、各原始表的表标识、相邻原始表的连接方式及连接表达式,连接模型建立的方式可以通过连接模型存储库或连接模型配置文件等形式保存。经过包装,DBAS将连接模型看做一个表或视图构造第一查询语句,不必关心连接模型其内部的组成。
结合本申请第二方面第一实施方式,本申请第二方面第二实施方式中,
所述获取模块,具体用于接收用户输入的待查询信息,所述待查询信息包括待查询数据及查询条件;
所述获取模块,还用于从连接模型存储库获取连接模型库;
或,
所述获取模块,还用于接收连接模型配置文件,从所述连接模型配置文件解析得到连接模型库。
结合本申请第二方面第二实施方式,本申请第二方面第三实施方式中,
所述查询模块,具体用于根据所述待查询数据及所述查询条件构建第一查询语句;
所述查询模块,还用于根据所述第一查询语句中查询所述连接模型库中的每一个连接模型;
所述查询模块,还用于当查询的连接模型的连接模型属性中对应的原始表的表字段中具有所述待查询数据时,确定所述查询的连接模型为目标连接模型,所述目标连接模型至少为一个。
在连接模型构建模块通过以上实施例建立了连接模型库后,在获取模块接收到用户输入的待查询数据后,可以从连接模型存储库中获取连接模型库,也可以通过接收连接模型配置文件,从连接模型配置文件解析得到连接模型库,具体的获取方式不做限定。
结合本申请第二方面、第二方面第一实施方式、第二方面第二实施方式或第二方面第三实施方式,本申请第二方面第四实施方式中,
所述查询语句转换模块,还用于判断所述第一查询语句是否为数据库管理***的专用语言;
所述查询语句转换模块,还用于当所述第一查询语句为所述数据库管理***的专用语言时,根据所述目标连接模型,对所述第一查询语句进行展开,得到第二查询语句;
所述查询语句转换模块,还用于当所述第一查询语句不是所述数据库管理***的专用语言时,根据所述目标连接模型,对所述第一查询语句进行翻译,得到第二查询语句。
查询模块根据待查询数据构建第一查询语句,第一查询语句是对连接模型进行查询的语句,具体可以为SQL,查询模块根据第一查询语句中查询连接模型库中的每一个连接模型,当查询的连接模型的连接模型属性中对应的原始表的表字段中具有待查询数据时,表明该连接模型中是具有待查询数据的原始表的,那么查询模块602确定该连接模型为目标连接模型,目标连接模型至少为一个。
结合本申请第二方面第四实施方式,本申请第二方面第五实施方式中,
所述查询语句转换模块,还用于确定所述目标连接模型中具有所述待查询数据的目标原始表的表标识和表字段,所述目标原始表至少为一个;
所述查询语句转换模块,还用于确定所述目标原始表的顺序,得到表集合;
所述查询语句转换模块,还用于根据所述表集合及所述目标连接模型中的表关系,将所述第一查询语句的表达式列表转换为第二查询语句。
查询语句转换模块在将第一查询语句转换为第二查询语句的时候,还需要确定第一查询语句是否就是为DBAS所支持的专用语言,例如DBAS支持的为SQL,而第一查询语句就是SQL,那么表明第一查询语句为数据库管理***的专用语言,此时,只需要对第一查询语句进行展开即可,而如果DBAS所支持的专用语言不是SQL,而第一查询语句是SQL,那么就需要按照特定的转换方式,将第一查询语句进行翻译,得到第二查询语句。
本申请第三方面提供一种服务器,包括:
处理器及存储器,其中,所述存储器可以用于存储所述处理器执行的代码;
所述处理器及所述存储器通过总线***连接;
所述处理器,用于获取待查询数据及连接模型库,所述连接模型库包括至少一个连接模型,所述连接模型由至少两个原始表之间的关联关系定义得到;
所述处理器,用于根据所述待查询数据构建第一查询语句,根据所述第一查询语句从所述连接模型库中得到目标连接模型,所述目标连接模型至少为一个;
所述处理器,还用于根据所述目标连接模型,将所述第一查询语句转换为第二查询语句,所述第二查询语句为数据库管理***的专用语言,所述数据库管理***用于管理存储有所述至少两个原始表的数据库;
所述处理器,还用于根据所述第二查询语句查询所述数据库管理***得到查询结果。
由于目前各种DBMS均不支持连接模型,而查询又必须由DBMS来完成,因此查询语句转换模块需要将查询SQL(或其他查询DSL)展开为DBMS支持的SQL,再交由DBMS查询并获得查询结果。
本申请的第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述各方面所述的方法。
本申请的第五方面提供一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述各方面所述的方法。
附图说明
为了更清楚地说明本申请实施例技术方案,下面将对实施例和现有技术描述中所需要使用的附图作简单地介绍。
图1为本申请提供的***构架示意图;
图2为本申请提供的表结构和关系示意图;
图3为本申请提供的将数据转换为SQL语句的WHERE子句的方法示意图;
图4为本申请提供的关联查询的方法的一个实施例的流程示意图;
图5为本申请建立的连接模型的元模型的示意图;
图6为本申请提供的数据库应用***的一个实施例的结构示意图;
图7为本申请提供的数据库应用***的另一个实施例的结构示意图;
图8为本申请提供的服务器的一个实施例的结构示意图。
具体实施方式
本申请提供了一种关联查询的方法、数据库应用***及服务器,简化了关联查询语句的构建难度,使得查询方便。
下面将结合本申请中的附图,对本申请中的技术方案进行清楚、完整地描述。
首先简单介绍本申请应用的***构架或场景。
本申请的***架构图如图1所示,包括DBMS及DBAS,DBAS包括查询模块、连接模型库、查询语句展开与翻译。DBMS:是一种操纵和管理数据库(Database,DB)的大型软件,用于建立、使用和维护DB,它对DB进行统一的管理和控制,以保证DB的安全性和完整性。DB是按照数据结构来组织、存储和管理数据的仓库。DBAS:是在DBMS支持下建立的计算机应用***。SQL语言是一种特殊目的计算机编程语言,用于数据库中的标准数据查询语言。DSL语言是专门针对某一特定问题的计算机语言,例如,SQL就是DSL的一个特例,是针对数据库领域的语言。数据查询特指DBAS通过DBMS从DB中获取符合条件的数据。一般DBAS通过SQL语句(也可以是DBMS提供的其他DSL)描述查询要求。
查询模块:DBAS需要从DB查询数据的模块。传统DBAS中,此模块直接构造DBMS的查询DSL,并向DBMS发起查询和获得结果。本申请中,此模块基于连接模型构造查询DSL,将DSL提交给“查询语句展开与翻译”模块。
连接模型库:保存并负责维护DBAS中定义的连接模型。具体连接模型的定义由DBAS实际提供的业务完成。
查询DSL展开与翻译:负责将来自查询模型的查询DSL(一般是SQL)根据连接模型的定义,展开并翻译为DBMS支持的查询DSL(一般是SQL),将这些DSL提交给DBMS进行查询并获取结果,将结果返回给查询模块。
在目前的DBAS中,多个表之间往往会有各种各样的关系,常见的有通过主键和外键描述的关系;也有由应用自己保证一致性和完整的弱关系。DBAS往往需要把各表中有关系的数据查询出来,同时会对各个所查询的表设置过滤条件,每个表的过滤条件往往又有相互约束的关系。典型地,基于配置管理数据库(Configuration Management Database,CMDB)的DBAS(例如故障管理(Fault management,FM)、性能管理(PerformanceManagement,PM)等)经常有这样的用法。CDMB为存储与管理企业信息技术(InformationTechnology,IT)架构中设备的各种配置信息,它与所有服务支持和服务交付流程都紧密相联,支持这些流程的运转、发挥配置信息的价值,同时依赖于相关流程保证数据的准确性。FM指***出现异常情况下的管理操作,是用来动态地维持网络正常运行并达到一定的服务水平的一系列活动。PM指评估***资源的运行状况及通信效率等***性能,其能力包括监视和分析被管网络及其所提供服务的性能机制。
进行一个业务场景的举例:FM业务中,根据告警产生对象某属性的值和告警级别筛选告警。如筛选所有10GE网口产生的严重级别告警。告警和对象分别保存在两个表;告警表中有字段保存告警产生对象的ID。PM业务中,在对象关系树上勾选各层次的对象作为某个PM报表的对象,例如在结构为Province(省)-City(市)-BSC(基站控制器)-BTS(基站)-Cell(小区)对象树上勾选任意层次上的任意对象。Cell为网络中一个基本的无线覆盖区域。基站(Base Transceiver StatioBTS)也称基站收发信台,控制一组Cell。:基站控制器(Base Station Controller,BSC),控制一组BTS。
以PM业务的场景作为例子,在此场景中,Province、City、BSC、BTS、Cell对象分别保存在各个表。Province与City之间的关系由City的外键表示。同样的,BSC与BTS的关系以及BTS与Cell的关系也是如此。不同的是,City与BSC的关系由City_BSC_Relation这个表来描述,用以描述多对多的关系。此表的每一条记录用于表示一个City和BSC的关系。完整的表结构和关系如图2所示。在图2中,City与BSC之间通过City_BSC_Relation来关联,以实现多对多的关联关系。即一个City对象可以关联多个BSC对象,一个BSC对象可以被多个City对象关联。PM业务允许在通过图2所示的表描述的对象关系树上勾选各层次的对象(比如根据对象的名称勾选),将所勾选的对象的Cell对象作为某个报表需要输出性能指标数据的对象。假设选择结果如下表1所示,
表1
实际使用过程中,对象是会发生变化的(如增加子对象等)。为了实现某个被选择的对象下增加新的子对象时,新增的子对象也会被选中的效果,一般不会直接保存当时选中的各个具体对象,而是将选择情况保存下来,在需要使用具体对象的时候根据目前的对象进行查询。DBAS通过保存主动选择和被动选择的对象来保存对象选择情况时,只需要保存主动选择的对象和主动排除的对象及这些对象所在的位置即可,不需要保存被动选择和被动排除的对象(子对象有主动选择和被动选择的需要保存以表示子对象的位置)。以以上表1所示为例,保存的数据如下表2所示,
表2
当DBAS根据以上勾选情况到数据库查询Cell对象时,需要构造相应的SQL语句,也可以构造DBMS提供的其他DSL语句。简单起见,以SQL作为DBMS的查询DSL进行描述。由于各种对象均保存在各自不同的表中,因此构造SQL语句会很复杂。为简化问题,现假设SQL语句中已经描述了表之间的关联,重点描述如何根据先前保存的对象选择情况构造SQL语句中的对象过滤条件。可以使用如图3的方法将对象选择情况的数据(如表2)转换为SQL语句的WHERE子句。此方法并不需要知道保存各类对象的表之间如何关联。
在图3中“生成相等表达式”具体过程为:
对当前对象生成一个表达式:对象所在表.名称字段=对象名称;
该表达式与其子对象的表达式(如果存在)使用OR逻辑关系连接;
该表达式及其子对象表达式构造的表达式与当前层其他对象及各自子对象表达式构成的表达式使用OR逻辑关系连接。
在图3中“生成不等表达式”具体过程为:
对当前对象生成一个表达式:对象所在表.名称字段<>对象名称;
该表达式与其子对象的表达式使用AND逻辑关系连接;
该表达式及其子对象表达式构造的表达式与当前层其他对象及各自子对象表达式构成的表达式使用AND逻辑关系连接。
按图3所示的方法将上表2转换得到SQL的WHERE子句,如下:
以上的语句意在查询符合如下条件的cell对象:
广东省下的cell中,符合如下条件的cell:
深圳市以外其他市下的cell;
和名称为ShenzhenBTS31的BTS下的cell;
和名称为ShenzhenCell332的cell;
和江苏省下的cell中,符合如下条件的cell:
名称为NanjingBSC3的BSC下的cell;
和名称为NanjingBTS31的BTS下的cell;
和名称为NanjingBTS33的BTS下名称不为NanjingCell332和NanjingCell333的cell。
也有其他SQL与上述SQL等效,或者有其他算法生成以上SQL或与之等效的SQL。本文只是拿以上SQL辅助说明本申请。实际情况下,类似以上的SQL语句是不能直接被DBMS执行的,而实际可以被DBMS执行的SQL语句很复杂。如何保存对象选择情况及如何将对象选择转换为以上SQL语句不是本申请的重点。本申请旨在能够让数据库应用通过构造上述相对简单的SQL来实现查询。
目前最常用的第一种查询方式是通过JOIN子句构造多表关联查询的SQL语句,一种可能的写法如下:
select distinct cell.id--使用distinct关键字,避免同一个cell对象在结果中出现多次。
from cell--需要查的对象所在表cell。
join bts on bts.id=cell.bts--关联与cell相邻的bts表。
join bsc on bsc.id=bts.bsc--关联与bts相邻的bsc表。
join city_bsc_relation on city_bsc_relation.bsc=bsc.id--由于bsc与city之间通过city_bsc_relation关系表关联,因此需要先关联该关系表。
join city on city.id=city_bsc_relation.city--关联关系表另一头的city表。
join province on province.id=city.province--关联与city相邻的province表。
第一种查询方式存在缺点为:SQL是直接基于数据库表构造的,必须将各个表之间的连接方式(例如INNER JOIN、LEFT JOIN、RIGHT JOIN等)以及各个表之间关联的字段(如bts.id=cell.bts、bsc.id=bts.bsc等)在SQL中描述出来,一旦表关系变化,查询模块需要联动修改,并且在构造SQL语句时,需要根据查询结果是否会有重复记录来确定是否需要使用DISTINCT关键字,即DBAS与表数据耦合较大。
目前第二种查询方式为在WHERE子句中使用EXISTS、IN等子查询构造SQL语句。一种可能的写法如下:
根据以上写法分析,第二种查询方法与第一查询方法相比SQL不会查到重复的数据。第二种查询方法缺点在于:SQL也是直接基于数据库表构造的,因此必须将各个表之间的连接方式(如EXISTS、IN等子查询)以及各个表之间关联的字段(如bts.id=cell.bts、bsc.id=bts.bsc等)在SQL中描述出来,即DBAS与表结构耦合较大,而且由于需要将关联的表通过子查询嵌套连接起来,因此使用此技术构造的SQL会有很长的WHERE子句,SQL构建困难,容易出错。
目前第三种查询方式为基于第一种查询方法的基础上,将需要进行关联查询的表及其关联关系定义成数据库视图,创建数据库视图的SQL语句如下:
create view province_to_cell--整个视图定义不包含WHERE子句。
as
select--将需要查询的字段和需要作为查询条件的字段写到SELECT子句中。
province.name as province_name,
city.name as city_name,
bsc.name as bsc_name,
bts.name as bts_name,
cell.name as cell_name,
cell.id as cell_id
from cell
join bts on bts.id=cell.bts
join bsc on bsc.id=bts.bsc
join city_bsc_relation on city_bsc_relation.bsc=bsc.id
join city on city.id=city_bsc_relation.city
join province on province.id=city.province
基于以上SQL语句定义好的数据库视图构造的SQL语句如下:
select distinct cell_id--使用distinct关键字,避免同一个cell对象在结果中出现多次。
from province_to_cell_view--查询名为province_to_cell_view的视图。
where--WHERE子句将字段名修改为视图中定义的字段名。
第三种查询方法与第一种查询方法相比,对DBAS来说,不需要关心表之间的关联关系的细节(如两个表之间通过哪些字段关联),一定程度上可以屏蔽表关系变化对查询模块的影响,但是,当关联的表组合较多时,定义很多数据库视图;而且数据库视图不允许DBAS指定数据库视图中WHERE子句中的子查询过滤条件;并且查询模块在构造SQL语句时,需要根据查询结果是否会有重复记录来确定是否需要使用DISTINCT关键字。即查询应用与表数据耦合较大。
综合以上的描述,以上的三种查询方法使得DBAS的多表关联查询语句构造难,查询不方便,为了解决以上查询方法的问题,如图4所示,本申请实施例提供一种关联查询的方法,包括:
401、获取待查询数据及连接模型库;
本实施例中,当用户需要通过DBAS查询某个数据时,在DBAS上输入待查询数据,DBAS从连接模型存储库或者连接模型配置文件中获取到连接模型库,连接模型库包括至少一个连接模型,连接模型是由DBAS根据至少两个原始表之间的关联关系定义得到。
402、根据待查询数据构建第一查询语句,根据第一查询语句从连接模型库中得到目标连接模型;
本实施例中,由于原始表中是包括有各种数据的,而在某些原始表中包括有待查询数据,而DBAS就能根据待查询数据从连接模型库中查询到具有待查询数据的连接模型,那么根据待查询数据构建第一查询语句,第一查询语句实际上就是查询连接模型的查询语句,查询语句是DSL语言,具体可以是SQL语言,根据第一查询语句从连接模型库中得到目标连接模型,由于具有待查询数据的原始表可能存在与多个原始表中,而多个原始表均有连接模型,那么目标连接模型也可以为多个。
403、根据目标连接模型,将第一查询语句转换为第二查询语句;
本实施例中,所有的原始表都是存储在DBMS管理存储的DB中的,那么查询实际上是由DBMS来执行,而第一查询语句只是基于连接模型查询的语句,那么还需要将第一查询语句转换为DBMS支持的第二查询语句,因此,DBAS还需要根据目标连接模型,按照当初定义目标连接模型的规范将第一查询语句转换为DBMS可执行的第二查询语句。
404、根据第二查询语句查询数据库管理***得到查询结果。
本实施例中,得到第二查询语句后将,将第二查询语句提交给DBMS,DBMS根据第二查询语句进行查询,得到查询结果,之后再将查询结果返回给DBAS。
本申请实施例中,由于DBAS预先将多个表之间的关联关系包装为了连接模型,那么可以使用类似查询单表的第一查询语句直接查询得到目标连接模型,使得DBAS从复杂的查询语句构建中解放出来;而且支持数据库视图所不支持的由子查询进行的表关联同时允许指定子查询的过滤条件;并且根据目标连接模型,将第一查询语句转换为第二查询语句,使得第二查询语句可以在现有的DBMS上执行,与上述的第一种查询方法、第二种查询方法和第三种查询方式相比,简化了关联查询语句的构建难度,使得查询方便。
可选的,本申请的一些实施例中,获取待查询数据及连接模型库之前,还包括:
获取至少两个原始表的表信息,表信息包括表标识及表字段;
根据至少两个原始表的关联关系建立至少一个连接模型,每一个连接模型包括连接模型基本信息、连接模型属性及表关系,连接模型基本信息包括连接模型标识及连接模型名称,连接模型属性包括属性标识、属性名称、对应的原始表的表标识及表字段,表关系包括表关系标识、各原始表的表标识、相邻原始表的连接方式及连接表达式;
根据至少一个连接模型得到连接模型库;
将连接模型库存储至连接模型存储库;
或,
根据连接模型库得到连接模型配置文件。
本申请实施例中,获取至少两个原始表的表信息,表信息包括表标识及表字段,根据至少两个原始表的关联关系建立至少一个连接模型,每一个连接模型包括连接模型基本信息、连接模型属性及表关系,连接模型基本信息包括连接模型标识及连接模型名称,连接模型属性包括属性标识、属性名称、对应的原始表的表标识及表字段,表关系包括表关系标识、各原始表的表标识、相邻原始表的连接方式及连接表达式,连接模型建立的方式可以通过连接模型存储库或连接模型配置文件等形式保存。如图5所示,为建立的连接模型的元模型,主要描述信息为:连接模型基本信息:连接模型的ID;连接模型的名称(构造第一查询语句中使用);连接模型属性:属性的ID、属性的名称(构造第一查询语句中使用)、属性对应的原始表(第一查询语句展开使用)、属性对应的原始表中的字段(第一查询语句展开使用);表关系(第一查询语句展开使用):表关系的ID、左侧表名、右侧表名、连接方式(区分INNERJOIN、LEFT JOIN、RIGHT JOIN、EXISTS、IN等不同的连接方式)、连接表达式(相邻两个表的连接表达式,如相邻表通过外键关联,则此信息也可以根据数据库表的元数据获得)。经过以上包装,DBAS将连接模型看做一个表或视图构造第一查询语句,不必关心连接模型其内部的组成。
可选的,本申请的一些实施例中,获取待查询信息及连接模型库,包括:
接收用户输入的待查询数据;
从连接模型存储库获取连接模型库;
或,
接收连接模型配置文件,从连接模型配置文件解析得到连接模型库。
本申请实施例中,在通过以上实施例建立了连接模型库后,在DBAS接收到用户输入的待查询数据后,可以从连接模型存储库中获取连接模型库,也可以通过接收连接模型配置文件,从连接模型配置文件解析得到连接模型库,具体的获取方式不做限定。
可选的,本申请的一些实施例中,根据待查询数据构建第一查询语句,根据第一查询语句从连接模型库中得到目标连接模型,包括:
根据待查询数据构建第一查询语句;
根据第一查询语句中查询连接模型库中的每一个连接模型;
当查询的连接模型的连接模型属性中对应的原始表的表字段中具有待查询数据时,确定查询的连接模型为目标连接模型,目标连接模型至少为一个。
本申请实施例中,根据待查询数据构建第一查询语句,第一查询语句是对连接模型进行查询的语句,具体可以为SQL,根据第一查询语句中查询连接模型库中的每一个连接模型,当查询的连接模型的连接模型属性中对应的原始表的表字段中具有待查询数据时,表明该连接模型中是具有待查询数据的原始表的,那么确定该连接模型为目标连接模型,目标连接模型至少为一个。
可选的,本申请的一些实施例中,根据目标连接模型,将第一查询语句转换为第二查询语句,包括:
判断第一查询语句是否为数据库管理***的专用语言;
若是,则根据目标连接模型,对第一查询语句进行展开,得到第二查询语句;
若否,则根据目标连接模型,对第一查询语句进行翻译,得到第二查询语句。
本申请实施例中,在将第一查询语句转换为第二查询语句的时候,还需要确定第一查询语句是否就是为DBAS所支持的专用语言,例如DBAS支持的为SQL,而第一查询语句就是SQL,那么表明第一查询语句为数据库管理***的专用语言,此时,只需要对第一查询语句进行展开即可,而如果DBAS所支持的专用语言不是SQL,而第一查询语句是SQL,那么就需要按照特定的转换方式,将第一查询语句进行翻译,得到第二查询语句,具体的翻译规则是根据DBAS所支持的专用语言而定的,不做具体说明。
可选的,本申请的一些实施例中,根据目标连接模型,对第一查询语句进行展开,得到第二查询语句,包括:
确定目标连接模型中具有待查询数据的目标原始表的表标识和表字段,目标原始表至少为一个;
确定目标原始表的顺序,得到表集合;
根据表集合及目标连接模型中的表关系,将第一查询语句展开为第二查询语句。
本申请实施例中,由于目前各种DBMS均不支持连接模型,而查询又必须由DBMS来完成,因此需要将查询SQL(或其他查询DSL)展开并翻译为DBMS支持的SQL,再交由DBMS查询并获得结果。如查询模块构造的查询语句和DBMS的查询语句为同一种DSL,则只需要做查询语句的展开(即将其中对连接模型的查询替换为对表的查询),以下以SQL为例说明展开的方法:
一个查询语句可以只查一个连接模型,也可以同时查询多个连接模型和其他表。当同时查询多个连接模型或其他表时,为减少其他表对展开逻辑的影响,可以将SQL中FROM或JOIN子句等出现连接模型的地方替换为对连接模型的子查询,得到一个与输入的SQL等效的SQL,展开动作在此子查询中进行即可。一个查询连接模型的SQL语句可以抽象概括为一下SQL语句:
select{select表达式列表}
from{连接模型}
where{where表达式}
group by{group by表达式列表}
having{having表达式}
针对单个连接模型的查询(可能是某个SQL中的子查询)展开方法如下:
为方便描述,将对连接模型的查询(即待展开的SQL)记作SQL1,
步骤1、确定SQL1中具有待查询数据的目标原始表的表标识和表字段;
根据被查询连接模型的定义,获取SQL1中被查询连接模型的字段对应的目标原始表的表标识和表字段。SQL1中可能出现连接模型字段的位置有select表达式列表、where表达式、group by表达式列表、having表达式。将select表达式列表和group by表达式列表中出现的字段涉及的原始表组成的集合记做集合A(可能有多个表)。将where表达式和having表达式中出现的字段涉及的目标原始表组成的集合记作集合B(可能有多个表)。将连接模型的定义中,集合A和集合B中间经过的所有目标原始表记作集合C(可能与集合A和集合B有交集)。该查询中涉及的目标原始表集合为:A∪B∪C,记作集合D。集合D可能是被查询的连接模型包含的所有目标原始表,也可能是其子集。
步骤2、确定目标原始表的顺序;
集合D是若干个原始表组成的,这些表根据连接模型定义的这些原始表的依次连接关系形成了一个“链条”(或称为原始表的向量,记作V),本步骤就是要确定该向量V的方向,即集合D中原始表顺序。为了与后续步骤描述保持一致,以“左”和“右“表示原始表的顺序,“左”在先,“右“在后。为方便理解,假设集合D={a,b,c,d},4个元素各不相同,连接模型定义这4个表是a、b、c、d依次连接的,分几种情况:
(1)、假如A=B,则A在V上任意一端为左,V的另一端为右。比如A=D,且B=D,则V=<a,b,c,d>,或V=<d,c,b,a>;
步骤3、对SQL1中select表达式列表和group by表达式列表中出现的各个连接模型的字段转换为相应的“原始模型.原始字段”的形式,得到的SQL如下所示:
select{SQL1中select表达式列表按此步骤转换后的结果}
from{连接模型}
where{where表达式}
group by{SQL1中group by表达式列表按此步骤转换后的结果}
having{having表达式}
步骤4、取V中最左侧的表开始,依次向右找到所有连续地通过JOIN连接的表,这些表在V中的子向量记作W,将这些表按照其在向量中的顺序生成以连接模型定义中指定的JOIN类型连接的语句,得到如下的SQL片段:
{W中表1}
{W中表1和表2的连接类型}join{W中表2}on{W中表1和表2的连接条件}
{W中表2和表3的连接类型}join{W中表3}on{W中表2和表3的连接条件}
...
有一种极端情况,向量W中只有一个表,那么该SQL片段只有“{W中表1}”。
步骤5、将步骤4中得到的SQL片段代入步骤3得到的SQL中的“{连接模型}”处。
步骤6、基于步骤5得到的SQL,展开where表达式,此步骤针对“{where表达式}”中每一个通过and和or连接的最小的(即表达式内部没有and和or)逻辑表达式分别处理,将每个最小的逻辑表达式处理方法如下:
假如表达式中的字段所属表在向量W中,则将表达式中的字段转换为相应的“原始模型.原始字段”的形式;
假如表达式中的字段所属表不在向量W中,但此表在V中位于向量W右侧,则需要将此表达式转换为一个EXISTS子查询,将转换结果代替此表达式。转换方法见下文,此时需要的信息有:向量V、向量W中最右侧的表(记作表N)、当前待转换的表达式;
其他情况不支持,展开过程失败。
步骤7、假如SQL1有having子句,则基于步骤6得到的SQL,展开having表达式。此步骤的方法与步骤6类似,区别在于“{having表达式}”中只能出现向量W中表的字段,如出现向量W以外的其他表字段,则展开过程失败。
步骤8、经过以上步骤1-7处理后得到的SQL即为展开结果,即第二查询语句。
需要说明的是,如果以上步骤6中需要将逻辑表达式转换为EXISTS子查询的,则将待转换的表达式,根据向量V、表N按方法如下方法处理:
(一)、在V中从表N右侧的一个表开始,依次向右找到所有连续地通过JOIN连接的表,直到找到待转换表达式中涉及的原始表,这些表在V中的子向量记作W,根据W生成一个EXISTS子查询SQL片段如下:
{表N和W中表1的连接类型(exists或not exists)}(
select null
from{W中表1}
{W中表1和表2的连接类型}join{W中表2}on{W中表1和表2的连接条件}
{W中表2和表3的连接类型}join{W中表3}on{W中表2和表3的连接条件}
...
where
{表N和W中表1的连接条件}
)
此时会有如下两种情况:假如待转换表达式涉及的原始表在W中,则在以上EXISTS子查询SQL片段的where子句中增加一个通过and连接的逻辑表达式,该逻辑表达式为将待转换表达式中出现的连接模型的字段转换为相应的“原始模型.原始字段”得到,转换结束,本步骤得到的SQL片段即为待转换表达式转换后的结果;假如待转换表达式涉及的原始表不在W中,则进行(二);
(二)、在(一)得到的SQL片段最内层查询的where子句中增加一个通过and连接的SQL片段,此SQL片段也有本方法获得,不同的是表N为向量W的最右侧的表,如此迭代使用本方法,会得到一个exists的嵌套查询SQL片段,作为待转换表达式转换后的结果。
以上实施例中介绍的是本申请的关联查询的方法,下面通过实施例详细介绍应用该方法的数据库查询***。
请参阅图6,本申请实施例提供一种数据库查询***,包括:
获取模块601,用于获取待查询数据及连接模型库,连接模型库包括至少一个连接模型,连接模型由至少两个原始表之间的关联关系定义得到;
查询模块602,用于根据待查询数据构建第一查询语句,根据第一查询语句从连接模型库中得到目标连接模型,目标连接模型至少为一个;
查询语句转换模块603,还用于根据目标连接模型,将第一查询语句转换为第二查询语句,第二查询语句为数据库管理***的专用语言,数据库管理***用于管理存储有至少两个原始表的数据库;
查询语句转换模块603,还用于根据第二查询语句查询数据库管理***得到查询结果。
本申请实施例中,由于DBAS预先将多个表之间的关联关系包装为了连接模型,那么获取模块601获取待查询数据及连接模型库之后,查询模块602可以使用类似查询单表的第一查询语句直接查询得到目标连接模型,使得DBAS从复杂的查询语句构建中解放出来;而且支持数据库视图所不支持的由子查询进行的表关联同时允许指定子查询的过滤条件;并且查询语句转换模块603根据目标连接模型,将第一查询语句转换为第二查询语句,使得第二查询语句可以在现有的DBMS上执行,与上述的第一种查询方法、第二种查询方法和第三种查询方式相比,简化了关联查询语句的构建难度,使得查询方便。
可选的,如图7所示,本申请的一些实施例中,数据库应用***还包括:
连接模型构建模块701,用于获取至少两个原始表的表信息,表信息包括表标识及表字段;
连接模型构建模块701,还用于根据至少两个原始表的关联关系建立至少一个连接模型,每一个连接模型包括连接模型基本信息、连接模型属性及表关系,连接模型基本信息包括连接模型标识及连接模型名称,连接模型属性包括属性标识、属性名称、对应的原始表的表标识及表字段,表关系包括表关系标识、各原始表的表标识、相邻原始表的连接方式及连接表达式;
连接模型构建模块701,还用于根据至少一个连接模型得到连接模型库;
连接模型构建模块701,还用于将连接模型库存储至连接模型存储库;
或,
连接模型构建模块701,还用于根据连接模型库得到连接模型配置文件。
本申请实施例中,连接模型构建模块701获取至少两个原始表的表信息,表信息包括表标识及表字段,根据至少两个原始表的关联关系建立至少一个连接模型,每一个连接模型包括连接模型基本信息、连接模型属性及表关系,连接模型基本信息包括连接模型标识及连接模型名称,连接模型属性包括属性标识、属性名称、对应的原始表的表标识及表字段,表关系包括表关系标识、各原始表的表标识、相邻原始表的连接方式及连接表达式,连接模型建立的方式可以通过连接模型存储库或连接模型配置文件等形式保存。如图5所示,为建立的连接模型的元模型,主要描述信息为:连接模型基本信息:连接模型的ID;连接模型的名称(构造第一查询语句中使用);连接模型属性:属性的ID、属性的名称(构造第一查询语句中使用)、属性对应的原始表(第一查询语句展开使用)、属性对应的原始表中的字段(第一查询语句展开使用);表关系(第一查询语句展开使用):表关系的ID、左侧表名、右侧表名、连接方式(区分INNER JOIN、LEFT JOIN、RIGHT JOIN、EXISTS、IN等不同的连接方式)、连接表达式(相邻两个表的连接表达式,如相邻表通过外键关联,则此信息也可以根据数据库表的元数据获得)。经过以上包装,DBAS将连接模型看做一个表或视图构造第一查询语句,不必关心连接模型其内部的组成。
可选的,如图7所示,本申请的一些实施例中,
获取模块601,具体用于接收用户输入的待查询数据;
获取模块601,还用于从连接模型存储库获取连接模型库;
或,
获取模块601,还用于接收连接模型配置文件,从连接模型配置文件解析得到连接模型库。
本申请实施例中,在连接模型构建模块701通过以上实施例建立了连接模型库后,在获取模块601接收到用户输入的待查询数据后,可以从连接模型存储库中获取连接模型库,也可以通过接收连接模型配置文件,从连接模型配置文件解析得到连接模型库,具体的获取方式不做限定。
可选的,如图7所示,本申请的一些实施例中,
查询模块602,具体用于根据待查询数据及查询条件构建第一查询语句;
查询模块602,还用于根据第一查询语句中查询连接模型库中的每一个连接模型;
查询模块602,还用于当查询的连接模型的连接模型属性中对应的原始表的表字段中具有待查询数据时,确定查询的连接模型为目标连接模型,目标连接模型至少为一个。
本申请实施例中,查询模块602根据待查询数据构建第一查询语句,第一查询语句是对连接模型进行查询的语句,具体可以为SQL,查询模块602根据第一查询语句中查询连接模型库中的每一个连接模型,当查询的连接模型的连接模型属性中对应的原始表的表字段中具有待查询数据时,表明该连接模型中是具有待查询数据的原始表的,那么查询模块602确定该连接模型为目标连接模型,目标连接模型至少为一个。
可选的,如图7所示,本申请的一些实施例中,
查询语句转换模块603,还用于判断第一查询语句是否为数据库管理***的专用语言;
查询语句转换模块603,还用于当第一查询语句为数据库管理***的专用语言时,根据目标连接模型,对第一查询语句进行展开,得到第二查询语句;
查询语句转换模块603,还用于当第一查询语句不是数据库管理***的专用语言时,根据目标连接模型,对第一查询语句进行翻译,得到第二查询语句。
本申请实施例中,查询语句转换模块603在将第一查询语句转换为第二查询语句的时候,还需要确定第一查询语句是否就是为DBAS所支持的专用语言,例如DBAS支持的为SQL,而第一查询语句就是SQL,那么表明第一查询语句为数据库管理***的专用语言,此时,只需要对第一查询语句进行展开即可,而如果DBAS所支持的专用语言不是SQL,而第一查询语句是SQL,那么就需要按照特定的转换方式,将第一查询语句进行翻译,得到第二查询语句,具体的翻译规则是根据DBAS所支持的专用语言而定的,不做具体说明。
可选的,如图7所示,本申请的一些实施例中,
查询语句转换模块603,还用于确定目标连接模型中具有待查询数据的目标原始表的表标识和表字段,目标原始表至少为一个;
查询语句转换模块603,还用于确定目标原始表的顺序,得到表集合;
查询语句转换模块603,还用于根据表集合及目标连接模型中的表关系,将第一查询语句的表达式列表转换为第二查询语句。
本申请实施例中,由于目前各种DBMS均不支持连接模型,而查询又必须由DBMS来完成,因此查询语句转换模块603需要将查询SQL(或其他查询DSL)展开为DBMS支持的SQL,再交由DBMS查询并获得结果,具体的展开方法如以上步骤1-步骤8所示,不做具体说明。
本申请的关联查询的方法可以在以服务器为实体装置的设备上运行,具体如下:
请参阅图8,本申请提供一种服务器,包括:
处理器801及存储器802,其中,存储器802可以用于存储处理器801执行的代码;
处理器801及存储器802通过总线***803连接;
处理器801,用于获取待查询数据及连接模型库,连接模型库包括至少一个连接模型,连接模型由至少两个原始表之间的关联关系定义得到;
处理器801,用于根据待查询数据构建第一查询语句,根据第一查询语句从连接模型库中得到目标连接模型,目标连接模型至少为一个;
处理器801,还用于根据目标连接模型,将第一查询语句转换为第二查询语句,第二查询语句为数据库管理***的专用语言,数据库管理***用于管理存储有至少两个原始表的数据库;
处理器801,还用于根据第二查询语句查询数据库管理***得到查询结果。
本申请实施例中,由于DBAS预先将多个表之间的关联关系包装为了连接模型,那么收发器802获取待查询数据及连接模型库之后,处理器801可以使用类似查询单表的第一查询语句直接查询得到目标连接模型,使得DBAS从复杂的查询语句构建中解放出来;而且支持数据库视图所不支持的由子查询进行的表关联同时允许指定子查询的过滤条件;并且处理器801根据目标连接模型,将第一查询语句转换为第二查询语句,使得第二查询语句可以在现有的DBMS上执行,与上述的第一种查询方法、第二种查询方法和第三种查询方式相比,简化了关联查询语句的构建难度,使得查询方便。
本申请还提供了一种计算机可读存储介质,计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行以上实施例所描述的关联查询的方法。
本申请还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行以上实施例所描述的关联查询的方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。
所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存储的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。
Claims (12)
1.一种关联查询的方法,其特征在于,包括:
获取待查询数据及连接模型库,所述连接模型库包括至少一个连接模型,所述连接模型由至少两个原始表之间的关联关系定义得到,所述连接模型包括连接模型基本信息、连接模型属性及表关系;
根据所述待查询数据构建第一查询语句,根据所述第一查询语句从所述连接模型库中得到目标连接模型,所述目标连接模型至少为一个;
判断所述第一查询语句是否为数据库管理***的专用语言;
若是,则根据所述目标连接模型,对所述第一查询语句进行展开,得到第二查询语句;
若否,则根据所述目标连接模型,对所述第一查询语句进行翻译,得到第二查询语句,所述第二查询语句为数据库管理***的专用语言,所述数据库管理***用于管理存储有所述至少两个原始表的数据库;
根据所述第二查询语句查询所述数据库管理***得到查询结果。
2.根据权利要求1所述的方法,其特征在于,所述获取待查询数据及连接模型库之前,还包括:
获取至少两个原始表的表信息,所述表信息包括表标识及表字段;
根据所述至少两个原始表的关联关系建立至少一个连接模型,所述连接模型基本信息包括连接模型标识及连接模型名称,所述连接模型属性包括属性标识、属性名称、对应的原始表的表标识及表字段,所述表关系包括表关系标识、各原始表的表标识、相邻原始表的连接方式及连接表达式;
根据所述至少一个连接模型得到连接模型库;
将所述连接模型库存储至连接模型存储库;
或,
根据所述连接模型库得到连接模型配置文件。
3.根据权利要求2所述的方法,其特征在于,所述获取待查询数据及连接模型库,包括:
接收用户输入的待查询数据;
从连接模型存储库获取连接模型库;
或,
接收连接模型配置文件,从所述连接模型配置文件解析得到连接模型库。
4.根据权利要求3所述的方法,其特征在于,所述根据所述待查询数据构建第一查询语句,根据所述第一查询语句从所述连接模型库中得到目标连接模型,包括:
根据所述待查询数据构建第一查询语句;
根据所述第一查询语句中查询所述连接模型库中的每一个连接模型;
当查询的连接模型的连接模型属性中对应的原始表的表字段中具有所述待查询数据时,确定所述查询的连接模型为目标连接模型,所述目标连接模型至少为一个。
5.根据权利要求1所述的方法,其特征在于,所述根据所述目标连接模型,对所述第一查询语句进行展开,得到第二查询语句,包括:
确定所述目标连接模型中具有所述待查询数据的目标原始表的表标识和表字段,所述目标原始表至少为一个;
确定所述目标原始表的顺序,得到表集合;
根据所述表集合及所述目标连接模型中的表关系,将所述第一查询语句展开为第二查询语句。
6.一种数据库应用***,其特征在于,包括:
获取模块,用于获取待查询数据及连接模型库,所述连接模型库包括至少一个连接模型,所述连接模型由至少两个原始表之间的关联关系定义得到,所述连接模型包括连接模型基本信息、连接模型属性及表关系;
查询模块,用于根据所述待查询数据构建第一查询语句,根据所述第一查询语句从所述连接模型库中得到目标连接模型,所述目标连接模型至少为一个;
查询语句转换模块,用于判断所述第一查询语句是否为数据库管理***的专用语言;还用于当所述第一查询语句为所述数据库管理***的专用语言时,根据所述目标连接模型,对所述第一查询语句进行展开,得到第二查询语句;还用于当所述第一查询语句不是所述数据库管理***的专用语言时,根据所述目标连接模型,对所述第一查询语句进行翻译,得到第二查询语句,所述第二查询语句为数据库管理***的专用语言,所述数据库管理***用于管理存储有所述至少两个原始表的数据库;
所述查询语句转换模块,还用于根据所述第二查询语句查询所述数据库管理***得到查询结果。
7.根据权利要求6所述的***,其特征在于,所述数据库应用***还包括:
连接模型构建模块,用于获取至少两个原始表的表信息,所述表信息包括表标识及表字段;
所述连接模型构建模块,还用于根据所述至少两个原始表的关联关系建立至少一个连接模型,所述连接模型基本信息包括连接模型标识及连接模型名称,所述连接模型属性包括属性标识、属性名称、对应的原始表的表标识及表字段,所述表关系包括表关系标识、各原始表的表标识、相邻原始表的连接方式及连接表达式;
所述连接模型构建模块,还用于根据所述至少一个连接模型得到连接模型库;
所述连接模型构建模块,还用于将所述连接模型库存储至连接模型存储库;
或,
所述连接模型构建模块,还用于根据所述连接模型库得到连接模型配置文件。
8.根据权利要求7所述的***,其特征在于,
所述获取模块,具体用于接收用户输入的待查询数据;
所述获取模块,还用于从连接模型存储库获取连接模型库;
或,
所述获取模块,还用于接收连接模型配置文件,从所述连接模型配置文件解析得到连接模型库。
9.根据权利要求8所述的***,其特征在于,
所述查询模块,具体用于根据所述待查询数据及所述查询条件构建第一查询语句;
所述查询模块,还用于根据所述第一查询语句中查询所述连接模型库中的每一个连接模型;
所述查询模块,还用于当查询的连接模型的连接模型属性中对应的原始表的表字段中具有所述待查询数据时,确定所述查询的连接模型为目标连接模型,所述目标连接模型至少为一个。
10.根据权利要求9所述的***,其特征在于,
所述查询语句转换模块,还用于确定所述目标连接模型中具有所述待查询数据的目标原始表的表标识和表字段,所述目标原始表至少为一个;
所述查询语句转换模块,还用于确定所述目标原始表的顺序,得到表集合;
所述查询语句转换模块,还用于根据所述表集合及所述目标连接模型中的表关系,将所述第一查询语句的表达式列表转换为第二查询语句。
11.一种服务器,其特征在于,包括:
处理器及存储器,其中,所述存储器用于存储所述处理器执行的代码;
所述处理器及所述存储器通过总线***连接;
所述处理器,用于获取待查询数据及连接模型库,所述连接模型库包括至少一个连接模型,所述连接模型由至少两个原始表之间的关联关系定义得到,所述连接模型包括连接模型基本信息、连接模型属性及表关系;
所述处理器,用于根据所述待查询数据构建第一查询语句,根据所述第一查询语句从所述连接模型库中得到目标连接模型,所述目标连接模型至少为一个;
所述处理器,还用于判断所述第一查询语句是否为数据库管理***的专用语言;
若是,则根据所述目标连接模型,对所述第一查询语句进行展开,得到第二查询语句;
若否,则根据所述目标连接模型,对所述第一查询语句进行翻译,得到第二查询语句,所述第二查询语句为数据库管理***的专用语言,所述数据库管理***用于管理存储有所述至少两个原始表的数据库;
所述处理器,还用于根据所述第二查询语句查询所述数据库管理***得到查询结果。
12.一种计算机可读存储介质,包括指令,当其在计算机上运行时,使得所述计算机执行如权利要求1至5中任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711487511.0A CN110109951B (zh) | 2017-12-29 | 2017-12-29 | 一种关联查询的方法、数据库应用***及服务器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711487511.0A CN110109951B (zh) | 2017-12-29 | 2017-12-29 | 一种关联查询的方法、数据库应用***及服务器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110109951A CN110109951A (zh) | 2019-08-09 |
CN110109951B true CN110109951B (zh) | 2022-12-06 |
Family
ID=67482987
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711487511.0A Active CN110109951B (zh) | 2017-12-29 | 2017-12-29 | 一种关联查询的方法、数据库应用***及服务器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110109951B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110674177B (zh) * | 2019-09-30 | 2023-04-11 | 奇安信科技集团股份有限公司 | 数据查询方法、装置、电子设备和存储介质 |
CN113806190A (zh) * | 2020-06-17 | 2021-12-17 | 华为技术有限公司 | 一种预测数据库管理***的性能的方法、装置及*** |
CN111984671B (zh) * | 2020-07-27 | 2023-09-12 | 北京天健源达科技股份有限公司 | 一种生成创建视图脚本的方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101093493A (zh) * | 2006-06-23 | 2007-12-26 | 国际商业机器公司 | 数据库查询语言转换方法、转换装置、数据库查询*** |
CN101916261A (zh) * | 2010-07-28 | 2010-12-15 | 北京播思软件技术有限公司 | 一种分布式并行数据库***的数据分区方法 |
CN103092998A (zh) * | 2013-02-21 | 2013-05-08 | 用友软件股份有限公司 | 数据查询***和数据查询方法 |
CN107515887A (zh) * | 2017-06-29 | 2017-12-26 | 中国科学院计算机网络信息中心 | 一种适用于多种大数据管理***的交互式查询方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120317104A1 (en) * | 2011-06-13 | 2012-12-13 | Microsoft Corporation | Using Aggregate Location Metadata to Provide a Personalized Service |
-
2017
- 2017-12-29 CN CN201711487511.0A patent/CN110109951B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101093493A (zh) * | 2006-06-23 | 2007-12-26 | 国际商业机器公司 | 数据库查询语言转换方法、转换装置、数据库查询*** |
CN101916261A (zh) * | 2010-07-28 | 2010-12-15 | 北京播思软件技术有限公司 | 一种分布式并行数据库***的数据分区方法 |
CN103092998A (zh) * | 2013-02-21 | 2013-05-08 | 用友软件股份有限公司 | 数据查询***和数据查询方法 |
CN107515887A (zh) * | 2017-06-29 | 2017-12-26 | 中国科学院计算机网络信息中心 | 一种适用于多种大数据管理***的交互式查询方法 |
Also Published As
Publication number | Publication date |
---|---|
CN110109951A (zh) | 2019-08-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10572484B2 (en) | Duplicate reduction or elimination with hash join operations | |
US9317557B2 (en) | Answering relational database queries using graph exploration | |
US9411840B2 (en) | Scalable data structures | |
US8332389B2 (en) | Join order for a database query | |
US11436225B2 (en) | Database hierarchy-independent data drilling | |
US9286393B2 (en) | Performing a function on rows of data determined from transitive relationships between columns | |
US8924373B2 (en) | Query plans with parameter markers in place of object identifiers | |
US20230177078A1 (en) | Conversational Database Analysis | |
US8417690B2 (en) | Automatically avoiding unconstrained cartesian product joins | |
US10296542B2 (en) | Integration database framework | |
US20070083573A1 (en) | Reduction of join operations when archiving related database tables | |
CN110109951B (zh) | 一种关联查询的方法、数据库应用***及服务器 | |
WO2019161679A1 (zh) | 一种用于联机分析处理的数据处理方法和装置 | |
US9063957B2 (en) | Query systems | |
Mpinda et al. | Evaluation of graph databases performance through indexing techniques | |
US8396858B2 (en) | Adding entries to an index based on use of the index | |
CN105760418A (zh) | 用于对关系数据库表进行交叉列搜索的方法和*** | |
Plase et al. | Accelerating data queries on Hadoop framework by using compact data formats | |
CN114138725A (zh) | 一种层次化的日志存储处理方法 | |
US20160210324A1 (en) | Flexible data format for database management systems | |
WO2024082881A2 (zh) | 数据库查询方法和装置 | |
Gupta et al. | A Study on Various Database Models: Relational, Graph, and Hybrid Databases | |
Aguilar Vera et al. | NoSQL Database Modeling and Management: A Systematic Literature Review | |
US10713305B1 (en) | Method and system for document search in structured document repositories | |
KR20230091749A (ko) | 데이터맵 생성 방법 및 장치 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20200210 Address after: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen Applicant after: HUAWEI TECHNOLOGIES Co.,Ltd. Address before: 210012 HUAWEI Nanjing base, 101 software Avenue, Yuhuatai District, Jiangsu, Nanjing Applicant before: HUAWEI SOFTWARE TECHNOLOGIES Co.,Ltd. |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant |