级别: 中级 Azadeh Ahadian (azadeh@us.ibm.com), Eclipse 应用程序开发工具, IBM
2008 年 2 月 25 日 学习 pureQuery 的特性如何帮助面向对象开发人员使用传统的类建模来定义一组数据库关系工件。
简介
本系列的第一篇文章 “pureQuery:
IBM 最新的 Java 数据库应用编程范例”(developerWorks,2007 年 12 月)讨论了该项技术的基础知识,以及如何使用基于 Java™ 代码生成的对象化过程执行数据库访问和操纵。在本文中,您将学习 pureQuery 独有的一个特性,该特性可以很好地帮助面向对象开发人员使用传统的类建模来定义一组数据库关系工件。虽然 pureQuery 不是建模工具,不应该(也不能)将它与 IBM Rational Data Architect(RDA)之类的强大的企业数据建模和集成设计工具相比较,但是可以在资金不充足时考虑使用这种方法,利用它在 Eclipse IDE 中通过创建 Java 类来进行简单的物理数据建模。
数据建模与类建模
数据建模是指创建抽象的工件以描述如何表示、存储和使用数据的一个过程。在关系信息管理开发环境的上下文中,数据建模实际上就是研究和组织以数据为中心的结构的过程,这种结构可用于定义高级概念和物理数据模型。然后,这些结构可以在关系数据库管理系统中实现。
有时,数据建模被认为有别于类建模,因为数据建模严格地以数据为中心,而类建模则同时关注底层域的行为和数据两个方面。然而,从面向对象方法的角度来看,数据建模非常类似于类建模。
在数据建模中,首先确定实体类型(例如表),这在概念上类似于面向对象中的类,在面向对象方法中,类表示相似对象的一个集合(注意,类既有数据,又有通过操作定义的行为,而实体类型只有数据)。数据建模的下一步是为已确定的表指定数据实体属性(例如列,数据库中的列相当于类中的属性及其数据类型)。这同样类似于类建模,在类建模中,首先确定类,然后为每个类指定属性和操作。
至于操作,在面向对象的上下文中,可以认为存储过程在概念上类似于由底层数据库实现的全局方法。这些存储过程可能不会(大部分情况下都不会)作用于单个表中包含的数据。这意味着存储过程不同于类方法,因为它们不是表的一部分。但是,可以将存储过程看作并建模为包含所有其他类(例如表)的 master 类(即数据库本身)的一部分。
简言之,从概念上讲,数据建模开发范例的目标是设计数据表和分配给它们的数据列及类型,并定义表之间的关系,每个表属于一个指定的内部数据库模式。而且,除了定义和组织数据外,数据建模还隐式或显式地对底层结构中的数据施加约束。建模后的实现是指在给定的 RDBMS 中实际创建实体和它们的关系。
IBM 的 pureQuery 技术如何发挥作用?
IBM 提供了一个先进的企业数据建模和集成设计工具,即 IBM Rational Data Architect(RDA)。RDA 是一个完整的解决方案,可用于简化数据建模和集成设计,使架构师能够发现、建模、可视化和关联不同的、分布式的数据资产。不应该把 pureQuery 看作是由 RDA 提供的一个特性,它是一个实用程序,可以帮助 Eclipse 面向对象开发人员快速创建与他们良好定义的 Java 类相映射的简单数据库工件。
注意:pureQuery 是 IBM Data Studio 产品家族的一部分,可以免费下载(参见 参考资料 小节)。若要部署用 pureQuery 编写的应用程序,则需要购买 Data Studio pureQuery Runtime。
pureQuery 用于封装关系属性和操作的对象模型方法提供了一个独特的反向工程框架,这个框架可以为执行物理数据建模提供很好的帮助。该方法首先在 Eclipse IDE 中设计一组 Java 类,这些 Java 类定义了它们所表示的对象模型之间的概念关系网络。根据概念上的底层对象模型 —— 其中每个类属性表示它们对应的实体类型(例如表和列的名称以及它们各自的数据类型和主键)—— pureQuery 自动生成创建关系实体所需的 DDL 语句。这一切只需在用户界面中通过指向并点击(point-and-click)方法完成。开发人员可以对生成的 DDL 语句做进一步的调整(或添加)。这将进一步引入关系或者改进关系(例如外键和其他约束),从而在底层 RDBMS 中快速实际实现和执行所需的面向数据结构。
案例研究:将类模型转换为物理数据模型
本节逐步讲解 pureQuery 如何帮助开发人员从面向对象的角度实现概念上的数据建模。本节提供了一种自动执行选项,通过它在底层实际创建理想的物理数据实体。
本节假设您阅读了 本系列的第 1 部分,对 pureQuery 技术有基本的理解。
在开始逐步执行本节内容之前,请确保已安装以下软件:
- DB2® for Linux®, UNIX®, and Windows® Version 9.1 以及附带的
SAMPLE 数据库(参见 参考资料 小节)。)
- IBM Data Studio Version 9.5 (参见 参考资料 小节)
将类模型转换为关系工件
在这个例子中,首先定义一个简单的类模型(如图 1 所示),然后看看 pureQuery 如何像上文描述的那样,通过为每个类自动生成各自的 DDL 命令,帮助开发人员完成物理数据模型的实现和执行。
图 1. 类模型的概念视图
步骤 1. 定义类模型
在这个例子中,定义了 3 个 Java 类,如图 2 所示。注意,定义的类中使用了 @Id 标注。这个标注指示 pureQuery 的 DDL 代码生成系统恰当地生成用于定义主键的 CREATE INDEX 语句。在 pureQuery 的未来版本中,还会有其他的一些标注,这些标注将进一步改进 DDL 自动生成过程,使其可以自动生成不同类型的 DDL 语句。
图 2. 在 IDE 的 Java 编辑器中显示 Java 类
步骤 2. 让 pureQuery 为每个类自动生成 DDL 命令
选择 Java 类,并将其显示在 IDE 的 Java 编辑器中。在类编辑器中的任何地方单击右键,弹出上下文菜单。然后选择
pureQuery Assist
菜单项,接着选择 Generate DDL 子菜单项(如图 3 所示)。
图 3. pureQuery 的 DDL generation 选项
选择该选项后,将生成相应的 DDL,并显示在 Eclipse IDE 的控制台视图中,如图 4 所示。
图 4. Eclipse IDE 的控制台视图显示生成的 DDL
步骤 3. 在控制台视图中,通过剪切和粘贴,将生成的 DDL 保存到一个文件(例如一个 Notepad 文件)。
注意:您需要对生成的 DDL 进行少量更改,以反映对应的数据类型(例如,对于被定义为类型为 VARCHAR 的列的 Java 字符串变量,需要将其改为 VARCHAR(255)。
步骤 4. 对于其他的类,重复步骤 2,并将新生成的 DDL 命令附加到之前保存的 DDL 命令后面。
下面列出了完整的 DDL 命令:
CREATE TABLE ACCOUNT (
ACCOUNTID VARCHAR(255) NOT NULL,
BALANCE DECIMAL(9 , 2) NOT NULL,
BEGINBALANCE DECIMAL(9 , 2) NOT NULL,
BEGINBALANCETIMESTAMP VARCHAR(255) NOT NULL,
CREDITLINE DECIMAL(9 , 2) NOT NULL,
CUSTOMERIDS VARCHAR(255) NOT NULL,
DESCRIPTION VARCHAR(255) NOT NULL,
TYPE VARCHAR(255) NOT NULL
)
DATA CAPTURE NONE ;
ALTER TABLE ACCOUNT ADD CONSTRAINT ACCOUNTPK PRIMARY KEY (ACCOUNTID);
|
CREATE TABLE BANKCUSTOMER (
CITY VARCHAR(255) NOT NULL,
CUSTOMERID VARCHAR(255) NOT NULL,
EMAIL VARCHAR(255) NOT NULL,
FIRSTNAME VARCHAR(255) NOT NULL,
LASTNAME VARCHAR(255) NOT NULL,
MIDDLEINITIAL VARCHAR(255) NOT NULL,
PHONE VARCHAR(255) NOT NULL,
STATE VARCHAR(255) NOT NULL,
STREET VARCHAR(255) NOT NULL,
ZIP VARCHAR(255) NOT NULL
)
DATA CAPTURE NONE ;
ALTER TABLE BANKCUSTOMER ADD CONSTRAINT BANKCUSTOMERPK PRIMARY KEY (CUSTOMERID);
|
CREATE TABLE ACCOUNTCUSTOMERREF (
ACCOUNTID VARCHAR(255) NOT NULL,
CUSTOMERID VARCHAR(255) NOT NULL
)
DATA CAPTURE NONE ;
|
DDL 增强和执行
在本节中,我们将进一步编辑包含生成的 DDL 的文件,以添加所需的外键语句,从而定义表关系:
ALTER TABLE ACCOUNTCUSTOMERREF ADD CONSTRAINT ACCOUNTFK
FOREIGN KEY (ACCOUNTID) REFERENCES ACCOUNT ON DELETE RESTRICT;
|
ALTER TABLE ACCOUNTCUSTOMERREF ADD CONSTRAINT CUSTOMERFK
FOREIGN KEY (CUSTOMERID) REFERENCES BANKCUSTOMER ON DELETE RESTRICT;
|
接下来的步骤是执行所有的 DDL 语句。为此,可以像下面的步骤描述的那样,利用 Data Workbench 的 RUN SQL 选项。
步骤 5. 创建一个 Data Developer Project。
切换到 Eclipse IDE 的数据透视图(如图 5 所示)。
图 5. 切换到数据透视图
然后创建一个 Data Development Project,将其命名为 DataDevProject,如图 6 所示。
图 6. 创建一个 Data Developer Project
步骤 6. 创建一个新的 SQL 脚本文件
导航到 SQL Script > New > SQL or XQuery Script。这时弹出一个对话框窗口,可以在其中指定一个文件名(例如 BankingDDL),如图 7 和图 8 所示。
图 7. 选择创建一个新的脚本文件
图 8. 创建一个名为 BankingDDL 的脚本文件
步骤 7. 将 DDL 命令复制并粘贴到 BankingDDL 文件
将所有生成的 DDL 从 notepad 中复制并粘贴到 BankingDDL 脚本文件中。然后,通过上下文菜单,选择
RUN SQL
选项(如图 9 所示),这将导致 DDL 命令执行,并创建直接反映 Java 类的关系表。
图 9. 通过 Run SQL 选项执行 DDL 命令
当执行 DDL 命令时,结果显示在 IDE 的 Data Output 视图中,如图 10 所示。
图 10. 执行 DDL 的结果显示在 Data Output 视图中
结束语
IBM 的 pureQuery 是一项非常出色的技术,对于拥有传统的面向对象专业经验但又想进行物理数据建模的开发人员,pureQuery 可以提供良好的帮助并提高生产率。这项技术通过简单的 UI 范例提供了自动生成基本 DDL 脚本的方法,并通过这种增强将对象模型层次结构转换为 RDBMS 物理数据工件。
参考资料 学习
获得产品和技术
讨论
关于作者  | 
|  | Azadeh Ahadian 是加利福尼亚州圣何塞市 IBM 硅谷实验室 Information Management Tool 小组的一名软件开发人员。她拥有硕士学位,并且有超过 8 年软件应用程序和工具开发的行业经验。Azadeh 是 pureQuery 设计时小组的成员并且是一名关键贡献者。 |
对本文的评价
|