X5数据建模
数据建模实现概念与数据库的交互,完成数据的存取。其包括概念数据建模和物理数据建模两部分。
概念数据建模:屏蔽物理数据库之间差异低作用(这里我理解为:利用ksql语句根据配置的数据库,做相对应的数据库语句的转化,实现多数据库的支持)。
概念数据建模包括创建概念和创建关系。
物理数据建模:在概念和物理数据之间建立映射关系。
物理数据建模包括映射设置、生成物理表和标准动作设置三部分。
一、概念数据建模
在介绍概念数据建模之前,这里我们先利用X5的开发平台Studio创建一个概念,查看概念设计器,如下图:
1、概念
“概念”可以理解成对单个或者是一类对象的抽象,可以看成是数据库表的抽象(一个数据库表可以对应多个概念,例如当用到鉴别器的时候)。
a. 概念标识
当添加完概念名称后平台会自动生成概念标识,默认生成概念标识是由当前所在应用名称的前两个字母加下划线然后加上概念名称拼音的首字母组成,这样不方便查看,所以建议修改,例如图中的CL_SPXX改成CL_Goods是不是会好点。
b. 主键默认值
X5平台中每个概念都有主键默认值,并且主键默认值是唯一且不能为空的。新建一个概念时,默认添加“guid()”表达式函数作为概念的主键值,但是并不只能是“guid()”作为主键默认值,其他的表达式函数或者自己编写一个表达式,都可以作为主键的默认值。比如:以当前的日期作为主键默认值:toString(currentDateTime())。
c. 包含引用
这里我们将本体设计器切换到“包含/引用”界面中,如图:
X5中的“包含和引用”就是在当前的业务模块中,引用其他业务模块的资源,包括:概念、关系、函数(Fn)、动作(action)等。上图中可以看出,包含指的是“包含(INCLUDE)”,引用指的是“引用(USE)”。
这里常用的还是“引用(USE)”。
在本体编辑器的引用编辑框中,点击“添加”按钮,将会弹出一个“选择模型”的窗口,如图:
当你在这里选择一个模型资源的目录,点击“确定”按钮之后,该资源模型目录就被引用到了当前的文件所在的模型中。
例子:
l 引用系统概念,选择:“/system/ontology”;
l 引用系统的action,选择:“/system/logic/action”;
l 引用系统的Fn,选择:“/system/logic/fn”。
2、关系
关系是对对象中属性的抽象,可以看成是数据库表中字段的抽象。
a. Version关系
当新间一个概念时,都会默认的创建一个“version”关系。其作用是防止并发时,处理多人对同一条记录进行修改操作,也就是所谓的“乐观锁”。X5平台自动对“version”进行了维护,开发者不用再去管这个关系了,切换到界面设计器中,你可以在业务数据组件(bizData)的属性中看到“update-model”属性值选择为“whereVersion”,如下图:
当然“version”关系也可以去掉,如果没有version关系,那么业务数据组件(bizData)的“update-model”属性应该设置为“whereAll”。
b. 关系默认值
其实为关系设置默认值,就相当于为数据库表中的某个字段设置默认值,如:version的默认值为0。关系默认值的设置方式有两种:设置常量和设置表达式。
l 设置常量作为关系默认值:
在关系默认值处直接输入常量默认值。如下图:
注意:其中字符串常量要用单引号引起来。
l 设置表达式作为关系默认值:
在默认值处点击出现的小按钮,弹出“表达式编辑器”对话框,如下图:
在编辑器中选择适当的编辑表达式(表达式之间也可以进行嵌套),如下图:
这样,生成的默认值就会使“GOOD0001”、“GOOD0002”~~自动增加。
这里要注意的是关系默认值的数据类型要和关系类型保持一致。
注意:在添加新关系的时候,在单体设计器的最顶部有一个“添加关系”按钮,同时在“概念关系设置”编辑框中也有一个类似的“添加新关系”的按钮。这两者是不同的,在一个数据模块中可能有多个概念,多个关系,“添加关系”按钮呢添加的关系不在任何一个概念之内,这时可以选择一个概念点击“概念关系设置”编辑框中的“从已定义关系”按钮选择任何一个关系,但是“添加新关系”按钮,添加的关系直接添加到当前的概念中去。
二、物理数据建模
物理数据建模就是在概念和物理数据库之间建立映射关系。
1. 映射设置
映射设置就是将数据建模中的创建的概念和关系跟物理表建立起映射关系,并且这种映射是可配置的。后台程序在进行数据处理时,操作的主要是概念,而不是物理数据库。这就意味着当数据库中的表或者字段发生变更的时候,不必去程序中进行修改了,只需要修改配置文件就可以,同时X5平台也具备了跨数据库的能力。
在映射配置中还有一个比较有用的设置---鉴别器设置。鉴别器的作用就是在概念级别起到过滤的作用。鉴别器设置也很简单,在映射设置界面的“表映射”中,有“鉴别列”和“鉴别值”两个可输入的框,分别输入要进行过滤的字段和过滤条件值就可以了。
例如:当一个员工数据字典中存在服务员、销售员、接待员等多个职业时,可以根据不同的职业创建多个概念,但是这多个概念同时对应的是一个数据库表,这里就要设置“鉴别列”字段的名称,以及“鉴别值”了。其中“鉴别列”对应的是数据库中的职业字段,鉴别值分别为服务员、销售员、接待员等。
这就相当于加了一个where条件语句。
2. 生成物理表
在本体设计器中点击“生成数据库表”,弹出“创建物理表向导”窗口,将左侧要创建的表移动到右侧,如下图:
然后一直点击“下一步”,直到:
最后点击“完成”后即生成了物理表,在数据库表中可查看。
三、反向生成文本
反向生成文本,指的是由物理表生成一个对应的概念和关系。
1、打开一个本体文件(*.ontology.m),在本体设计器中点击右上角的“反向生成本体”按钮,弹出“反向生成本体”窗口,然后选择包含需要反向生成表的数据源,如下图:
2、在上图中,点击“选择表”按钮,弹出“选择表”窗口,选择要反向生成本体的表(可选择多个表),如下图:
点击“确定”即可。
3、选完表后,在视图中选中你所添加的一个表,然后在窗口中点击“添加概念”按钮,会自动生成一个对应的概念标识,其中概念标识、鉴别列以及鉴别值都是可以设置修改的,如下图:
4、点击下面的“添加关系”按钮,选择需要添加的关系,应该一般会全选吧,如图:
然后点击“确定”,就可将字段添加到概念中。
最后点击“完成”,就可以在本体设计器中看到添加的概念了。
四、标准动作设置
X5平台中的action描述了一个动作或者一个业务逻辑。每个概念都拥有创建数据、保存数据、查询数据三个基本动作,这些动作就称为标准动作。其中,保存、查询这两个动作实现了概念跟数据库之间的数据交互。
1. 标准动作介绍
每个概念都可以有三个对应的标准动作,分别是:queryXxxxAction、saveXxxxAction、createXxxxAction。其中,queryXxxxAction封装了读取数据的业务逻辑,实现了从数据表中读取数据并封装成table对象的功能;saveXxxxAction封装了修改数据的业务逻辑,实现了将table对象中的内容通过增删改的方式更新数据库的功能;createXxxxAction封装了新建概念数据的业务逻辑,实现了产生一条或多条空数据并封装成table对象的功能。标准动作设置如下图所示:
标准action参数的属性说明:
1) public ------ 公共的,可以接收前台传入的值
2) protected -- 保护的,表示可以在process中has-action时赋值
3) private ----- 私有的,表示只能在action声明使赋值
4) permission --- 权限参数,只能从组织机构上传权限的值,在角色管理中设置
Ø queryXxxxAction的参数
参数名称 | 用途 |
select | 查询,标明查询概念中的哪些关系 |
from | 作为查询的数据来源 |
dataModel | 引用的业务数据模型,封装了数据源连接等底层操作 |
fnModel | 引用的函数模型,封装了函数的底层实现 |
distinct | 是否过滤查询出的重复的结果 |
condition | 过滤条件,KSQL编辑器中定义的查询条件 |
filter | 过滤条件,UI中bizData的filter |
range | 过滤条件,在数据权限中定义的过滤条件 |
返回值 | 封装成Table对象返回 |
Ø saveXxxxAction的参数
参数名称 | 用途 |
concept | 概念,指明要存储的概念 |
dataModel | 引用的业务数据模型,封装了数据源连接等底层操作 |
table | Table对象,存储数据改变信息 |
返回值 | 成功的影响了几条数据 |
Ø createXxxxAction的参数
参数名称 | 用途 |
concept | 概念,新增这个概念的数据 |
fnModel | 引用的函数模型,封装了函数的底层实现 |
table | 传入一个空的table对象,如果在界面上设置了关系的默认值,会将界面的默认值传过来 |
返回值 | 新产生一条或者多条概念数据,封装成table对象返回 |
2. KSQL查询编辑器
X5中KSQL是专门用来在X5中操作概念和关系的查询语言。
标准动作的参数是可以编辑的。点击“参数列表”中“值”处的输入框,会出现小按钮,点击select、from、condition、orderBy后面的按钮,都会弹出“KSQL查询编辑器”窗口,如下图:
“KSQL查询编辑器”是通过选择概念、关系、函数的方式生成KSQL语句的工具,里面包含四个tab标签,分别是:Select、Where、Order、Group。
l Select
点击“添加关系”按钮,在弹出窗口中选择某个概念下要查询的关系,如果要添加某个概念的所有关系,那么选择概念下的“*”号。如下图:
选择好后点击“确定”,在下面的“From”编辑器中自动生成,查询关系所在的概念。
这里除了选择两个概念中的关系之外,还需要设置两个概念之间的关联条件。点击“From”编辑器中“On”下面的小按钮,弹出“配置关联条件窗口”:
在此设置两个概念之间的关系,例如:客户商品信息表的商品ID等于商品信息的主键(这里主键利用概念名来表示),如下图:
l Where
在where页签中可以编辑查询条件如下图:
可以使用常量、变量、内存函数、KSQL函数。
注意:
1、变量名前加冒号;
2、内存函数名前加冒号,后面加小括号,表达式编辑器中的函数都是内存函数。
l Order
可以编辑排序的条件,如下图,选择即可设置:
l Group
可设置分组条件,相当于group by:
注意:
标准动作设置中queryAction不允许使用Group,因此打开KSQL查询编辑器,没有Group页。
报表设计器中允许使用Group,因此打开KSQL查询编辑器,有Group页。另外,设置了group by之后,要到源码中,给select中的非group by关系加聚合函数,例如sum(),否则运行报表时报错。