用 Rational Data Architect 设计和开发数据库,第 1 部分:RDA 入门简介和数据库设计
2010-05-13 00:00:00 来源:WEB开发网开始之前
预备知识
需要你了解关系数据库基本知识,另外你最好了解 Eclipse。
目标
在学完本教程之后,你将能够使用 RDA 来创建数据库的逻辑数据模型和物理数据模型。
必要条件
本教程适用于数据库设计开发人员以及程序员。
系统要求
您需要安装 Rational Data Architect 7.0.0.0。您可以下载一个 Rational Data Architect 7.0.0.0 试用版。
Rational Data Architect 简介
RDA 简介
IBM Rational Data Architect (RDA) 是一款企业数据建模和集成设计开发工具。它提供丰富的功能帮助数据架构师进行多种数据库产品的建模和集成设计工作,并且帮助开发人员开发和调试数据库应用。它的主要功能有:
数据库逻辑和物理模型建模
数据源发现和数据源结构的可视化浏览
多数据源间关系的发现和映射
两数据源结构的比较和同步
分析模型和数据源的标准兼容性
数据库应用开发和调试
新版本 (V7) 更加强了与 IBM Rational Software Architect, Eclipse 3.2 和 IBM Information Server 的集成;另外还增加了对 XML, DB2 V9, Sybase, Informix 以及 MySQL 的支持。
它支持的数据库种类有:
DB2 UDB V7.2, V8.1, V8.2, V9.1
DB2 UDB iSeries V5R2, V5R3, V5R4
DB2 zSeries V7, V8 (Compatibility Mode), V8 (New-Function Mode)
Oracle V8, V9, V10
SQL Server 2000, 2005
Informix V9.2, V9.3, V9.4, V10.0
Cloudscape V5.1
Derby V10.0, V10.1
MySql V4.0, V4.1
Sybase V12.x, V15.0
还支持 Generic JDBC 1.0。
由于 RDA 基于 Eclipse 3.2,所以设计和开发人员很容易上手,用不着花大量的时间去学习如何操作。
例子
本教程将围绕一个 Order 例子(示意图如下),讲述如何利用 RDA 进行逻辑和物理建模。
图 1: Order 例子示意图
例子的最终 RDA 项目 (project) 被打包成一个 OrderDesign.zip 文件,可以在本教程的 下载部分 下载。
准备工作
打开 RDA V7,选择一个新的工作区 (Workspace),关闭欢迎视图,并切换到 Data 透视图 (Window -> Open Perspective -> Data),这是我们主要用的透视图。
图 2: Data 透视图
逻辑数据建模
在这一节里,我们将要创建 Order 的逻辑数据模型。
逻辑数据模型 (Logical data model) 是一种不依赖于特定数据库的用来表现数据结构以及数据之间关系的模型,它的特点是易于被人阅读和理解。一个逻辑数据模型包含若干包 (Package),每个包包含若干实体 (Entity),实体包含若干属性 (Attribute) 和与其它实体的关系 (Relationship),属性可能包含主键,外键或其它约束 (Constraint),而关系也有多种类型,如标识性的 (Identifying),非标识性的 (Non-Identifying) 以及多对多 (Many To Many)。
逻辑数据模型还可以包含或引用一到多个域模型 (domain model) 或词汇表 (glossary model)。域模型是用来定义企业数据建模所用到的各种数据类型,如身份证号,性别,身高等。合理的运用域模型可以提高数据类型的可重用性以及可维护性。词汇表可以用来定义逻辑或物理数据模型中对象的命名标准。
下面我们首先创建一个数据设计项目 (Data Design Project),用来盛装我们的模型文件;然后创建一个域模型来定义一些可重用的数据类型;最后创建我们的 Order 逻辑数据模型。
创建数据设计项目
右键点击 Data Project Explorer 中的空白部分,选择 New -> Data Design Project(如果菜单里没有,就选择 Other…,然后选择 Data -> Data Design Project)。
图 3: 开始创建数据设计项目
在弹出的对话框里输入 Project Name 的值 OrderDesign,然后点击 Finish。
图 4: 在弹出的对话框里输入 Project Name 的值
Data Design Project 创建了。
图 5: Data Design Project 创建了。
创建域模型
在 Data Project Explorer 视图里,右键单击 OrderDesign 项目的 Data Models 文件夹,选择 New -> Domain Model。
图 6: 开始创建域模型
在弹出的对话框里指定域模型的文件名 OrderDomain,并且勾选小方框。
图 7: 指定域模型的文件名
点击 Finish,一个空的域模型便生成和打开了。
图 8: 空的域模型生成完毕
右键单击 Package1,选择 Add Data Object -> Atomic Domain。
图 9: 增加 Atomic Domain
命名这个 Atomic Domain 为 Money,在它的属性视图 (Properties View) 中,指定它的 Base Type 为 DECIMAL,Precision 为 10,以及 Scale 为 2,然后右键点击 Data Project Explorer 中的 OrderDomain.ddm 文件,选择 Save 来保存更改。
图 10: 设置 Atomic Domain
我们定义了一个 Money 数据类型,它是一个十进制数,精度为 10,保留 2 位小数。下面同样的我们右键单击 Package1,选择 Add Data Object -> Atomic Domain 生成一个 Percent 数据类型,设置它为十进制数,精度为 2,没有小数位,并且保存 OrderDomain.ddm 的更改。
图 11: 定义一个 Money 数据类型
以同样的方法,再定义一个 SSN(Social Security Number) 数据类型,一个长为 18 的字符型。
图 12: 再定义一个 SSN(Social Security Number) 数据类型
我们将要在接下来的逻辑数据模型中用到这些数据类型。
创建逻辑数据模型
创建实体 (Entity)
右键单击 Data Models 文件夹,选择 New -> Logical Data Model。
图 13: 开始创建逻辑数据模型
在弹出的对话框里,指定文件名为 OrderLogical。
图 14: 指定文件名为 OrderLogical
单击 Finish,从而生成并打开一个空的逻辑数据模型。
图 15: 生成并打开一个空的逻辑数据模型
这个逻辑数据模型中包含一个默认生成的包 Package1,这个包里目前没有实体,只有一个空的图表 Diagram1,我们将要在 Diagram1 上绘制我们的 Order 模型。虽然 Outline 视图和 Palette 栏都是很好用的工具,但我们不打算在我们的例子里用到它们,所以暂时先关闭它们。
单击 Diagram1 的空白部分并点选弹出的小蓝方块生成一个实体,命名它为 Order。
图 16: 生成一个实体
鼠标选中 Order 实体,会出现一个小方框,里面有两个按钮,选择钥匙形状的按钮,生成主键,命名为 Order ID。
图 17: 命名为 Order ID
在 Order ID 的属性视图里,选择 Type 标签来设置类型。单击 Data Type 右边的’…’按钮,在弹出的对话框里选择 Predefined Data Types -> INTEGER。
图 18: 选择 Type 标签来设置类型
单击 OK 后,再勾选 Surrogate Key 复选框 (Primary Key 和 Required 复选框对主键是默认选中的 )。
图 19: 勾选 Surrogate Key 复选框
为了清楚起见,我们单击 Diagram1 的空白处,在属性视图里选择 Filters 标签,然后勾选 Show data types 复选框,这样我们就能在 Diagram1 里看见实体属性(包括主外键)的数据类型了。
图 20: 查看实体属性(包括主外键)的数据类型
鼠标选中 Order 实体,在弹出的小方框内选择第二个按钮,生成一个属性 (Attribute),命名它为 Submit Date。
图 21: 生成一个属性
在属性视图里指定 Submit Date 的 Data Type 为 TIMESTAMP,并且勾选 Required 复选框。
图 22: 指定 Submit Date 的 Data Type 为 TIMESTAMP
接下来,再在 Order 实体上加一个属性 Total Price,这次我们指定它的 Data Type 为我们之前在域模型里定义的 Money。
图 23: 在 Order 实体上加一个属性 Total Price
单击 OK 之后,再勾选 Required 复选框。
图 24: 勾选 Required 复选框
相似的,我们再在 Order 实体上增加一个属性 Tax Rate,设置它的 Data Type 为 Percent( 在我们的域模型里 ),并勾选 Required 复选框。
图 25: 再在 Order 实体上增加一个属性 Tax Rate
此时右键单击 OrderLogical.ldm 并选择 Save 来保存所做的更改。
之后,请按照下表创建其他的实体。
Entity | Attribute | Type | |||
Data Type | Primary Key | Required | Surrogate Key | ||
Order | Order ID | INTEGER | x | x | x |
Submit Date | TIMESTAMP | x | |||
Total Price | MONEY | x | |||
Tax Rate | PERCENT | x | |||
Customer | Customer ID | INTEGER | x | x | x |
Social Security Number | SSN | ||||
Name | VARCHAR(100) | x | |||
Phone Number | VARCHAR(50) | x | |||
Address | VARCHAR(300) | x | |||
Line Item | Line Item Sequence | INTEGER | x | x | |
Number Ordered | INTEGER | x | |||
Item | Item Number | INTEGER | x | x | x |
Name | VARCHAR(200) | x | |||
Description | VARCHAR(1000) | ||||
Unit Price | MONEY | x | |||
Product | Product Code | VARCHAR(300) | x | ||
Service | Labor Hour | INTEGER | x |
最终结果是这样的:
图 26: 最终结果
创建实体间的关系 (Relationship)
实体间的关系有两种:外键 (Foreign Key) 关系和继承 (Generalization) 关系。
首先我们创建 Customer 和 Order 实体之间的外键关系。鼠标指向 Customer 实体,会出现两个箭头,托拽指向外的箭头至 Order 实体,在弹出的菜单里选择 Create Non-Identifying Mandatory Foreign Key Relationship。
图 27: 创建 Customer 和 Order 实体之间的外键关系
创建出的关系如下图所示
图 28: 创建出的关系图
这个关系在 Diagram1 中的标示线右端是一条竖线,左端是一个分叉加一个圆圈,这表明一个 Customer 对应 0 到多个 Order。在属性视图的 Type 标签里可以看到这个关系的类型信息。一个外键关系有以下这些类型属性:
子实体 (Child Entity) 和父实体 (Parent Entity),这里分别为 Order 和 Customer。
Relationship Type:
Identifying: 子实体的主键依赖于父实体的主键,即子实体的主键定义中包含父实体的主键定义,作为关联父实体的外键。你可以在属性视图中把 Non-Identifying 改为 Identifying 看看 Order 实体有什么变化。Identifying 限定父实体在关系中有且只有一个。
Non-Identifying: 子实体的主键独立于父实体的主键,但子实体中需要有外键关联父实体,这里你可以看到 Order 实体中加入了一个 Customer ID 外键。Non-Identifying 限定父实体在关系中最多只有一个。
Many To Many: 子实体和父实体相互独立,它们之间是多对多的关系。
Existence:
Optional: 关系中父实体可以有 0 个或更多。
Mandatory: 关系中父实体至少有一个。
Cardinality: 关系中子实体的个数
当一个外键关系被创建的时候,会自动加上子实体的 Verb,它的默认值为 Verb1,如图 30 Diagram1 中所示。我们单击 Verb1 修改它为 is placed by。你还可以通过关系的属性视图的 Details 标签来为父实体加上 Verb。
图 29: 当一个外键关系被创建的时候,会自动加上子实体的Verb。
下面我们创建 Order 和 Line Item 实体之间的外键关系。这回我们希望 Order 作为父实体,并且希望 Order 能 Identify Line Item(即 Line Item 的主键定义中包括 Order 的主键)所以鼠标选中 Order 实体,托拽向外的箭头至 Line Item 实体,在弹出的菜单里选择 Create Identifying Foreign Key Relationship。
图 30: 创建 Order 和 Line Item 实体之间的外键关系
关系生成后,我们删除子实体 Line Item 的 Verb,并为父实体 Order 加上 Verb ‘contains’。
图 31: 删除子实体 Line Item 的 Verb,并为父实体 Order 加上 Verb ‘contains’。
你可以看到子实体 Line Item 的主键定义中加入了一个 Order ID 属性,作为关联父实体 Order 的外键。
按照同样的步骤,我们继续创建 Item 实体(父)和 Line Item 实体(子)之间的外键关系,这个关系的类型是 Non-Identifying Mandatory,我们同时设置 Line Item 的 Verb 为 is described by。
图 32: 创建 Item 实体(父)和 Line Item 实体(子)之间的外键关系
接下来,我们创建 Product 和 Item 之间的关系,这是一个继承关系,因为 Product 是 Item 的一种。鼠标选中 Product 实体,托拽向外的箭头至 Item 实体,在弹出的菜单中选择 Create Generalization。
图 33: 创建 Product 和 Item 之间的关系
继承关系是一种比较简洁的关系。在继承关系中,没有子实体和父实体这样的概念,取而代之的是子类型 (Subtype) 和父类型 (Supertype),这里分别为 Product 和 Item,同时也没有那么多相关的属性(如 Identifying 等)。但你可以看到,Item 实体的主键被加到了 Product 实体中,有点类似于外键关系中的 Identifying。
我们以同样的步骤创建 Labor 和 Item 之间的继承关系,然后保存一下 OrderLogical.ldm。
图 34: 创建 Labor 和 Item 之间的继承关系
至此,我们完成了逻辑数据建模,得到了一张非常漂亮的图表,不是吗?如果你想把这张图表 (Diagram1) 打印出来与大家分享,仅仅需要用鼠标选中这张图表,然后从菜单栏里选择 File -> Print Preview 来预览一下,没问题后选择 File -> Print…或点击工具栏里(这里是第一排)的 Print 按钮来打印图表。
关闭所有打开的编辑器 (Editor)。
生成物理数据模型
物理数据模型
物理数据模型 (Physical data model) 是一种特定于某数据库(如 DB2)的模型,它描述该数据库中的数据对象(如表,字段等)和它们之间的关系。物理数据模型可以由逻辑数据模型来生成,而它也可以用来生成可部署的 DDL。
下面我们基于上一节中创建的逻辑数据模型,首先创建一个词汇表,用来规定逻辑数据模型中各对象的名字在物理数据模型中的短名,然后再生成 DB2 V9.1 物理数据模型。之所以要用短名,是因为 DB2,像许多数据库产品一样,对数据库对象名字的长度有一定的限制。
创建词汇表
在 Data Project Explorer 中,鼠标右键点击 Order Design 项目的 Data Models 文件夹,从上下文菜单中选择 New -> Glossary Model,弹出 New Glossary Model 对话框,输入词汇表的文件名 OrderGlossary。
图 35: 输入词汇表的文件名 OrderGlossary
点击 Finish,一个空的词汇表便生成了。
图 36: 生成一个空的词汇表
可以看到,一个空的 Glossary1 自动生成并在词汇表编辑器中打开了。
在词汇表编辑器的 Contained Words 区块里,点击 Create New Word 按钮添加一个单词 (Word),输入它的 Name ‘Address’, Abbreviation ‘ADR’,选择它的 Type ‘PRIME’,其它列保持默认值,单词 Address 便生成好了。按照同样的步骤,把下表中的单词全部添加到 Glossary1 中。
Name | Abbreviation | Name | Abbreviation |
Address | ADR | Ordered | ODD |
Code | CD | Phone | PHO |
Customer | CST | Price | PRC |
Date | DAT | Product | PRD |
Description | DSC | Rate | RAT |
Hour | HUR | Security | SEC |
Item | ITM | Sequence | SEQ |
Labor | LBR | Service | SRV |
Line | LIN | Social | SOC |
Name | NAM | Submit | SBT |
Number | NUM | Total | TOL |
Order | ORD | Unit | UNT |
结果是这样的:
图 37: 结果
右键单击 Data Project Explorer 中的 OrderGlossary.ndm,选择 Save 保存这个词汇表,然后关闭词汇表编辑器。
生成物理数据模型
在 Data Project Explorer 中,用鼠标选中 OrderLogical.ldm,然后从菜单栏选择 Data -> Transform -> Physical Data Model,或者直接点击工具栏上的 Transform To Physical Data Model 按钮,从而打开 Transform To Physical Data Model 向导。
图 38: 打开 Transform To Physical Data Model 向导
点击 Next,输入逻辑数据模型的 File name ‘OrderPhysical’,选择 Database 为 DB2 UDB,选择 Version 为 V9.1。
图 39: 输入逻辑数据模型的 File name,选择 Database。
点击 Next,输入 Schema name ‘Order’,其他输入项保持默认值。
图 40: 输入 Schema name
点击 Next,然后点击 Finish,物理数据模型 OrderPhysical.dbm 便生成了。
图 41: 物理数据模型生成完毕
我们从 Data Project Explorer 中可以看到,OrderPhysical.dbm 中包含一个 Database,其中又包含一个 Order schema,在这个 schema 下面有相对应 OrderLogical.ldm 中各实体而生成的一系列表 (Table),还有一个图表 Diagram1 用来显示这些表的结构和它们之间的关系。Diagram1 已经在图表编辑器中被打开了,同时被打开的还有所有和 OrderPhysical.dbm 相关的模型和图表。
从 Diagram1 中可以清楚地看到,我们在逻辑数据模型中创建的各种对象已经被转换成 DB2 数据库的相应对象,而且对象名变成了短名,比如 Order 实体被转换成了 ORD 表,Order ID 主键被转换成了 ORD_ID 主键,这得益于我们之前创建的词汇表。
用鼠标在 Diagram1 中选择 ORD_ID 主键,并在属性试图中选择 Type 标签,我们可以看到 ORD_ID 的详细信息。
图 42: ORD_ID 的详细信息
值得注意的是三个 Properties: Primary Key, Not Null, Identity,它们都被打上了勾,其实它们对应的是逻辑数据模型(图 21)中所示的 Primary Key, Required 和 Surrogate Key。
这个物理数据模型是不是也很漂亮?你同样也可以把它打印出来与同事分享。
总结
本教程介绍了用 RDA 进行数据库设计的基本知识和步骤。RDA 的功能非常强大,可以进行非常复杂的数据库集成,分析和设计,是数据架构师,数据分析师以及软件工程师的得力助手。
本文示例源代码或素材下载
- ››DataGrid中CheckBox绑定bool属性来进行选中判断
- ››data/data/目录下的私有数据
- ››Rational Insight 与 Rational Team Concert 集成...
- ››Data Web Services:访问IBM数据库服务器的新方式...
- ››Rational开发过程
- ››datagridview checkbox控件
- ››DataGridView表尾统计控件3
- ››DataReader与DataSet的区别
- ››data/tmp等文件夹777检测属性不通过的解决方法
- ››DataSet导出到Excel比较完整的解决方案(一)--客...
- ››DataSet导出到Excel比较完整的解决方案(二)--服...
- ››DataSet导出到Excel比较完整的解决方案(二)--服...
更多精彩
赞助商链接