第3章 业务数据

优质
小牛编辑
128浏览
2023-12-01

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。