熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

Visual Studio .NET Enterprise Architect 中基於 Visio

2013-11-13 10:13:50  來源: .NET編程 

  摘要本文是介紹 Microsoft Visual Studio NET Enterprise Architect 中基於 Visio 的數據庫建模組件系列文章中的第三篇第一部分討論了如何創建基本對象角色建模 (ORM) 源模型如何將其映射到邏輯數據庫模型以及如何生成物理數據庫架構的 DDL 腳本第二部分討論了如何使用描述器將對象類型標記為獨立類型對象化關聯以及將其他一些 ORM 約束添加到 ORM 源模型中第三部分將闡述如何添加集合比較約束(子集約束等同約束和排斥約束)以及如何通過組合排斥約束和分離性強制約束來獲得異或約束
  
  簡介
  本文是介紹 Microsoft Visio for Enterprise Architects (VEA) 中數據庫建模解決方案系列文章中的第三篇VEA 包含在 Visual Studio NET 的 Enterprise Architect 版本中本文討論如何將集合比較約束添加到對象角色建模 (ORM) 源模型中以及如何通過組合排斥約束和分離性強制約束來形成異或約束假定本文的讀者已經熟悉 ORM 和關系數據庫建模ORM 的概述可從網上下載 [參考書目 和參考書目 ]有關 ORM 和數據庫建模的處理方式的信息在我最新出版的書 [參考書目 ] 中進行了詳細的討論有關本系列文章的前兩篇請參閱參考書目 和參考書目
  
  集合比較約束
  如果兩個角色由同一對象類型擔當或角色的兩個對象類型共享公用的父類型則可以說它們相互兼容並且比較它們包含的內容是很有意義的對於角色序列(已排序的角色列表)來說也同樣適用上述規則對於數據庫來說僅有三個相關的集合比較運算符子集運算符 ()等同運算符 (=) 和互斥運算符 ()
  
  從源角色序列至目標角色序列的子集約束規定源角色序列中的成員(一組實例)必須始終作為目標角色序列成員的子集該約束的圖形顯示為帶圈的 由虛線箭頭連接從源角色序列指向目標角色序列(示例請參閱圖 在以前的 ORM 工具版本中虛線箭頭本身就指定子集約束在 VEA 中帶圈的子集符號始終顯式顯示這便闡明了約束表示法的含義並支持源角色和目標角色屬於同一關聯時的極少數情況還允許在其他直接約束(例如可能要在以後對其添加圖形約束表示法)中使用虛線箭頭
   
  圖 單一角色間的子集約束
  
  最簡單的角色序列就是單一角色在圖 兩個單一角色之間的子集約束意味著擁有第二個名字的一組患者必須是擁有第一個名字的一組患者的子集換句話說如果某個患者擁有第二個名字那麼他或她也必須擁有第一個名字
  
  要在 VEA 中添加該子集約束首先輸入兩種事實類型(例如將它們添加到業務規則編輯器中然後再拖到繪圖窗口中)在選擇相關謂詞的同時按住 Shift 鍵單擊鼠標右鍵並從快捷菜單中選擇 Add Constraints(添加約束)當顯示 Add Constraints(添加約束)對話框時請在 Constraint type(約束類型)字段中選擇 Subset(子集)然後選擇該約束的源角色和目標角色在該對話框中選擇多個角色框時它們會按照選擇的順序編號為 如果用戶正確執行了該操作則將顯示如圖 所示的對話框在該對話框的下部區域自動描述該約束如果這是您希望立刻應用於那些事實類型的唯一約束請單擊 OK(確定)如果現在要向這些事實類型的一個或多個類型添加其他約束請單擊 Apply(應用)然後添加其他約束
   
  圖 選擇子集約束類型再選擇源角色 []然後選擇目標角色 []
  請注意謂詞has first(擁有第一個)和has second(擁有第二個)中連字符的用法在描述那些謂詞的約束時連字符將形容詞first(第一個)和second(第二個)綁定到 GivenName(名字)以便用戶在形容詞之前而不是之後插入關鍵字(例如some[一些])例如如果當前示例中省略了連字符則描述信息顯示為If Patient p has second some GivenName then Patient p has first some GivenName(如果病人 p 擁有第二個一些名字則病人 p 擁有第一個一些名字)這種描述令人難以理解
  
  圖 說明了角色對之間的子集約束(每一角色序列包含兩個角色)這裡如果一對角色是連續的則約束將連接到這兩個角色的交叉點該約束意味著實例化 Chairperson(主席)關聯的 EmployeeCommittee(雇員委員會)對的集合必須是成員身份關聯集合的子集也就是說每個擔任委員會主席的人必須是所屬委員會的成員
   
  圖 角色對之間的子集約束
  
  要添加此子集約束請先在圖表窗口中添加兩個事實類型在選擇謂詞時按住 Shift 鍵單擊鼠標右鍵並從快捷菜單中選擇 Add Constraints(添加約束)當顯示 Add Constraints (添加約束)對話框時在 Constraint type (約束類型)字段中選擇 Subset(子集)請注意對話框下部區域中的提示如果約束的兩端都有多個角色請添加指示的Number of roles at each end(每一端的角色數)以表明這種情況默認情況下約束兩端的角色數目均設置為 由於該約束每端有兩個角色所以將此設置更改為 (如圖 所示)
  
  現在請選擇源角色對然後選擇目標角色對為每一對中的角色排序使其與另一對中的相應角色匹配在該對話框中選擇多個角色框時它們會按照選擇的順序編號為 編號的第一部分表示角色序列第二部分表示在角色序列中的位置如果上述操作執行正確將顯示如圖 所示的對話框在該對話框的下部區域自動描述該約束單擊 OK(確定)接受該約束並將其添加到圖表中
   
  圖 在角色對之間添加子集約束(單擊圖像以查看大圖片)
  
  角色序列之間的等同約束表明它們的集合必須始終相等等同約束顯示為一個帶圈的=由一條虛線連接至角色序列早期的 ORM 工具使用的是兩端各帶一個箭頭的虛線以此來反映等同約束和一對子集約束的兩個方向之間的等同關系現在不再支持這種舊的表示法
   
  圖 兩個單一角色之間的等同約束
  
  要添加此等同約束請先在圖表窗口中添加兩個事實類型在選擇這兩個謂詞時按住 Shift 鍵單擊鼠標右鍵並從快捷菜單中選擇 Add Constraint(添加約束)當顯示 Add Constraint(添加約束)對話框時在 Constraint type (約束類型)字段中選擇 Equality(等同)然後選擇角色序列(在此示例中每個序列僅包含一個角色)如果上述操作執行正確將顯示如圖 所示的對話框實際上等同約束中角色序列的順序並不重要因為等同是對稱的(與子集不同)在此對話框的下部區域中對該約束進行了描述使用類似的方法可以添加較長的角色序列之間的等同約束
   
  圖 在角色之間添加簡單的等同約束
  角色序列之間的排斥約束表明它們的集合必須始終不相交(相斥)排斥約束顯示為一個帶圈的X由一條虛線連接至角色序列 包含對排斥約束(沒有人可以編寫並審閱同一本書)和簡單排斥約束(沒有書可以同時被推薦閱讀和禁止閱讀)
   
  圖 對排斥約束和簡單排斥約束
  
  要快速添加這些排斥約束請先在繪圖窗口中添加四個事實類型在選擇這四個謂詞時按住 Shift 鍵單擊鼠標右鍵並從快捷菜單中選擇 Add Constraints(添加約束)當顯示 Add Constraints(添加約束)對話框時在 Constraint type(約束類型)字段中選擇 Exclusion(排斥)然後選擇推薦的角色和禁止的角色(如圖 所示)單擊 Apply(應用)接受並顯示該約束將對話框保持打開狀態以便添加其他排斥約束
   
  圖 添加簡單的排斥約束
  在 Constraint type(約束類型)字段中選擇 Exclusion(排斥)將每一端的角色數目增加到 然後選擇編寫和審閱事實類型中的角色對(如圖 所示)單擊 OK(確定)接受該約束並退出此對話框
   
  圖 添加對排斥約束
  異或約束
  在 ORM 中異或約束只是分離性強制(或)約束和排斥約束的正交組合默認情況下這兩個約束是重疊的如圖 中的左圖所示將帶圈的點(分離性強制)和帶圈的X(排斥)疊加就形成救生圈符號要創建該示例請在圖表窗口添加兩個事實類型選定它們單擊鼠標右鍵打開 Add Constraint(添加約束)對話框添加第一個約束然後將另外一個約束也添加到相同的角色中添加完第一個約束後單擊 Apply(應用)添加完第二個約束後單擊 OK(確定)
  
  如果要直觀地將構成分離性強制約束的兩個約束分離請在救生圈符號上單擊鼠標右鍵並選擇 Split X/OR constraint(拆分 X/OR 約束)選項該約束將單獨顯示(如圖 中的右圖所示)現在可以單獨處理任一約束例如選定其中一個約束並單擊 Delete(刪除)可以將其刪除如果兩個約束都單獨出現則選擇其中一個約束並將其拖到另一個約束上可以將它們合並為救生圈符號
  
  圖 異或約束等於分離性強制約束加上排斥約束

From:http://tw.wingwit.com/Article/program/net/201311/12983.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.