英文原文 |
用 IBM Rational XDE Developer for Java 为 DB2 UDB 数据库建模
Suita Gupta
(suitag@my.ibm.com),Developer Technical Support,IBM |
![]() |
内容 | ||
![]() | ||
简介 | ||
![]() | ||
开始之前 | ||
![]() | ||
为数据库和表空间建模 | ||
![]() | ||
表及其关系 | ||
![]() | ||
![]() | ||
存储过程 | ||
![]() | ||
触发器 | ||
![]() | ||
基于数据模型生成 DDL 脚本 | ||
![]() | ||
连接数据库 | ||
![]() | ||
逆向工程 | ||
![]() | ||
比较和同步模式 | ||
![]() | ||
结束语 |
简介
参与数据库应用程序开发的每一个人都遵循着某套方法。而您所选择的方法将帮助您分析需求,以及开发和交付最终的产品。这套方法中最重要的部分就是,基于业务需求的数据库设计和建模。在这篇文章中,我将谈论使用“Rational® XDE Developer for Java”进行的,专门针对“DB2® Universal Database”的设计和建模!
统一建模语言(UML)是用于为业务和软件应用需求建模的标准的图形化表示法。过去的几年里,已经开始广泛地将 UML 用于面向对象的软件开发中。除了适用于为对象建模之外,UML 还适用于设计和建立数据存储模型,以供您的应用程序使用。基本上,数据建模包括分析客户需求,用以开发一个客户的数据需求模型,然后,以该模型为蓝图或架构为应用程序构建数据库。
本文将向您展示基于已熟悉的 DB2 Sample 数据库来生成一个数据库模型是多么容易。在文章的末尾,您将看到如何为 DB2 Sample 数据库及其中的一些数据对象建模。我们还将向您展示如何从已完成的模型生成 DDL 脚本,以及如何使用这些脚本来创建最终的 DB2 数据库。
我们将使用 Rational XDE Developer for Java(版本:2003.06.00)和 IBM DB2 Universal Database v8.1 进行建模。Rational XDE 支持遵循 ANSI SQL 92 标准的从 v5.2 开始的所有 DB2 UDB 版本和 DB2 for OS/390® 5.x、6.x、7.x 的数据建模。Rational XDE 也可以用于为 Oracle、Sybase 和 SQL Server 数据库建模。
数据建模的好处
数据建模有许多优点,可以使开发小组中的数据设计师和管理员以及所涉及的程序员均从中受益。
- 数据库设计师可以使用 Rational XDE 等工具来建立和可视化数据库模型,确保数据库规则,添加不同的数据库对象,并设置关系。
- 数据库管理员既可以为一个已经存在的数据库创建模型,也可以从模型生成 DDL 并为特定的实现创建数据库。
- 数据模型有助于应用程序开发人员更好地理解应用程序的总体架构,尽管一般说来,他们不需要深入了解数据库体系结构的细节。他们可以用数据模型来建立类模型,例如由表结构产生。
- 数据模型对于终端用户也十分有用,可验证是否已准确地捕获所有的数据需求。
如果项目中的所有建模都是用 UML 完成的,那么该数据模型将完全匹配其余的系统设计,并且帮助整个小组无缝地协同工作。
开始之前
在开始创建数据库模型之前,让我们来看一个 Rational XDE 的屏幕快照,以及我们将用于建立数据库模型的菜单和选项,如 图 1 所示:
我们需要为数据模型创建一个项目。单击 File -> New -> Project。选择创建 Data Modeling Project 并命名为“Data Model”。一旦创建了该项目,您就可以在 Model Explorer 窗格上看到它了,如下面的 图 2 所示。
其中,已经为您创建了两个模型 —— 一个物理数据模型和一个逻辑数据模型。数据架构师和数据库设计师通常使用逻辑数据模型,以一种独立于特定数据库实现的形式捕获数据需求。逻辑模型是用于与业务风险承担者(stakeholder)进行通信以确保清晰地捕获数据需求的好工具,因为它没有牵扯到特定数据库的细节。数据库设计师通常将逻辑模型细化为一个或多个“范式”,以便消除数据重复和提高最终设计的质量。一旦对逻辑数据需求的准确性有了十足把握,您就可以将该逻辑模型转换为物理数据模型,从而将该模型匹配特定的目标数据库。然后,可以针对特定的数据库系统或应用程序,改进和优化该物理数据模型。
逻辑数据模型的使用不属于本文的讨论范畴。接下来,我们将关注物理数据模型层次上的数据库设计。
为数据库和表空间建模
首先,我们将创建数据库模型。正如您将在下面 图 3 中看到的,数据库是可以进行建模以及在数据模型中用 UML 符号 <<Database>> 表示的最大元素。Rational XDE 允许您选择任何一种它所支持的 DBMS 作为数据模型的实现数据库。本文中,我们选择了 DB2 UDB v8 来演示数据建模的过程。
创建数据库组件
在 Model Explorer 中,右击 Main ->Add Data Modeler ->Database。
然后,单击 Model Explorer 中新创建的数据库组件,输入一个名称。我们将 sampledb 作为我们数据库的独有名称。
右击 Model Explorer 中的 sampledb,并单击 Data Modeler -> Open Specification。
在 Database Specification 对话框中,在 Database 列表中选择 IBM DB2 8.x 作为目标数据库。
单击 OK,并将该数据库组件拖放到 Diagram 视图上。
Rational XDE 允许您建立表空间模型,并将表指派到这一表空间。我们将看到如何建立一个名为 sample_tbsp 的、已分配一个容器的表空间模型。请注意,您在以下步骤中指定的容器路径应该已经存在。
在进一步继续之前,您可以通过右击 Model Explorer 中的 Logical Data Model 来选择逻辑数据模型。您可以随时使用热键 Ctrl+S 保存您的模型。
创建表空间
在 Model Explorer 中,右击数据库后单击 Add Data Modeler -> Tablespace。
在 Model Explorer 中,右击新的表空间并单击 Data Modeler -> Open Specification。
在 General 选项卡中,输入表空间的名称,例如 sample_tbsp。您还可以指定其他细节,例如表空间的类型、扩展块大小、预取大小、页面大小以及缓冲池名称。
完成后,单击 OK 并将这个表空间组件拖放到 Diagram 视图上。您一旦建立了数据库模型和表空间模型,Rational XDE 就会自动地创建数据库和表空间之间的依赖关系,如下面图 8 所示:
创建容器
在 Model Explorer 中,右击一个表空间后单击 Data Modeler -> Open Specification。
在 Container 选项卡中,单击 NEW 图标,并输入新容器的路径名称。
检查点:您的模型现在应该如 图 10 所示:
表及其关系
我们将为原有的 sample 数据库中的两个表(employee 表和 department 表)建模。我们还将为这两个表之间的参照完整性关系建模。
创建表组件的步骤:
- 在 Model Explorer 中,右击数据模型,然后单击 Add Data Modeler ->Table。
- 在 Table Specification 对话框的 General 选项卡中,指定表名称,并在 Columns 选项卡中添加该表的列。您还可以为该表指定主键。
- 单击 OK,您将在 Model Explorer 中看到这个表组件。将之拖放至 Diagram 视图上。
我们将分别为 employee 表和 department 表执行以上步骤。对于 employee 表,我们将省略“ workdept”列的创建。在我们建立 employee 表和 department 表之间的参照完整性时,将自动为我们创建该列。
现在,我们将建立 employee 表(外键:workdept)和 department 表(主键:deptno)之间的参照完整性。可以通过创建这两个表之间的“identifying”关系来完成:
- 从工具箱的 Data Modeler 列表中选择 Identifying Relationship 选项,然后先单击 Diagram 视图上的父表 department 组件,再单击子表 employee 组件。
- 在 Relationship Specification 对话框中,您可以指定子角色和父角色。
- 在 Relationship Specification 对话框的 Migrated Keys 选项卡中,您还可以修改 employee 表中的外键列名称:
您将看到 employee 表中添加了一个新的列。在 Table Specification 对话框的 Column 选项卡中,您可以修改“workdept”列在 employee 表中的位置,如下面 图 15 所示:
您的模型应该与下面 图 16 所示相类似:
视图
Rational XDE 允许您基于表或 SQL 查询来创建视图。这些查询可以包括 WHERE、GROUP BY 或 ORDER BY 子句。您既可以手工为视图指定 SQL 查询,也可以在 View Specification 对话框中为视图选择各个列。
以下是创建视图组件的步骤:
- 在 Model Explorer 中,右击模型后单击 Add Data Modeler -> View。一个新的视图将显示在 Model Explorer 中。
- 右击这个新的视图,然后单击 Data Modeler > Open Specification。这将打开 View Specification 对话框。
- 在 General 选项卡中,在 Name 框中输入“emp_view”作为视图名称。
- 单击 OK 并将该视图组件拖放至 Diagram 视图上。
为该视图指定列:
- 从工具箱的 Data Modeler 列表中选择 View Dependency,然后先单击图(diagram)上的 View 组件(emp_view),再单击源表组件(employee 表)。
- 源表中的所有列都将填充到您的视图中。
- 此时,您可以通过启用 View Specification 对话框的 General 选项卡中的“User Defined”复选框,为视图指定定制的 SQL 查询:
- 然后在同一对话框的 SQL 选项卡中输入定制的 SQL 查询。完成后单击 OK。
存储过程
Rational XDE 还允许您为数据库建立存储过程的模型。所支持的 DBMS 有:
- IBM DB2 UDB 5.2、6.1、7.0 和 8.0
- IBM DB2 MVS 5.x、6.x 和 7.x
- Oracle 7.3、8.x、和 9i for Windows NT
- Microsoft SQL Server 6.5、7.0 和 2000
- Sybase Adaptive Server 12.x
在 Rational XDE 中,术语“存储过程”包括常规的存储过程(返回多个结果)和存储函数(返回标量值)。这两种存储过程都可以用相应的参数和一个动作体(action body)来进行定义和建模。
可是,请牢记数据库和存储过程之间必须存在 实现关系(realization relationship),才能对目标数据库执行 DDL。在 Rational XDE 中,存储过程在存储过程容器中被分组。在为该模型生成 DDL 之前,需要通过实现关系将表、存储过程和视图指派给该数据库。
创建存储过程组件的步骤:
- 在 Model Explorer 窗口中,右击 Main。
- 选择 Add Data Modeler 并单击 Stored Procedure Container。这将在数据模型中创建一个默认名为“ProcedureContainer1”的存储过程容器。
- 您可以使用该容器默认的名称,也可以通过位于 Model Explorer 窗口之下的 Properties 窗口修改它。
- 右击存储过程容器“ProcedureContainer1”,然后,选择 Add Data Modeler 并单击 Stored Procedure。这将添加默认名为“Procedure1”的存储过程容器。同样地,您可以使用这个默认名称,如果希望,也可以通过 Model Explorer 窗口之下的 Properties 窗口来提供另一名称。
- 您还必须添加从数据库到存储过程的“数据库实现”关系,用以为该存储过程生成 DDL。
- 为了添加“数据库实现”关系,单击工具箱中的 Data Modeler,下滚该列表至“database realization”,单击选择它。
- 然后,先单击数据库组件,接着再单击存储过程容器组件以创建实现关系。该数据模型将如下面 图 20 所示:
- 此时或稍后,可以通过右击 Model Explorer 中的存储过程,选择 Data Modeler 并单击 Open Specification,来修改存储过程的名称和签名(参数等等)。
- 这将打开 Stored Procedure Specification 对话框。
- 在该对话框中,您可以通过 General 选项卡修改过程名、编写语言等,通过 Parameters 选项卡添加参数,以及最后通过 Action Body 选项卡指定一个动作体,如下面图 21 所示:
触发器
XDE 允许您创建用户定义的触发器,用以在数据库中实施业务规则。
为触发器建模:
- 在 Model Explorer 中右击所需的表。
- 选择 Data Modeler 并单击 Open Specification 以打开该表的具体指定(Specification)。
- 在 Specification 对话框中,单击 Triggers 选项卡,然后单击 New,为该表建立一个新的触发器模型。
- 您可以创建一个“after”或“before”触发器,以及为该触发器创建一个动作体。下面的 图 22 说明了是如何进行的:
基于数据模型生成 DDL 脚本
Rational XDE 提供了 Forward Engineering 向导,用以为整个数据库或数据模型中的指定组件生成数据定义语言(DDL)脚本。Rational XDE 生成的 DDL 遵循 ANSI SQL 92 标准。XDE 还允许您对目标数据库执行所生成的 DDL,而目标数据库是您在启动数据模型项目之前指定的。因此,要确保您已经正确连接了该目标数据库。同时,该数据模型中的所有数据库组件都必须利用前面小节中所阐明的关系连接该数据库组件。如果没有为任何组件进行该工作,那么就不会为特定的组件生成 DDL。
为了生成 DDL 脚本:
在 Model Explorer 中,右击一个现有的数据库、包或表,然后单击 Data Modeler > Forward Engineer。这将打开用于数据建模的 Forward Engineering Wizard 对话框。然后按照该向导中的指示进行。下面的图 23 是通过 Forward Engineering 向导为整个数据库生成 DDL 的屏幕快照:
连接数据库
Rational XDE 允许您连接一个 DBMS,并且执行所生成的 DDL 以创建数据库对象。所支持的 DBMS 有:
- IBM DB2 UDB 5.2、6.1、7.0 和 8.0
- IBM DB2 MVS 5.x、6.x 和 7.x
- Oracle 7.3、8.x 和 9i for Windows NT
- Microsoft SQL Server 6.5、7.0 和 2000
- Sybase Adaptive Server 12.x
- IBM DB2 APP Driver(ODBC)
- IBM DB2 UDB JDBC Driver
- Oracle OLE DB Provider
- Oracle Thin JDBC Driver
- OLE DB Provider
- MS OLE DB for ODBC
- MS OLE DB for Oracle(MDAC)
- MS SQL OLE DB Provider
- Sybase ASE ODBC Driver
逆向工程
我们已经介绍了正向工程(forward engineering)。通过逆向工程(reverse engineering),我们可以为已经存在的数据库建立模型。这将允许我们修改该模型,例如添加表、存储过程、触发器等,然后通过生成和执行被修改模型的 DDL 来进行正向工程(forward engineer)。
对数据库进行逆向工程:
- 在 Model Explorer 中,右击该数据模型并单击 Data Modeler -> Reverse Engineer。这将打开 Reverse Engineering 向导。
- 按照向导中的指示选择数据库以及逆向工程过程中所包含的所有元素。
比较和同步模式
Rational XDE 中的比较和同步(Compare and Sync)功能用于确保数据模型与所生成的 DDL 或目标数据库一致。比较和同步不包括图和比较模型之间的关系。在比较数据模型和数据库以及使之同步之前,请验证已经正确连接数据库,并且正确登录,口令无误。
将数据模型与 DDL 文件或数据库进行比较并使之同步
- 在 Model Explorer 或图中,右击一个现有的数据库,然后单击 Data Modeler > Compare and Sync。
- 这将打开数据模型的 Database Synchronization Wizard。按照向导中的指示进行。
- 如果将逆向工程所生成的数据模型与 DDL 进行比较,您就必须将 Owner/Schema 属性重新设置为您进行逆向工程的模式名。对于比较中包含的每个数据模型元素,您都必须完成该设置。
- 您应将需要在比较和同步中包含的所有元素指派给数据模型数据库。在比较过程中,XDE 会忽略所有未指派给数据模型数据库的元素。
- 您的数据模型数据库必须使用与所比较的 DDL 或 DBMS 数据库相同的名称和目标数据库。
- 如果将您数据模型中的视图和 DDL 中的视图进行比较,DDL 就必须使用全限定名,尤其是在该视图的 SQL 语句中。如果该 DDL 未使用全限定名,那么这些视图在比较过程中看起来就不同,而您就必须手工查看每个视图的 SQL 语句,以发现真正的语法差别。
结束语
最后,下面的 图 25 展示了我们的测试项目“Data Model1”现在的数据库模型。
最后,我们概述了使用 Rational XDE 进行数据库建模的过程,但没有讨论太多细节,以免使初级用户无法承受。这个简单示例已经为您开了个头,您可以开始使用该工具来满足您自己的数据库设计和建模需求。要获得该产品的更多信息,请从 Help 菜单查看 Rational XDE 的在线帮助。
注意
- Forward Engineering 向导未在 DDL 文件中插入或生成数据库 DDL(CREATE DATABASE 命令)。这意味着在对目标数据库执行 DDL 脚本之前,需要手工创建目标数据库。
- 本文采用的 Rational XDE 版本为 2003.06.00。在建立存储过程模型时,您可能会发现如果在存储过程具体指定的 Action Body 选项卡中指定了一个动作体,该存储过程的 DDL 中却没有这个动作体。该缺陷在 2004 年 4 月 9 日发布的 Service Release 2(fixpack 2)中得到了修复。关于当前修正版的更多信息,请查看 www.rational.com。
- 在为 DB2 存储过程指定动作体时,必须使用非传统的 SQL 语句终止字符,例如“@”等,因为分号在存储过程体中用于终止存储过程动作语句。然而,在通过 Forward Engineering 向导生成存储过程 DDL 时,会在“@”后面额外生成一个分号,所以“@”是不需要的,否则 DB2 的 SQL 编译器会发出错误。
- 可能需要编辑所生成的 DDL 脚本,以确保所使用的语句终止字符是正确的。
关于作者
Suita Gupta 是 WebSphere Competency Center 小组的技术支持代表。她具有应用程序开发和管理方面的 DB2 认证。在 WebSphere 支持小组工作之前,她在 Developer Relations DB2 Technical Support 小组中研究各种 DB2 应用程序的开发和管理问题。您可以通过 suitag@my.ibm.com 与 Suita 联系。
Nanda Pilaka 是德克萨斯州达拉斯 Content Manager Business Partner Support 小组的软件工程师。他具有应用程序开发和管理方面的 DB2 认证。在 Content Manager 支持小组工作之前,他在 IBM 达拉斯的 Developer Relations DB2 Technical Support 小组中研究各种 DB2 应用程序的开发和管理问题。您可以通过 nandap@us.ibm.com 与 Nanda 联系。