Skip to content

数据源-来自数据库视图

概述

来自视图的数据源通过设置一个SQL查询语句来查询其它数据表的数据,在SQL语句中可以使用聚合函数等数据库提供的数据处理功能。 织信会自动将查询语句创建为数据库视图。 查询语句返回的列应该和数据表的字段的标识符一一对应,并且需要额外返回一个名为idvarchar类型的唯一标识符。

视图可以很方便来实现数据统计等功能,需要注意的是如果查询的过程耗时比较久,可以开始数据源的 保存为物化视图 功能,开启后,织信将创建物化视图。

虽然对物化视图中存储的数据的访问常常要快于直接访问底层表或通过一个视图访问,但是数据并不总是最新的。如果需要更新物化视图的数据,需要主动调用informat.table.refreshDataSource() 方法

简单查询例子

假设系统中有一张数据表人员信息(标识符为 userInfo)结构如下

字段名称
id主键
name姓名
countryName国家

现在我们需要显示每个国家人数的汇总情况,那么应该创建一张数据表 标识符为countryStat,字段应该配置如下

字段标识符名称类型
countryName国家名称单行文本
count人数整数

查询语句如下

sql
select 
    count(name) as count,
    country_name
    from user_info
    group by country_name;

注意事项

  • 表名

    需要遵循下划线法命名法,即将数据表标识符大写字母转化为下划线

  • 字段名

    需要遵循下划线法命名法,即将字段标识符大写字母转化为下划线

关联列表字段查询例子:

假设系统中有一张数据表国家信息(标识符为 countryInfo)结构如下

字段名称
id主键
name国家名称

上面例子中的人员信息表新增了一个字段旅游过的国家列表,类型是关联列表,关联到国家信息

字段名称
id主键
name姓名
countryName国家
traveledCountryList旅游过的国家列表

现在我们需要显示每个国家按照旅游人数的的汇总情况,那么应该创建一张数据表 标识符为countryTraveledStat,字段应该配置如下

字段标识符名称类型
countryName国家名称单行文本
count旅游人数整数

查询语句如下

sql
select 
    b.name  as country_name,
    count(1) as count
    from user_info$traveled_country_list a
    inner join country_info b on a. relation_id=b.id
    group by b.name;

使用说明

user_info$traveled_country_list表是人员信息表关联列表字段traveledCountryList 的邻接表 邻接表的查询的格式:数据表标识符$字段标识符(同样需要把大写字母转化为下划线)

邻接表的结构如下

字段类型说明
idint主表记录ID
relation_idvarchar子表记录ID
indexint排序
create_timedate创建时间

注意事项

查询SQL返回的列中必须包含所有的在数据表字段设置中定义的字段。当视图中依赖的源数据表被删除或者字段发生变更时,需要将视图定义SQL中的引用先删除,再修改源数据表定义。否则会导致应用发布失败。