用 Rational Data Architect 设计和开发数据库,第 1 部分:RDA 入门简介和数据库设计
2010-05-13 00:00:00 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁绘劦鍓欓崝銈囩磽瀹ュ拑韬€殿喖顭烽幃銏ゅ礂鐏忔牗瀚介梺璇查叄濞佳勭珶婵犲伣锝夘敊閸撗咃紲闂佽鍨庨崘锝嗗瘱闂備胶顢婂▍鏇㈠箲閸ヮ剙鐏抽柡鍐ㄧ墕缁€鍐┿亜韫囧海顦﹀ù婊堢畺閺屻劌鈹戦崱娆忓毈缂備降鍔庣划顖炲Φ閸曨垰绠抽悗锝庝簽娴犻箖姊洪棃娑欐悙閻庢矮鍗抽悰顕€宕堕澶嬫櫖濠殿噯绲剧€笛囧箲閸ヮ剙钃熼柣鏂挎憸閻熷綊鏌涢…鎴濇灈妞ゎ剙鐗嗛—鍐Χ鎼粹€茬凹缂備緡鍠楅幐鎼佹偩閻戣棄纭€闁绘劕绉靛Λ鍐春閳ь剚銇勯幒鎴濐伀鐎规挷绀侀埞鎴︽偐閹绘帩浼€缂佹儳褰炵划娆撳蓟濞戞矮娌柟瑙勫姇椤ユ繈姊洪柅鐐茶嫰婢т即鏌熼搹顐e磳闁挎繄鍋涢埞鎴犫偓锝庘偓顓涙櫊閺屽秵娼幏灞藉帯闂佹眹鍊曢幊鎰閹惧瓨濯撮柛鎾村絻閸撳崬顪冮妶鍡楃仸闁荤啿鏅涢悾鐑藉Ψ瑜夐崑鎾绘晲鎼粹剝鐏嶉梺缁樻尰濞叉﹢濡甸崟顖氱疀闂傚牊绋愮花鑲╃磽娴h棄鐓愭慨妯稿妿濡叉劙骞樼拠鑼槰闂佸啿鎼崐濠毸囬弶搴撴斀妞ゆ梻銆嬪銉︺亜椤撶偛妲婚柣锝囧厴楠炴帡骞嬮弮鈧悗濠氭⒑鐟欏嫭鍎楅柛妯衡偓鐔插徍濠电姷鏁告慨鐑藉极閸涘﹥鍙忔い鎾卞灩绾惧鏌熼崜褏甯涢柍閿嬪灦閵囧嫰骞掗崱妞惧缂傚倷绀侀ˇ閬嶅极婵犳氨宓侀柛鈩冪⊕閸婄兘鏌涘┑鍡楊伀妞ゆ梹鍔曢埞鎴︽倻閸モ晝校闂佸憡鎸婚悷锔界┍婵犲洦鍤冮柍鍝勫暟閿涙粓姊鸿ぐ鎺戜喊闁告瑥楠搁埢鎾斥堪閸喓鍘搁柣蹇曞仧绾爼宕戦幘璇茬疀濞达絽鎲¢崐顖炴⒑绾懎浜归悶娑栧劦閸┾偓妞ゆ帒鍟惃娲煛娴e湱澧柍瑙勫灴閹瑩寮堕幋鐘辨闂備礁婀辨灙闁硅姤绮庨崚鎺楀籍閸喎浠虹紓浣割儓椤曟娊鏁冮崒娑氬幈闂佸搫娲㈤崝宀勬倶閻樼粯鐓曢柟鑸妼娴滄儳鈹戦敍鍕杭闁稿﹥鐗犲畷婵嬫晝閳ь剟鈥﹂崸妤€鐒垫い鎺嶈兌缁犲墽鈧厜鍋撳┑鐘辩窔閸嬫鈹戦纭烽練婵炲拑绲垮Σ鎰板箳閹冲磭鍠撻幏鐘绘嚑閼稿灚姣愰梻鍌氬€烽懗鑸电仚濠电偛顕崗妯侯嚕椤愩倖瀚氱€瑰壊鍠栧▓銊︾節閻㈤潧校缁炬澘绉瑰鏌ュ箵閹烘繄鍞甸柣鐘烘鐏忋劌顔忛妷褉鍋撶憴鍕碍婵☆偅绻傞~蹇涙惞閸︻厾锛滃┑鈽嗗灠閹碱偊锝炲鍥╃=濞达綁顥撻崝宥夋煙缁嬪灝鏆遍柣锝囧厴楠炲鏁冮埀顒傜不婵犳碍鍋i柛銉戝啰楠囬悗瑙勬尭缁夋挳鈥旈崘顔嘉ч柛鈩兠棄宥囩磽娴e壊鍎愰柛銊ュ缁顓兼径瀣偓閿嬨亜閹哄秶顦︾€殿喖鐏濋埞鎴﹀煡閸℃浠梺鍛婎焼閸曨収娲告俊銈忕到閸燁垶宕愰崹顐e弿婵☆垳鍘ф禍楣冩倵濮樼偓瀚�

开始之前
预备知识
需要你了解关系数据库基本知识,另外你最好了解 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比较完整的解决方案(二)--服...
更多精彩
赞助商链接