使用 InfoSphere Data Architect 8.5 为已为 DB2 创建的全局临时表建模,第 1 部分: 入门

业务应用程序通常需要通过一系列的操作来重用来自一组数据源的聚合数据或已处理的数据。生成用于分析和制定决策的报表就是这方面的一个例子。为了支持这一需求,一些数据库供应商引入了临时表支持,临时表可以存储这类聚合数据或已处理的数据。从 IBM® InfoSphere® Data Architect 8.5 开始,就可以对已为 DB2® for z/OS® 10 和 DB2 for Linux®, UNIX®, and Windows® 9.7 创建的全局临时表 (CGTT) 进行建模。在这个由两部分组成的系列文章中,将使用 InfoSphere Data Architect 8.5 向您演示如何使用 DB2 for z/OS 10 和 DB2 for Linux, UNIX, and Windows 9.7 加速数据建模。

Ajith Kumar Punnakula, 系统软件工程师, IBM

作者 Ajith Punnakula 的照片Ajith Kumar Punnakula 是位于印度班加罗尔的 IBM 实验室的一名系统软件工程师,在 Java、Eclipse 和数据库相关技术方面有 5 年的工作经验。他拥有印度科学理工学院的微电子系统硕士学位。



Rahul Jain, 资深软件工程师, IBM

作者 Rahul Jain 的照片Rahul Jain 是位于印度班加罗尔的 IBM 实验室的一名资深软件工程师。他目前是 InfoSphere Data Architect 开发团队的一名成员。他擅长的领域包括数据建模和 Eclipse 平台技术。Rahul 拥有印度国际信息学院的信息技术硕士学位。



Balaji Kadambi, 顾问软件工程师, IBM

Balaji Kalambi 的照片Balaji Kadambi 是位于印度班加罗尔的 IBM 实验室的一名顾问软件工程师。他目前是 InfoSphere Data Architect 开发团队的一名成员。他擅长的领域包括数据建模和数据库。Balaji 有超过 13 年的商业软件行业工作经验。



2013 年 9 月 10 日

简介

本系列文章由两部分组成。本文(第 1 部分)将介绍如何为数据库 DB2 for z/OS 10(新功能模式)和 DB2 for Linux, UNIX, and Windows 9.7 创建的全局临时表 CGTT 模型,以及如何利用 InfoSphere Data Architect V8.5 执行下列任务。

  • 使用 CGTT 为 DB2 for z/OS 10(新功能模式)和 DB2 for Linux, UNIX, and Windows 9.7 创建一个物理数据模型。
  • 使用特定于 CGTT 的可在数据库服务器上运行的语法生成一个 DDL。

本系列第 2 部分将介绍如何对已创建的全局临时表的增量更改进行比较和同步,并将它们部署到数据库服务器中。 这一部分将对 InfoSphere Data Architect 8.5 的以下特性进行探讨。

  • 使用 CGTT 对数据库进行反向设计,以创建一个物理数据模型。
  • 在物理数据模型下修改 CGTT,通过在服务器上运行生成的 delta DDL,将更改传播到数据库。

问题描述

如果您是一家公司 IT 部门员工。公司花钱为其客户执行项目。您的团队需要开发一个项目成本控制应用程序,该应用程序可生成项目执行报告,以便帮助管理部门制定决策。以下要求是应用程序必须考虑的。

  • 企业可为同一个客户执行多个项目。
  • 按照商定的条款,在完成项目后,客户需要支付一定的费用。
  • 项目应有一个开始日期和一个结束日期。
  • 必须将企业员工分配到具体的项目。员工在任一时间点只能从事一个项目工作。
  • 企业员工需要按月支付薪酬。
  • 项目费用分为几下几类:
    • 薪金
    • 原材料
    • 制造
    • 包装
    • 运输

管理人员需要使用以下报告进行分析和制定决策

  1. 已完成项目的单独项目成本报表。
    • 项目 ID 和项目名称。
    • 完成项目后的费用由客户支付。
    • 各种项目成本费用。
    • 项目执行总费用。
    • 利润率 – ((价格-总产成本) / 总成本) × 100。
  2. 已完成项目的财年整合报表
    • 财务年度和执行的项目数。
    • 项目收入。
    • 项目执行总费用
    • 利润率 – ((项目收入 - 项目总成本) / 项目总成本) × 100。
  3. 目前正在运行的、成本已超出报价的项目。
    • 项目 ID 和项目名称。
    • 价格。
    • 目前已发生的总成本。
    • 成本超支。
    • 客户 ID 和客户名称。
  4. 为客户执行的完成项目利润率报表
    • 客户 ID 和客户名称。
    • 项目号。
    • 执行项目的总收入。
    • 执行项目已发生的总成本。
    • 利润率。

模型设计

您可以创建一个简化版的逻辑数据模型 ProjectCostModel.ldm,它包含 建模问题描述中列出的需求的字符实体、属性和关系 ,如图 1 所示。

图 1. 简化的项目成本控制系统逻辑数据模型
该图显示了简化的项目成本控制系统逻辑数据模型

具体项目 PROJECT 实体模型信息如下。

  • PROJECT_ID:项目的惟一标识符代码。
  • PROJECT_NAME:项目名称。
  • PROJECT_DESCRIPTION:项目描述。
  • PROJECT_PRICE:项目价格。
  • PROJECT_START_DATE:项目开始日期。
  • PROJECT_END_DATE:项目结束日期。
  • PROJECT_STATUS:表明项目正在运行或已完成。
  • CUSTOMER_ID:客户的惟一标识符代码。

具体客户的 CUSTOMER 实体模型信息如下。

  • CUSTOMER_ID:客户的惟一标识符代码。
  • CUSTOMER_NAME:客户名称。
  • CUSTOMER_DESCRIPTION:客户描述。

特定员工的 EMPLOYEE 实体模型如下。

  • EMPLOYEE_ID:员工的惟一标识符代码。
  • EMPLOYEE_NAME:员工名。
  • EMPLOYEE_DESIGNATION:员工编号。

薪金水平 SALARY 实体模型信息如下。

  • EMPLOYEE_ID:员工的惟一标识符代码。
  • SALARY_MONTH:薪金支付月份。
  • SALARY_YEAR:薪金支付年份。
  • SALARY_AMOUNT:薪金数额。

具体项目非薪金费用 PROJECT_EXPENSES 实体模型信息如下。

  • PROJECT_EXPENSES_ID:项目费用惟一标识符代码。
  • PROJECT_EXPENSES_CATEGORY:薪金之外的其他费用种类。
  • PROJECT_EXPENSES_AMOUNT:费用总额。
  • PROJECT_ID:项目的惟一标识符。

将逻辑数据模型转化成物理数据模型

逻辑数据模型设计已得到业务用户的批准。要建模物理存储,必须将逻辑数据模型转化成您使用的 DBMS 物理数据模型。

执行以下步骤进行模型转化。

  1. 右键单击逻辑模型,然后从上下文菜单中选择 Transform to Physical Model,如图 2 所示。
    图 2. 将逻辑数据模型转化成物理数据模型
    该图显示了将逻辑数据模型转化成物理数据模型的屏幕截图
  2. Target Physical Data Model 页面中选择 Create new model 选项。
  3. Physical Data Model File 页面中指定文件名,然后选择您所使用的数据库详细信息。在图 3 中,DB2 for z/OS V10(新功能模式)被选中。
    图 3. 指定转换的数据库、版本和位置
    该图显示如何指定显示的数据库、版本和位置
  4. Options 页面中,在 Schema name 字段中指定 COST_MODEL_SCHEMA,如图 4 所示。其他选项保留默认值。
    图 4. 选项页面
    该图显示了在 Option 页面选择 COST_MODEL_SCHEMA
  5. Output 页面中查看转化状态,然后单击 Finish 生成物理数据模型。物理数据模型 ProjectCostModel.dbm 是从逻辑数据模型中创建的。

查看生成的物理数据模型

查看 Data Project Explorer 中的物理数据模型,如图 5 所示。

图 5. 查看 Data Project Explorer 中的物理数据模型
该图显示了 Data Project Explorer 中的物理数据模型

在查看物理数据模型的过程中,您会发现下列项是真的。

  1. COST_MODEL_SCHEMA 模式已创建。
  2. 已经创建了 6 个表:CUSTOMER、EMPLOYEE、EMPLOYEE_X_PROJECT、PROJECT 、PROJECT_EXPENSES 和 SALARY,这些表的列是从逻辑数据模型属性中转换而来的。

对于分配给员工的每个项目,员工都有一个开始日期和一个结束日期。因此,需要将 DATE 类的 START_DATE 和 END_DATE 列添加到 EMPLOYEE_X_PROJECT 表。

物理逻辑模型的对话框视图如图 6 所示。

图 6. 物理数据模型的对话框视图
该图显示了物理数据模型的对话框视图

创建全局临时表支持

报表需求需要使用从多个表中获取的已处理过的数据。这类聚合数据和处理过的数据通常位于要生成的报表之间。在这种情况下,数据可能被多次获取、聚合和处理,从而导致报表生成时间增加。

这种情况通过可以使用已创建的全局临时表来避免,该表将存储这类常见的聚合数据和已处理数据,这些数据是许多报表暂时需要的。

对于当前需求,所有报表都需要了解项目的各种成本类别下的费用。这些数据可计算一次,然后存储在临时表中,供所有报表重用。

项目费用可分成薪金和非薪金(原始材料、制造、包装和运输)费用。

项目的薪金费用是使用 EMPLOYEE_X_PROJECT 和 SALARY 表中的数据进行计算的。如果一个员工在某个月做了多个项目,那么薪金将根据该员工这个月进行每个项目的天数按比例分摊到单个项目中。

非薪金项目存储在 PROJECT_EXPENSES 表中。同一个成本类别下的多个费用项被聚合和存储到一个临时表中。

通过将下列数据存储在一个临时表中,我们可以看到报表生成响应时间大大减少了。

  • 项目薪金总额
  • 项目的已发生费用的总额
  • 不同成本种类的项目费用

可以创建两个已创建的全局临时表来保存上述数据:

  1. TEMP_PROJECT_COST_SUMMARY
    • PROJECT_ID:项目的惟一标识符代码。
    • SALARY_COST:该项目已发生的薪金费用。
    • TOTAL_COST:该项目已发生的费用总额。
    • PROJECT_PRICE:该项目的价格。
  2. TEMP_PROJECT_EXPENSES
    • PROJECT_ID:项目的惟一标识符代码。
    • PROJECT_EXPENSES_CATEGORY:除薪金外的费用种类。例如:原料、制造费用等。
    • AMOUNT:某一个费用类下的项目费用总额。这是该项目某个成本类别下的所有已发生费用的总和。

可以执行以下任务,创建一个 CGTT 来存储该常用数据。

  1. 在 Data Project Explorer 中右键单击 COST_MODEL_SCHEMA
  2. 单击 Add Data Object 并选择 Created Global Temporary Table,如图 7 所示。
    图 7. 添加 CGTT 支持
    该图将向您显示了如何使用已创建的全局临时表添加 CGTT 支持
  3. 将表重命名为 TEMP_PROJECT_COST_SUMMARY
  4. 重复第 1 步和第 2 步。
  5. 将表重命名为 TEMP_PROJECT_EXPENSES
  6. 对于 DB2 for Linux, UNIX, and Windows,您可以为 CGTT 显式设置 On CommitLogging 属性,如图 8 所示。
    图 8. DB2 Linux, UNIX, and Windows 的 CGTT 属性页面
    该图显示了 DB2 Linux, UNIX, and Windows 的 CGTT 属性页面,还显示了如何显式设置属性。
  7. 将以下列添加到表 TEMP_PROJECT_COST_SUMMARY:PROJECT_ID、SALARY_COST、TOTAL_COST、PROJECT_PRICE,如图 9 所示。
  8. 将以下列添加到表 TEMP_PROJECT_EXPENSES、PROJECT_ID、PROJECT_EXPENSES_CATEGORY 和 AMOUNT,如图 9 所示。
    图 9. 添加列
    该图显示了列的添加。

生成 DDL

执行以下步骤,生成 DDL 脚本来部署模型,然后与数据库管理员共享该脚本,以便在数据库服务器上运行。

  1. Data Project Explorer 中右键单击 COST_MODEL_SCHEMA 模式。
  2. 选择 Generate DDL,如图 10 所示。
    图 10. 生成新模式 DDL
    该图显示了生成新模式 DDL 的选项
  3. 完成 Generate DDL 向导页面。不要改变 OptionsObjects 页面的默认设置。
  4. Save and Run DDL 页面中指定一个文件名,如图 11(DB2 for z/OS)和图 12(DB2 for Linux, UNIX, and Windows)所示。记住该文件名,以便能够与数据库管理员轻松地共享该文件,让他们可以部署您的更改。
    图 11. DB2 for z/OS 的 Save and Run DDL 页面
    该图显示了 DB2 for z/OS 的 Save and Run DDL 页面
    图 12. DB2 for Linux, UNIX, and Windows 的 Save and Run DDL 页面
    该图显示了 DB2 for Linux, UNIX, and Windows 的 Save and Run DDL 页面
  5. 如果您的组织允许您直接将数据模型部署到服务器上,那么您可以在单击 Next 之前选择 Run DDL on Server 选项。
  6. Select Connection 页面选择一个现有连接,如图 13 所示,或者通过单击 New 指定一个新连接。
    图 13. 选择一个连接
    该图显示了现有或新连接的 Select Connection 页面。
  7. 验证您在页面上选择的选项,然后单击 Finish 生成 DDL。

检查数据库服务器中部署的模型

在数据库管理员运行了 DDL 脚本之后,您可以通过将文件夹扩展到 COST_MODEL_SCHEMA 模式来检查 Data Source Explorer 中部署的更改。通过查看该模型,验证表 CUSTOMER、EMPLOYEE、EMPLOYEE_X_PROJECT、PROJECT、PROJECT_EXPENSES 和 SALARY 是否位于 Tables 文件夹中,TEMP_PROJECT_COST_SUMMARY 和 TEMP_PROJECT_EXPENSES 是否位于 Temporary Tables 文件夹中,如图 14 所示。

图 14. 查看部署的项目成本模型
该图显示了数据库管理员运行 DDL 脚本之后查看部署的项目成本模型

结束语

在本文中,您学习了如何为一个已经为某个项目成本控制系统创建的全球临时表需求进行建模。还学习了 InfoSphere Data Architect 8.5 如何为 DB2 for z/OS 和 DB2 for Linux, UNIX, and Windows 提供一个建模临时数据需求的便利方式。

您不用费丝毫力气就可以创建一个具有 CGTT 支持的物理数据模型。然后,您还可以使用临时特定表语法生成 DDL 脚本,该语法是将这些变更部署到目标数据库所必需的。

在本系列的第 2 部分,您将学习如何使用 InfoSphere Data Architect 8.5 在一个已创建的全局临时表中进行增量更改,可以对该表进行比较和同步,并将它部署到数据库服务器上。

参考资料

学习

获得产品和技术

  • 下载 InfoSphere Data Architect 8.5.0 试用版,并学习如何有效创建一个双时态模型。
  • 使用 IBM 试用软件 构建您的下一个开发项目,可以直接从 developerWorks 中下载这些软件。
  • 以最适合您的方式 评估 IBM 产品:下载产品试用版,在线试用产品,在云环境下试用产品,或者在 SOA Sandbox 中花费几个小时来学习如何高效地实现面向服务的架构。

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Information Management
ArticleID=944375
ArticleTitle=使用 InfoSphere Data Architect 8.5 为已为 DB2 创建的全局临时表建模,第 1 部分: 入门
publish-date=09102013