摘要:本文是介紹 Microsoft Visual Studio .NET Enterprise Architect 中基于 Visio 的數據庫建模組件系列文章中的第一篇,重點介紹該工具提供的對象角色建模 (ORM) 支持。
Microsoft® Visio® Enterprise 2000 中的數據建模解決方案為使用對象角色模型 (ORM) 進行概念性信息分析,以及使用關系、IDEF1X、Crowsfoot 和對象關系表示法進行邏輯數據庫建模提供了基本的支持。ORM 架構可以通過實施正向工程獲得邏輯數據庫架構,從中可以生成用于多種數據庫管理系統 (DBMS) 的物理數據庫架構。對物理數據庫的結構實施反向工程可以獲得邏輯數據庫架構或 ORM 架構。最新發布的 Microsoft Visio 2002 產品只包含 Standard 版和 Professional 版,Professional 版包含了以前單獨的 Technical 版,但不包含 Enterprise 版。雖然 Visio 2002 Professional 包含 ORM 模具,但僅用于繪圖,因為它的 ORM 圖表無法映射到邏輯數據庫架構,并且無法通過實施反向工程從物理數據庫獲得。Visio 2002 Professional 包含數據庫建模解決方案,用于定義新的邏輯數據庫架構或從現有數據庫對其實施反向工程,但是不能實施正向工程獲得物理數據庫架構。
Microsoft 曾經一度在其 Visual Studio 產品范圍內支持數據庫設計和程序代碼設計(使用 UML)。在收購了 Visio Corporation 之后,Microsoft 有兩種獨立的產品(Visio Enterprise 和 Visual Studio)都支持數據庫設計和 UML,從而在功能上有明顯的重復。為了統一這些產品功能,首先 Visio Enterprise 內原有的深層建模解決方案已被增強并轉移到 Microsoft 新產品 Visio for Enterprise Architects (VEA) 中(該產品包含在 Microsoft® Visual Studio® .NET Enterprise Architect 中)。這些基于 Visio 的建模解決方案都包含在 Visual Studio .NET Enterprise 的 Beta 2 中,隨后發布的最終版本也會包括這些方案。VEA 中的深層 ORM 解決方案與 Visio Professional 中簡單的 ORM 繪圖模具完全不同,并且二者不能互相轉換。不過,VEA 中的數據庫建模解決方案可以從 Visio Professional 中導入,然后對其實施正向工程,獲得 DDL 腳本或物理數據庫架構。
本系列文章簡單介紹了如何在 VEA 內使用數據庫建模解決方案。Microsoft Corporation 已獲得文中各方面信息(例如,公司名、產品名、用戶界面)的商標權、版權或專利權。本文主要介紹 ORM 解決方案的基本內容,假定本文的讀者已經熟悉 ORM 和關系數據庫建模。ORM 的概述可從網上下載。ORM 的深層處理和數據庫建模將在我最新出版的書中討論。
基于 Visio 的建模工具在 Visual Studio .NET Enterprise Architect 中作為獨立的解決方案運行。打開該工具時,Beta 版的打開屏幕如圖 1 所示。選擇 Database (數據庫)作為繪圖類型,然后選擇相關 ORM 模板。如果用戶所在地為美國,通常選擇 ORM Source Model (US units),如下所示(默認的頁面大小為 Letter,默認的度量單位為英寸)。將光標懸停在模板圖標上時,圖標將突出顯示并在左側顯示工具提示。Visio 提供美國版本和國際(公制)版本兩種模板。如果選擇不帶 (US units) 的 ORM Source Model,默認的頁面大小為 A4,默認單位為公制。
注意:在最終的版本中,除非選擇其他版本,否則僅安裝適用于用戶所在國家/地區的標準單位系統。
選擇 ORM 源模型模板時,將顯示如圖 2 所示的屏幕。除了位于頂部的菜單和圖標外,還有一個 ORM 模具、一個 Drawing(繪圖)窗口和一個用于顯示 Business Rules 編輯器、數據庫屬性表以及可能打開的其他窗口(例如,Verbalizer(描述器))的區域。
圖 1:選擇使用 ORM Source Model(ORM 源模型)(單擊圖像以查看大圖片)
圖 2:ORM 模具、Drawing(繪圖)窗口和 Business Rules(業務規則)窗口(單擊圖像以查看大圖片)
為了減少圖 2 所占用的空間,我已經對其顯示的大小作了最大程度的調整。通常 Drawing 窗口將占據大部分屏幕。默認情況下,ORM 模具中的三種形狀顯示在同一水平行中。通過減少 ORM 模具的寬度使三種形狀垂直排列,可以為 Drawing 窗口提供更多空間,如此處所示。要調整模具寬度,請將光標懸停在模具和繪圖窗口之間的邊框上,光標變為調整大小光標時,將邊框向左側拖動。
通過將 Object Type(對象類型)和 Predicate(謂詞)形狀從模具拖到 Drawing 窗口,可以將句子類型(事實類型或引用類型)添加到 ORM 模型中。另外,還可以使用 Fact Editor(事實編輯器)添加句子類型?,F在,讓我們使用 Business Rules 編輯器來進行此操作。將光標移到 Business Rules(業務規則)窗口中的 Fact Types(事實類型)窗格的底端行(在本例中只有一行)。輸入事實類型或按 F2 鍵。顯示 Fact Editor(事實編輯器)。還可以通過從屏幕頂部的 Database(數據庫)菜單中選擇 Database|View|Fact Editor (數據庫|視圖|事實編輯器)來調用 Fact Editor(事實編輯器)。默認情況下,Fact Editor (事實編輯器)的輸入樣式是 Guided(導向),如圖 3 所示。
圖 3:使用 Guided (導向)輸入樣式窗口的 Fact Editor(事實編輯器)(單擊圖像以查看大圖片)
可以輸入二元關系,提供正向閱讀(例如,Employee works for Department[雇員就職于部門])和反向閱讀(例如,Department employs Employee [部門雇用雇員])方式。如果需要,可以從二元中選擇不同的設置更改關系中的數量(角色數目)。Object 窗格允許用戶將對象類型分為實體類型、值類型或外部對象類型。如果實體類型具有簡單的標識方案,則可以添加其引用模式(例如,雇員編號和部門代碼)。
熟悉 Fact Editor(事實編輯器) 后,您可能希望將其輸入樣式更改為 Freeform(自由繪制),這樣就可以通過使用正式語法更加快捷地輸入句子類型。要將輸入樣式更改為 Freeform,可以使用選項按鈕,還可以通過以下步驟使 Freeform 成為默認類型:轉到屏幕頂部的 Database(數據庫) 菜單,選擇 Database | Options | Modeling...(數據庫 | 選項 | 建模...),然后打開 Fact Editor (事實編輯器)窗格并將首選模式設置為 Freeform,如圖 4 所示。在許多語言中,通過首字母大寫命名對象類型,將其名稱假設為一個詞語(例如 Employee [雇員] 和 VicePresident [副總統]),可以很方便地標識對象類型。對于不適于使用這種方法的語言,或當名稱由以空格分隔的多個詞語組成時,應該選擇括號模式:將對象類型名稱用方括號括起來(例如,[employee]、[vice president])。
圖 4:將 Fact Editor(事實編輯器) 的默認輸出樣式設置為 Freeform
在 Freeform 模式中,引用模式顯示在對象類型名稱后面的括號中。如果應用了反向閱讀,則使用反斜杠 (/) 來區分正向閱讀和反向閱讀。
圖 5 為一個示例。
圖 5:使用 Freeform 輸出樣式的 Fact Editor(事實編輯器)(單擊圖像以查看大圖片)
為實體類型提供引用方案后,就不需要在以后指定事實類型時重復引用方案了。與實體類型不同,值類型(例如,EmployeeName [雇員姓名]、RoomNr [房間號])沒有引用方案,由于其實例僅為文字常數(例如,用于命名或引用實體的字符串或數字),因此它們可以標識其自身。在 Freeform 模式中,值類型通過附加空括號 [()] 來標識。下面提供了使用正式的、自由繪制語法的某些事實類型的示例:
Employee(empNr) works for / employs Department(code) Employee has EmployeeName() Employee has MobileNr() Employee drives / is driven by Car(regNr)
現在,使用 Fact Editor (事實編輯器)輸入這些事實類型(使用 Guided 或 Freeform 輸入)。單擊前三個事實類型后面的 Apply(應用) 按鈕添加事實類型。輸入第四個事實類型后,單擊 OK(確定)。此操作將添加最后一個事實類型,并關閉 Fact Editor(事實編輯器)。這些事實類型尚未顯示在繪圖窗口中,但是現在已列在 Business Rules 編輯器中了。如果將光標移到其中一個 Fact Editor (事實編輯器)上,其右側將顯示一個 Edit(編輯) 按鈕(參閱圖 6)。如果單擊 Edit(編輯) 按鈕,將彈出 Fact Editor(事實編輯器),顯示要編輯的事實類型。此操作提供了一種在 Fact Editor(事實編輯器) 中添加基本約束和示例的方法。
圖 6:事實類型列在 Business Rules 編輯器中,并且可以編輯(單擊圖像以查看大圖片)
如果約束僅應用到一個謂詞,則為內部約束,否則為外部約束。使用 Fact Editor(事實編輯器) 可以聲明以下內部約束:內部唯一性、簡單強制、內部頻率和環式約束,但不能指定內部集合比較約束(例如,同一謂詞的兩個角色之間的排斥約束)、外部約束(例如,外部唯一性約束或兩個謂詞之間的集合比較約束)或值約束(例如,將 Sexcode [性別代碼] 值限制為 {M, F})。實際上,Fact Editor(事實編輯器) 中聲明的約束最好限制為簡單內部唯一性約束和簡單強制約束。要聲明其他類型的約束,有一個快捷方法(請參閱此系列文章的第二部分)。
要向 Fact Editor(事實編輯器)中顯示的事實類型添加約束,請選擇 Constraints(約束)選項卡。默認情況下,constraints(約束)窗格將唯一性和強制性約束組合在一起,以便更快地對其做出指定。例如,在圖 7 中,選擇“exactly one”(恰好為一)表示“at least one”(至少一個,強制)和“at most one”(至多一個,唯一)兩種情況。約束符號和描述信息將自動顯示,以幫助用戶查看選擇的結果。如果不想使用默認的快捷方式,請打開 Database Modeling Preferences(數據庫建模首選參數)對話框(圖 4),并取消選中指示組合了唯一性和強制性的選項 (UM)。
圖 7:在 Fact Editor(事實編輯器) 中添加約束(單擊圖像以查看大圖片)
請添加以下約束,練習使用 Fact Editor(事實編輯器)添加約束。在當前版本的工具中,在最終的約束中使用“some”(某些)取代“the same”(同一),表示“drives”(擁有)關系是可選的并且是多對多的關系。
Each Employee works for some Department Each Employee works for at most one Department Each Employee has some EmployeeName Each Employee has at most one EmployeeName Each Employee has at most one MobileNr It is possible that the same Employee drives more than one Car and that the same Car is driven by more than one Employee
最好為所有事實類型包含示例。要向 Fact Editor(事實編輯器) 中顯示的事實類型添加約束,請單擊 Examples(示例)選項卡,然后輸入足夠的示例以闡明相關約束。例如,圖 8 顯示了 Employee works for Department(雇員就職于部門)事實類型的三個事實示例。此處,雇員 101 和 102 就職于銷售部門 (SLS),而雇員 103 就職于市場部門 (MKTG)。這種填充與我們的解決方案一致,即每個雇員就職于至多一個部門(第一列中的值是唯一的),但是同一部門可以雇用一些雇員(SLS 在第二列中是重復的)。
圖 8:為 Employee works for Department (雇員就職于部門)添加示例事實實例(單擊圖像以查看大圖片)
可以使用 Analyze(分析) 按鈕來請求工具,減少示例中的約束,或者檢查數據和約束規范之間是否存在不一致。自己試一試。此功能對于驗證約束十分有用。
要保存模型,請從 File (文件)菜單中選擇 File | Save(文件 | 保存),或單擊 Save (保存)圖標。將會打開 SaveAs (另存為)對話框。選擇要保存模型的文件夾,為模型添加文件名,在對話框中單擊 Save(保存)按鈕,然后在 properties 對話框中單擊 OK(確定)。保存的文件將使用擴展名 .vsd(Visio 文檔)。
要在圖表中顯示使用 Fact Editor(事實編輯器) 輸入的句子類型,請在 Business Rules 編輯器中找到感興趣的事實類型。要選擇一系列連續的事實類型,請按住 Shift 鍵,并選擇該系列的第一個和最后一個事實類型。所有事實類型(除第一個類型外)將突出顯示。然后,將事實類型拖到繪圖頁面上所需的位置。
現在,請嘗試對模型中的四個事實類型執行此操作。默認情況下,顯示的圖表如圖 9 所示,您可以通過來回移動謂詞文本和對象類型來優化顯示。
另一種便捷的方法是,打開 Business Rules(業務規則)窗口中的 Object Types(對象類型)窗格,拖出一個或多個相關的對象類型,然后使用 Show Relationships(顯示關系)關系選項。例如,如果將 Employee(雇員)對象類型拖到繪圖頁面上,用鼠標右鍵單擊 Employee (雇員)并從快捷菜單中選擇 Show Relationships(顯示關系),則在該頁上將顯示 Employee(雇員)所具有的所有關系。這個 ShowRelationships(顯示關系)功能在架構瀏覽和反向工程中非常有用,它是以前在 VisioModeler 或 Visio Enterprise 中未提供的許多新功能之一。
圖 9:通過從 Business Rules(業務規則)編輯器中拖動四種事實類型而形成的圖表
要將 ORM 模型映射到邏輯數據庫模型,首先將 ORM 模型添加到數據庫模型項目中,然后生成它。從 File(文件)菜單中,選擇 File | New | Database | Database Model Diagram (US units)(文件 | 新建 | 數據庫 | 數據庫模型圖表 (US 單位)),打開邏輯數據庫建模解決方案。如果要使用公制模板,請選擇不帶 (US units) 的 Database Model Diagram(數據庫模型圖表)。此時的屏幕如圖 10 所示,只是繪圖窗口的大小已被我明顯縮小了??梢允褂?Entity Relationship 模具來從頭創建邏輯數據庫模型,但是現在,我們將從 ORM 模型中導出數據庫模型。
圖 10:邏輯數據庫建模解決方案(單擊圖像以查看大圖片)
要創建數據庫模型項目,請從 Database(數據庫)菜單中選擇 Database | Project | Add existing document(數據庫 | 項目 | 添加現有文檔)。將顯示 Add Document to Project(將文檔添加到項目中)對話框。使用 Look in: 字段瀏覽到保存的 ORM 模型,然后單擊 Open(打開) 按鈕。在項目窗口中將列出 ORM 模型(此處的模型名為 JCM1.vsd)。單擊主菜單上的 Save(保存) 圖標,并給出文件名(我選擇了 ProjJCM1)來保存項目文件。項目文件的擴展名也是 .vsd。當前模型的名稱和頁面始終列在屏幕頂部的標題欄中。圖 11 顯示了此時應顯示的屏幕。
圖 11:包含 ORM 源模型的數據庫項目(單擊圖像以查看大圖片)
現在,從 Database(數據庫) 菜單中選擇 Database | Project | Build(數據庫 |項目 | 生成),來創建邏輯模型。關系架構自動生成,并且在屏幕左側的 Tables and Views (“表和視圖”)窗口中顯示結果表方案(參閱圖 12)。
圖 12:通過映射 ORM 模型建立的兩個表方案(單擊圖像以查看大圖片)
要在圖表上查看這些表方案,請將其拖到繪圖頁面中。結果如圖 13 所示,有兩個表方案,方案之間由一個外鍵連接。每個表的名稱以陰影標題顯示,標題的下方列出了各列。主鍵帶下劃線,用“PK”標記,并顯示在該列的頂格中。強制(非空)列以粗體表示。外鍵列標記為 FKn,其中 n 是表外鍵的編號。本例中只有一個外鍵,指向 Employee 表的主鍵。外鍵連接其實就是從外鍵到目標鍵的箭頭。
圖 13:從 ORM 模型映射的關系架構
在本例中,表和列的名稱將在默認情況下自動生成。在實際應用中,通常我們會重命名其中的許多名稱,并且更改已選擇的許多默認的數據類型。有多種配置選項,可用來控制表和列的名稱的生成方式。在實際應用中,最好在 ORM 模型上設置數據類型,在該模型上,對象類型對應于概念上的域。然后,正確的數據類型將自動基于這些域傳播所有屬性。本文對此類問題不加詳述。
在 Database(數據庫)菜單中單擊 Database | Generate(數據庫 | 生成),可以生成所選目標 DBMS 的內部架構。生成架構時,用戶可以選擇生成 DDL 腳本,而不是使用工具建立表。通常最好先生成 DDL 腳本,以便以后在所選的 DBMS 中執行。請遵循生成向導中的步驟:選擇驅動程序(例如 Microsoft® SQL Server 2000),輸入數據庫名稱(例如 mydb),接受下一屏幕中的默認設置,選擇 Yes(是) 以查看生成的 DDL 腳本,然后將 DDL 腳本保存為文本文件。
本文簡單介紹了有關創建簡單 ORM 模型,將其映射到邏輯數據庫架構,然后再映射到物理數據庫架構的基本信息。在后續的文章中,將闡述如何指定更加強大的 ORM 模型(包括高級約束和嵌套),并更詳細地介紹邏輯數據庫建模功能。使用隨本產品發布的示例文件中包含的 Employee ORM 源模型,可以對更高級的功能有個初步了解。
原文轉自:http://www.anti-gravitydesign.com