第3章 业务数据
1.1 概述
业务数据模块负责维护业务的数据。
主要包括本体与数据库表的映射信息(mapping)和数据库的连接配置信息。。
业务系统的持久存储层是ER数据库,业务系统需要知道如何把本体定义和数据库里的表结构相对应,这样系统就可以把业务数据的操作自动转换成相应的数据库操作,这个过程类似Hibernate实现的ORM过程,本体到物理表的映射也可以缩写为ORM,但这里的“O”是指本体(Ontology)。
1.2 数据模块定义
1.2.1 数据连接
目前支持的数据库类型主要是SQL Server、Oracle、 Sybase和DB2。默认情况下,对应的数据库是Oracle。
每一个数据模块都可以定义它自己的数据库连接配置,按照模块的继承原则子模块可以继承父模块的数据库连接配置。
- 语法: <config name=”dataSource” value=”连接参数”/>
- 实例: <config name=”dataSource” value=”java:comp/env/system” />
- 说明:配置的JNDI名称和应用服务中设置的JNDI名称一致,例如 对tomcat下的Oracle数据的配置为“…\apache-tomcat\conf\server.xml”:
<Resource name="system" auth="Container" type="javax.sql.DataSource" driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:oci:@oracle73" username="sa" password="sa" maxActive="10" maxIdle="5" />
1.2.2 存取设置
本地存储:定义哪些概念存储到本模块(即数据模块)指定的数据库。
- 语法:<store name=”概念名”/>
- 说明:概念名:存储到本模块(即数据模块)中的概念。
- 案例:<store name=”SA_OPOrg”/>
1.2.3 映射定义
实现本体到数据库的映射定义。
- 语法:
<mapping concept=""> <table type=" " name="a"> <key field="" type="" /> <index field="" type="" /> <item relation="" field="" type="" /> …… <discriminator field="" value="" /> </table> …… </mapping>
- 说明:
concept:指定映射的概念名称。
table标签:概念映射到的表。table包含的属性和标签包括:
type属性:表示映射表的类型,它的取值范围是{owner-table,relation-table},owner-table表示主表,一个概念只能映射到一个主表上;relation-table表示关系表。
name属性:表名
key标签:指向当前概念的主键或者外键,只允许有一个key标签。field表示字段,允许指定多个字段做联合主键,使用“,”分隔,type表示主键的数据类型,当是联合主键时,type也是使用“,”分隔各个字段的类型。
item标签:表示一个关系的映射,可以有多个。field属性表示字段名,type属性表示字段的数据类型。
discriminator标签:鉴别器,用以多个概念映射到一张表上时,根据鉴别字段的值来识别当前行的数据是哪个概念的实例。field表示鉴别字段名,value表示鉴别字段的值。
index标签:定义数据库的索引,name表示索引的名称,field表示索引的字段,允许指定多个字段做索引,使用“,”分隔,type表示索引的类型,当前只支持“UNIQUE”和“NORMAL”。
- 案例:
一对一关系的基本映射案例:
<mapping concept="SA_OPOrg"> <table type="owner-table" name="SA_OPOrg"> <key field="sID" type="String"/> <item relation="sFName" field="sFName" type="String"/> <item relation="sFID" field="sFID" type="String"/> </table> </mapping>
说明:概念SA_OPOrg映射到表 SA_OPOrg中,主键对应的字段名为sID。关系sFName、sFID都是一对一关系,在表SA_OPOrg中分别映射的字段名为sFName、sFID。
多对多关系的映射案例:
<mapping concept="SA_Task"> …… <table type="relation-table" name="SA_TaskRelation"> <key field="sTaskID1" type="String"/> <item relation="sNext" field="sTaskID2" type="String"/> </table> </mapping>
说明:概念SA_Task有一个多对多关系sNext,表示下一个任务,映射到一张关系表上。上面的Mapping说明:type=”relation-table”表示表SA_TaskRelation是关系表,指向当前SA_Task的外键是sTaskID1, 关系sNext映射到的字段为sTaskID2。