此示例将 SQL 脚本与 DB2 Universal 数据库配合使用,以从三个企业应用程序 (Clarify , SAP和 Siebel) 中查询包含三组数据的身份关系。
使用 IBM® Business Automation Workflow 关系服务来关联数据。 每个应用程序都包含类似的客户信息,具有用于关联各个应用程序之间信息的身份关系。
以下三个表按在每个数据库中的存储形式显示:
表 1. Clarify 客户
| 名字 |
姓氏 |
家庭电话 |
标识 |
| Jessica |
Reed |
111 111 11111 |
clarify_1 |
| Tara |
McLean |
333 333 33333 |
clarify_2 |
表 2. SAP 客户
| 名字 |
姓氏 |
家庭电话 |
标识 |
| Jessica |
Reed |
111 111 11111 |
sap_10 |
| Tara |
McLean |
333 333 33333 |
sap_8 |
表 3. Siebel 客户
| 全名 |
家庭电话 |
标识 |
| Jessica Reed |
111 111 11111 |
siebel_6 |
| Tara McLean |
333 333 33333 |
siebel_8 |
下表显示了客户业务对象定义名称和元素 (在 Integration Designer 中为每个数据库创建):
表 4. 每个数据库上的客户业务对象定义
| ClarifyCustomer |
SapCustomer |
SiebelCustomer |
| 元素 |
Type |
元素 |
Type |
元素 |
Type |
givenName |
string |
firstName |
string |
fullName |
string |
lastName |
string |
lastName |
string |
|
|
homePhone |
string |
homePhone |
string |
homePhone |
string |
clarifyId |
string |
sapId |
string |
siebelId |
string |
被定义用于关联各个数据库之间的客户信息的身份关系。 此关系(在本例中称为
ID)使用业务对象元素
clarifyId、
sapId 和
siebelId。 因为这些元素包含每个数据库的标识数据,并且该数据对于每个客户都唯一,所以使用这些元素。 下表描述了用于将关系中的不同数据库与
IBM Business Automation Workflow所使用的公共标识相关联的角色:
表 5. 标识关系定义
| 关系名称 |
角色名称 |
业务对象名称 |
键 |
ID |
GenCustomer |
GenCustomer |
genId |
ClarifyCustomer |
ClarifyCustomer |
clarifyId |
SapCustomer |
SapCustomer |
sapId |
SiebelCustomer |
SiebelCustomer |
siebelId |
关系全名为
http://CustomerModule/ID。 角色全名为
http://CustomerModule/ClarifyCustomer
http://CustomerModule/SapCustomer
http://CustomerModule/SiebelCustomer
您可以使用定义的关系来关联全部三个数据库中所包含的业务对象内的数据。 每个数据库中的客户标识数据通过共享实例标识来与其他数据库中的客户数据相关联。 例如,Tara McLean 在 Clarify 中标识为
clarify_3 ID,在 SAP 中标识为
sap_8,在 Siebel 中标识为
siebel_8。 唯一标识由
IBM Business Automation Workflow 关系服务生成。
提示: 您可以使用视图来浏览关系表内容。
您可以通过使用在公共数据库中创建的视图来定义多个关系实例。 从视图名称(使用先前描述的命名约定)到其对应关系角色的映射在公共数据库中的
RELN_VIEW_META_T 表中捕获。 下表显示了
ClarifyCustomer、
SapCustomer 和
SiebelCustomer 角色的视图名称示例:
表 6. RELN_VIEW_META_T 表
| VIEW_NAME |
RELATIONSHIP_NAME |
ROLE_NAME |
V_ID_CLARIFYCUSTOMER_098 |
http://CustomerModule/ID |
http://CustomerModule/ClarifyCustomer |
V_ID_SAPCUSTOMER_515 |
http://CustomerModule/ID |
http://CustomerModule/SapCustomer |
V_ID_SIEBELCUSTOMER_411 |
http://CustomerModule/ID |
http://CustomerModule/SiebelCustomer |
V_USASTATE_ABBREVIATION_DE8 |
http://CustomerModule/USASTATE |
http://CustomerModule/Abbreviation |
V_USASTATE_CODE_B32 |
http://CustomerModule/USASTATE |
http://CustomerModule/Code |
V_USASTATE_NAME_933 |
http://CustomerModule/USASTATE |
http://CustomerModule/FullName |
如
表 1 中所述,视图列定义将具有具有以下属性的
ROLE_ATTRIBUTE_COLUMN :
表 7. 视图列定义
| 列名 |
数据类型 |
值 |
描述 |
KEY_ATTRIBUTE_NAME |
取决于键属性类型 |
不为空 |
这是角色实例数据的存储位置。 对于身份关系,该列以键属性的名称命名。 例如,SAPCUSTOMER_SAPID 将使用
sapid 作为键属性名称,使用 sapcustomer 作为业务对象名称。 将为每个键属性定义一个列。 对于静态关系,该列名为 DATA |
下表显示了针对标识关系的公共数据库中的视图。
表 8. 视图列定义
| Clarify 角色视图 |
SAP 角色视图 |
Siebel 角色视图 |
INSTANCEID |
INSTANCEID |
INSTANCEID |
CLARIFYCUSTOMER_CLARIFYID |
SAPCUSTOMER_SAPID |
SIEBELCUSTOMER_SIEBELID |
STATUS |
STATUS |
STATUS |
LOGICAL_STATE |
LOGICAL_STATE |
LOGICAL_STATE |
LOGICAL_STATE_TIMESTAMP |
LOGICAL_STATE_TIMESTAMP |
LOGICAL_STATE_TIMESTAMP |
CREATE_TIMESTAMP |
CREATE_TIMESTAMP |
CREATE_TIMESTAMP |
UPDATE_TIMESTAMP |
UPDATE_TIMESTAMP |
UPDATE_TIMESTAMP |
ROLEID |
ROLEID |
ROLEID |
注: 视图中的所有列名都匹配,但键属性列名除外。
您必须首先知道角色运行时表视图的名称,然后才能对视图运行 SQL 以处理角色实例数据。 以下 SQL 脚本显示了使用 DB2 Universal 数据库的示例。 该示例假设每个数据库中的所有数据都已复制到关系数据库。 您可以使用
SELECT
INTO SQL 语句来复制数据:
//Create a table to store ID values from all three applications for each customer,
//and associate a unique instance ID with each customer. Use this table as a base
//source table to populate relationship tables.
CREATE TABLE joint_t (instanceid INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY,
clarify_id VARCHAR(10) NOT NULL,
sap_id VARCHAR(10) NOT NULL,
siebel_id VARCHAR(10) NOT NULL)
//Compare the name and home phone number across the three application tables.
//If a match is found, insert that person's ID value from each application table
//into the joint_t table. Associate the three ID values to a unique ID; this
//ID will be used later as the relationship instance ID.
INSERT INTO joint_t (clarify_id,sap_id,siebel_id)
SELECT A.ID, B.ID, C.ID
FROM clarifycustomer A,sapcustomer B, siebelcustomer C
WHERE A.homephone=B.homephone AND
B.homephone=C.homephone, AND
B.givenname=C.firstname AND
B.lastname=C.lastname AND
A.fullname=C.firstname CONCAT ' ' CONCAT C.lastname
//Create a sequence for each application; this sequence will be
//used later as a role ID in each role table.
CREATE SEQUENCE clarify_roleid MINVALUE 1 ORDER CACHE 100
CREATE SEQUENCE sap_roleid MINVALUE 1 ORDER CACHE 100
CREATE SEQUENCE siebel_roleid MINVALUE 1 ORDER CACHE 100
//Populate the role instance table for the CLARIFY role.
INSERT INTO V_ID_CLARIFYCUSTOMER_098 (instanceid, roleid,
clarifycustomer_clarifyid, status, logical_state, logical_state_timestamp,
create_timestamp, update_timestamp)
FROM joint_t
//Populate the role instance table for the SAP role.
INSERT INTO V_ID_SAPCUSTOMER_515 (instanceid, roleid, sapcustomer_sapid,
status, logical_state, logical_state_timestamp, create_timestamp,
update_timestamp)
SELECT instanceid NEXTVAL FOR sap_roleid, sap_id, 0, 0, current
timestamp, current timestamp, current timestamp
FROM joint_t
//Populate the role instance table for the SIEBEL role.
INSERT INTO V_ID_SIEBELCUSTOMER_AFC (instanceid, roleid, siebelcustomer_siebelid,
status, logical_state, logical_state_timestamp, create_timestamp, update_timestamp)
SELECT instanceid, NEXTVAL FOR siebel_roleid, sap_id, 0, 0, current timestamp,
current timestamp, current timestamp
FROM joint_t
将创建
joint_t 表以临时存储密钥值。 完成资源保存之后,您可以根据需要删除该表。 或者,也可以创建视图表或临时表。