開始之前
預備知識
需要你了解關系數據庫基本知識,另外你最好了解 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 xCustomer
Customer ID INTEGER x x x Social Security Number SSN Name VARCHAR(100) x Phone Number VARCHAR(50) x Address VARCHAR(300) xLine Item
Line Item Sequence INTEGER x x Number Ordered INTEGER xItem
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 的功能非常強大,可以進行非常復雜的數據庫集成,分析和設計,是數據架構師,數據分析師以及軟件工程師的得力助手。
本文示例源代碼或素材下載