powerdesigner 概念模型(conceptualDataModel)創建詳解

一、概念數據模型概述
數據模型是現實世界中數據特徵的抽象。數據模型應該滿足三個方面的要求:
1)能夠比較真實地模擬現實世界
2)容易爲人所理解
3)便於計算機實現

概念數據模型也稱信息模型,它以實體-聯繫(Entity-RelationShip,簡稱E-R)理論爲基礎,並對這一理論進行了擴充。它從用戶的觀點出發對信息進行建模,主要用於數據庫的概念級設計。

通 常人們先將現實世界抽象爲概念世界,然後再將概念世界轉爲機器世界。換句話說,就是先將現實世界中的客觀對象抽象爲實體(Entity)和聯繫 (Relationship),它並不依賴於具體的計算機系統或某個DBMS系統,這種模型就是我們所說的CDM;然後再將CDM轉換爲計算機上某個 DBMS所支持的數據模型,這樣的模型就是物理數據模型,即PDM。

CDM是一組嚴格定義的模型元素的集合,這些模型元素精確地描述了系統的靜態特性、動態特性以及完整性約束條件 等,其中包括了數據結構、數據操作和完整性約束 三部分。
1)數據結構表達爲實體和屬性;
2)數據操作表達爲實體中的記錄的插入、刪除、修改、查詢等操作;
3)完整性約束表達爲數據的自身完整性約束(如數據類型、檢查、規則等)和數據間的參照完整性約束(如聯繫、繼承聯繫等);


二、實體、屬性及標識符的定義 
實體(Entity),也稱爲實例,對應現實世界中可區別於其他對象的“事件”或“事物”。例如,學校中的每個學生,醫院中的每個手術。
每個實體都有用來描述實體特徵的一組性質,稱之爲屬性,一個實體由若干個屬性來描述。如學生實體可由學號、姓名、性別、出生年月、所在系別、入學年份等屬性組成。

實體集(Entity Set)是具體相同類型及相同性質實體的集合。例如學校所有學生的集合可定義爲“學生”實體集,“學生”實體集中的每個實體均具有學號、姓名、性別、出生年月、所在系別、入學年份等性質。

實體類型(Entity Type)是實體集中每個實體所具有的共同性質的集合,例如“患者”實體類型爲:患者{門診號,姓名,性別,年齡,身份證號.............}。實體是實體類型的一個實例,在含義明確的情況下,實體、實體類型通常互換使用。

實體類型中的每個實體包含唯一標識它的一個或一組屬性,這些屬性稱爲實體類型的標識符(Identifier),如“學號”是學生實體類型的標識符,“姓名”、“出生日期”、“信址”共同組成“公民”實體類型的標識符。

有些實體類型可以有幾組屬性充當標識符,選定其中一組屬性作爲實體類型的主標識符,其他的作爲次標識符。

三、實體、屬性及標識符的表達 

介紹PowerDesigner概念數據模型以及實體、屬性創建。

一、新建概念數據模型 
1)選擇File-->New,彈出如圖所示對話框,選擇CDM模型(即概念數據模型)建立模型。
 

2)完成概念數據模型的創建。以下圖示,對當前的工作空間進行簡單介紹。(以後再更詳細說明)
 

3) 選擇新增的CDM模型,右擊,在彈出的菜單中選擇“Properties”屬性項,彈出如圖所示對話框。在“General”標籤裏可以輸入所建模型的名 稱、代碼、描述、創建者、版本以及默認的圖表等等信息。在“Notes”標籤裏可以輸入相關描述及說明信息。當然再有更多的標籤,可以點擊 "More>>"按鈕,這裏就不再進行詳細解釋。
 

二、創建新實體 
1)在CDM的圖形窗口中,單擊工具選項版上的Entity工具,再單擊圖形窗口的空白處,在單擊的位置就出現一個實體符號。點擊Pointer工具或右擊鼠標,釋放Entitiy工具。如圖所示
 
2)雙擊剛創建的實體符號,打開下列圖標窗口,在此窗口“General”標籤中可以輸入實體的名稱、代碼、描述等信息。
 

三、添加實體屬性 
1)在上述窗口的“Attribute”選項標籤上可以添加屬性,如下圖所示。
 

注意:
數據項中的“添加屬性”和“重用已有數據項”這兩項功能與模型中Data Item的Unique code 和Allow reuse選項有關。
P列表示該屬性是否爲主標識符;D列表示該屬性是否在圖形窗口中顯示;M列表示該屬性是否爲強制的,即該列是否爲空值。

如果一個實體屬性爲強制的,那麼, 這個屬性在每條記錄中都必須被賦值,不能爲空。2)在上圖所示窗口中,點擊插入屬性按鈕,彈出屬性對話框,如下圖所示。
 
注意:這裏涉及到域的概念,即一種標準的數據結構,它可應用至數據項或實體的屬性上

一、定義屬性的標準檢查約束
標準檢查約束是一組確保屬性有效的表達式。在實體屬性的特性窗口,打開如圖所示的檢查選項卡。 
 

在這個選項卡可以定義屬性的標準檢查約束,窗口中每項的參數的含義,如下 
參 數說明Minimum屬性可接受的最小數Maximum 屬性可接受的最大數Default屬性不賦值時,系統提供的默認值Unit單位,如公里、噸、元Format屬性的數據顯示格式Lowercase屬性的 賦值全部變爲小寫字母Uppercase屬性的賦值全部變爲大寫字母Cannot modify該屬性一旦賦值不能再修改List Of Values屬性賦值列表,除列表中的值,不能有其他的值Label屬性列表值的標籤
二、定義屬性的附加檢查
當Standard checks 或Rules 不能滿足檢查的要求時,可以在Additional Checks選項卡的Server子頁上,通過SQL語句中使用%MINMAX%、%LISTVAL%、%RULES%、%UPPER%、%LOWER% 幾個變量來定義Standard和Rule,如圖所示
 

%MINMAX%、%LISTVAL%、%UPPER%、%LOWER%
在Standard Check中定義的Minimum 和Maximum、List values 、uppervalues、lowervalues

%RULES%
在Rules特性窗口Expression選項卡中定義的有效性規則表達式

一、標識符
標識符是實體中一個或多個屬性的集合,可用來唯一標識實體中的一個實例。要強調的是,CDM中的標識符等價於PDM中的主鍵或候選鍵。 
每個實體都必須至少有一個標識符。如果實體只有一個標識符,則它爲實體的主標識符。如果實體有多個標識符,則其中一個被指定爲主標識符,其餘的標識符就是次標識符了。 

二、如果定義主、次標識符 
1)選擇某個實體雙擊彈出實體的屬性對話框。在Identifiers選項卡上可以進行實體標識符的定義。如下圖所示 

 

2)選擇第一行“主標識符”,點擊屬性按鈕或雙擊第一行“主標識符”,彈出屬性對話框,如圖所示 
 
3)選擇"Attributes"選項卡,再點擊“Add Attributes”工具,彈出如圖所示窗口,選擇某個屬性作爲標識符就行了。

一、數據項
數據項(Data Item)是信息存儲的最小單位,它可以附加在實體上作爲實體的屬性。 
注意:模型中允許存在沒有附加至任何實體上的數據項。 

二、新建數據項 
1)使用“Model”---> Data Items 菜單,在打開的窗口中顯示已有的數據項的列表,點擊 “Add a Row”按鈕,創建一個新數據項,如圖所示 
 

2)當然您可以繼續設置具體數據項的Code、DataType、Length等等信息。這裏就不再詳細說明了。 

三、數據項的唯一性代碼選項和重用選項 
使用Tools--->Model Options->Model Settings。在Data Item組框中定義數據項的唯一性代碼選項(Unique Code)與重用選項(Allow Reuse)。 
注意: 
如果選擇Unique Code複選框 ,每個數據項在同一個命名空間有唯一的代碼,而選擇Allow reuse ,一個數據項可以充當多個實體的屬性。 
 

四、在實體中添加數據項 
1)雙擊一個實體符號,打開該實體的屬性窗口。 
2)單擊Attributes選項卡,打開如下圖所示窗口 
 

注意: 
Add a DataItem 與 Reuse a DataItem的區別在於 
Add a DataItem 情況下,選擇一個已經存在的數據項,系統會自動複製所選擇的數據項。如果您設置了UniqueCode選項,那系統在複製過程中,新數據項的Code會自動生成一個唯一的號碼,否則與所選擇的數據項完全一致。 


Reuse a DataItem情況下,只引用不新增,就是引用那些已經存在的數據項,作爲新實體的數據項

一、 聯繫
聯繫(Relationship)是指實體集這間或實體集內部實例之間的連接。

實體之間可以通過聯繫來相互關聯。與實體和實體集對應,聯繫也可以分爲聯繫和聯繫集,聯繫集是實體集之間的聯繫,聯繫是實體之間的聯繫,聯繫是具有方向性的。聯繫和聯繫集在含義明確的情況之下均可稱爲聯繫。

按照實體類型中實例之間的數量對應關係,通常可將聯繫分爲4類,即一對一(ONE TO ONE)聯繫、一對多(ONE TO MANY)聯繫、多對一(MANY TO ONE)聯繫和多對多聯繫(MANY TO MANY)。 二、 建立聯繫 
在CDM工具選項板中除了公共的工具外,還包括如下圖所示的其它對象產生工具。
 
在圖形窗口中創建兩個實體後,單擊“實體間建立聯繫”工具,單擊一個實體,在按下鼠標左鍵的同時把光標拖至別一個實體上並釋放鼠標左鍵,這樣就在兩個實體間創建了聯繫,右鍵單擊圖形窗口,釋放Relationship工具。如下圖所示
 

三、 四種基本的聯繫
即一對一(ONE TO ONE)聯繫、一對多(ONE TO MANY)聯繫、多對一(MANY TO ONE)聯繫和多對多聯繫(MANY TO MANY)。如圖所示
 
四、 其他幾類特殊聯繫 

除了4種基本的聯繫之外,實體集與實體集之間還存在標定聯繫(Identify Relationship)、非標定聯繫(Non-Identify RelationShip)和遞歸聯繫(Recursive Relationship)。

標定聯繫: 
每個實體類型都有自己的標識符,如果兩個實體集之間發生聯繫,其中一個實體類型的標識符進入另一個實體類型並與該實體類型中的標識符共同組成其標識符時,這種聯繫則稱爲標定聯繫,也叫依賴聯繫。反之稱爲非標定聯繫,也叫非依賴聯繫。
注意:
在 非標定聯繫中,一個實體集中的部分實例依賴於另一個實例集中的實例,在這種依賴聯繫中,每個實體必須至少有一個標識符。而在標定聯繫中,一個實體集中的全 部實例完全依賴於另個實體集中的實例,在這種依賴聯繫中一個實體必須至少有一個標識符,而另一個實體卻可以沒有自己的標識符。沒有標識符的實體用它所依賴 的實體的標識符作爲自己的標識符。

換句話來理解,在標定聯繫中,一個實體(選課)依賴 一個實體(學生),那麼(學生)實體必須至少有一個標識符,而(選課)實體可以沒有自己的標識符,沒有標標識符的實體可以用實體(學生)的標識符作爲自己的標識符。
 


遞歸聯繫: 
遞歸聯繫是實體集內部實例之間的一種聯繫,通常形象地稱爲自反聯繫。同一實體類型中不同實體集之間的聯繫也稱爲遞歸聯繫。

例 如:在“職工”實體集中存在很多的職工,這些職工之間必須存在一種領導與被領導的關係。又如“學生”實體信中的實體包含“班長”子實體集與“普通學生”子 實體集,這兩個子實體集之間的聯繫就是一種遞歸聯繫。創建遞歸聯繫時,只需要單擊“實體間建立聯繫”工具從實體的一部分拖至該實體的別一個部分即可。如圖
 

五、 定義聯繫的特性 

在兩個實體間建立了聯繫後,雙擊聯繫線,打開聯繫特性窗口,如圖所示。
 

六、 定義聯繫的角色名
在聯繫的兩個方向上各自包含有一個分組框,其中的參數只對這個方向起作用,Role Name爲角色名,描述該方向聯繫的作用,一般用一個動詞或動賓組表。
如:“學生 to 課目 ” 組框中應該填寫“擁有”,而在“課目To 學生”組框中填寫“屬於”。(在此只是舉例說明,可能有些用詞不太合理)。
七、 定義聯繫的強制性 
Mandatory 表洋這個方向聯繫的強制關係。選中這個複選框,則在聯繫線上產生一個聯繫線垂直的豎線。不選擇這個複選框則表示聯繫這個方向上是可選的,在聯繫線上產生一個小圓圈。

八、 有關聯繫的基數 
聯繫具有方向性,每個方向上都有一個基數。

舉例,
“系” 與“學生”兩個實體之間的聯繫是一對多聯繫,換句話說“學生”和“系”之間的聯繫是多對一聯繫。而且一個學生必須屬於一個系,並且只能屬於一個系,不能屬 於零個系,所以從“學生”實體至“系”實體的基數爲“1,1”,從聯繫的另一方向考慮,一個系可以擁有多個學生,也可以沒有任何學生,即零個學生,所以該 方向聯繫的基數就爲“0,n”,如圖所示
 
CDM 是大多數開發者使用PD時最先創建的模型,也是整個數據庫設計最高層的抽象。CDM是建立在傳統的ER圖模型理論之上的,ER圖中有三大主要元素:實體 型,屬性和聯繫。其中實體型對應到CDM中的Entity,屬性對應到CDM中每個Entity的Attribute,在概念上基本上是一一對應的。但在 聯繫上,CDM有了比較大的擴展,除了保留ER圖原有的RelationShip概念之外,還增加了Association,Inheritance兩種 實體關係,下面就讓我們分別看看這些關係的用法和之間的區別(下圖中被標紅的工具欄按鈕就是用來向實體中添加這些關係的)。
 
  另外,在介紹所有這些CDM中的元素之前,筆者先給出一個很簡單的CDM圖,是對我們最最熟悉的學校場景的一個建模,下文中提到的所有概念在圖中都有體現,大家在看下文的時候可以對照着來看:
 

一. RelationShip(聯繫)
  先 給出PD手冊裏對聯繫的定義:“A relationship is a link between entities. For example, in a CDM that manages human resources, the relationship Member links the entities Employee and Team, because employees can be members of teams. This relationship expresses that each employee works in a team and that each team has employees.” 可見,也許聯繫的概念真的太簡單了吧,所以反而不那麼好表述,所以PD的文檔裏也是用一個例子來說明出現了什麼樣的情況我們就認爲兩個實體間是有聯繫的。
  當 我們提起實體間聯繫的時候,最先想到的恐怕是one to one,one to many 和many to many這三種聯繫類型,這些聯繫類型也是大家最熟悉的。筆者對ER圖原本的概念並不精通,但在CDM中,聯繫還有另外三個可以設置的屬 性:mandatory(強制性聯繫), dependent(依賴性聯繫/標定關聯) 和dominant(統制聯繫)。這些屬性對後面PDM的生成都有比較大的影響,需要我們一一有所瞭解。它們都是在聯繫的屬性控制面板中設定的,見下圖:
 
1.mandatory
  聯 系是否具有強制性,指的是實體間是不是一定會出現這種聯繫;或者換句話說,當我們在談及一個聯繫的應用場景的時候,聯繫對應的那兩個實體型的實體實例的個 數可不可能爲零。也許這樣的解釋還是有點抽象,讓我們舉兩個聯繫的例子,一個是對兩邊的實體都有強制性的,另一個則不然。
(1)教師--學生 聯繫
  這個聯繫首先是一個多對多聯繫,因爲每個老師可以教多個學生,每個學生也都有多個老師來負責他們的學業。同時,這個聯繫對教師和學生都是強制性的,也就是說,不存在任何一個老師,他不負責任何一個學生的教學;也不存在任何一個學生,他沒有任何一個任課老師。
(2)學生--俱樂部 聯繫
  這個聯繫也是一個多對多關係,但它對學生這個實體型而言就不是強制的(Optional,可選的)。每個俱樂部都有至少一個學生參加,但並不是每個學生都要去參加俱樂部的活動。完全可以有一些學生,他們什麼俱樂部都沒參加。
上 面的例子主要是從概念的角度來區分了mandatory和optional的區別。實際上如果把這個模型對應到我們最後生成的表,如果A-B間的聯繫對A 是mandatory的話,那麼如果在A裏面如果包含B的外鍵,這個外鍵不能爲空值,反之可以爲空值。後面我們談到PDM和實際數據庫的時候,大家會看到 這一點。
2.dependent
  每 一個Entity型都有自己的Identifier,如果兩個Entity型之間發生關聯時,其中一個Entity型的Identifier進入另一個 Entity型並與該 Entity型中的Identifier共同組成其Identifier時,這種關聯稱爲標定關聯,也叫依賴性關聯(dependent relationship)。一個Entity型的Identifier進入另一個Entity型後充當其非Identifier時,這種關聯稱爲非標定 關聯,也叫非依賴關聯。
  概念的定義說起來還是有些拗口,說白了其實就是主-從表關 系,從表要依賴於主表。比如在我們系統裏要記錄教師休假的情況,有一個實體型Holiday,其屬性包括休假的開始時間和天數,每次有教師休假的時候,都 要在這個表留下記錄。從我們的場景描述中可以看到,實體型假期必須依附於實體型教師,即對於每一個假期實例,必須指向某一個教師實例。
  對於依賴型聯繫,必須注意它不可能是一個多對多聯繫,在這個聯繫中,必須有一個作爲主體的實體型。一個dependent聯繫的從實體可以沒有自己的identifier.
3.dominant
  這 個聯繫屬性是最爲簡單的,它僅作用於一對一聯繫,並指明這種聯繫中的主從表關係。在A,B兩個實體型的聯繫中,如果A-->B被指定爲 dominant,那麼A爲這個一對一聯繫的主表,B爲從表,並且在以後生成的PDM中會產生一個引用(如果不指定dominant屬性的話會產生兩個引 用)。比如老師和班級之間的聯繫,因爲每個班級都有一個老師做班主任,每個老師也最多隻能做一個班級的班主任,所以是一個一對一關係。同時,我們可以將老 師作爲主表,用老師的工號來唯一確定一個班主任聯繫。

二.Association(關聯)
  先 來看一下PD給association的定義:“An association is a connection between entities. In the Merise modeling methodology an association is used to connect several entities that each represents clearly defined objects, but are linked by an event, which may not be so clearly represented by another entity.”。
  在上一小段提到的那些RelationShip,在很多情況下 (特別是多對多關係中),我們會把聯繫專門提出來,作爲一個實體型放在兩個需要被關聯的實體型中間(在PD中,選中任何一個聯繫,在右鍵的彈出菜單中選擇 “Change to Entity”命令即可完成聯繫轉實體的操作)。但有的時候,把若干個實體型之間的聯繫抽象爲一個實體型可能不太合適,這個時候你可以選擇爲這些實體型建 立一個association,那麼在生成PDM的時候,所有這些相關實體型的identifier都會被加入到association對應生成的表模型 中。所以,說白了,其實association就是實體型的一種特例,用來在建模的時候更確切的表達實體間的關聯信息。在PD的文檔中舉了一個錄音帶、顧 客、商店三個實體型在租借錄音帶這個場景上發生關聯,然後把租借定義爲上述三個實體型之間的association的例子,非常確切。在我們的學校模型 裏,我定義了家訪做爲老師和學生實體型中間的一個association,在接下來產生的PDM中大家就可能看到這種定義所產生的效果。

三.Inheritance(繼承)
  這種關係在概念層面是最容易理解的了,本文就不贅述了。

前面已經介紹了CDM中關於實體間關係的主要內容,接下來我們就來看看根據這個CDM所生成的PDM是一個什麼樣子:
 
上圖中所有標紅的部分是我們最應該關注的內容,因爲他們都是由於我們對實體型間的關係的定義而產生的,下面給出一些簡單的說明。
1. “師生關係”和“學生俱樂部”這兩個表是由於我們的多對多關係而產生的。
2. “假期”表的“工號”字段是由於我們將教師-假期關係指定爲dependent而產生的。
3. “班級”表的“工號”字段是由於我們將教師-班級關係制定爲dominant而產生的。
4. “家訪”表中的“工號”和“學號”字段是由於家訪是教師和學生實體型的association而產生的。
另 外,記得我們在提到dominant屬性的時候說過,一個沒指定dominant方向的一對一聯繫將產生兩個引用,下面我們就把原本的CDM中的教師-班 級關係進行一個小小的修改,去掉這個relationship的dominant定義,那麼最終產生的PDM中教師表和班級表將互相包含對方的主鍵(由於 我們的班級表沒有自己的主鍵,所以只能在班級表中看到多出來的列),截圖如下:
 
對照這個PDM截圖和上一個PDM截圖之間的區別,大家可以很容易得看出dominant屬性對一個一對一關係的作用。

一、概念數據模型概述
數據模型是現實世界中數據特徵的抽象。數據模型應該滿足三個方面的要求:
1)能夠比較真實地模擬現實世界
2)容易爲人所理解
3)便於計算機實現

概念數據模型也稱信息模型,它以實體-聯繫(Entity-RelationShip,簡稱E-R)理論爲基礎,並對這一理論進行了擴充。它從用戶的觀點出發對信息進行建模,主要用於數據庫的概念級設計。

通 常人們先將現實世界抽象爲概念世界,然後再將概念世界轉爲機器世界。換句話說,就是先將現實世界中的客觀對象抽象爲實體(Entity)和聯繫 (Relationship),它並不依賴於具體的計算機系統或某個DBMS系統,這種模型就是我們所說的CDM;然後再將CDM轉換爲計算機上某個 DBMS所支持的數據模型,這樣的模型就是物理數據模型,即PDM。

CDM是一組嚴格定義的模型元素的集合,這些模型元素精確地描述了系統的靜態特性、動態特性以及完整性約束條件 等,其中包括了數據結構、數據操作和完整性約束 三部分。
1)數據結構表達爲實體和屬性;
2)數據操作表達爲實體中的記錄的插入、刪除、修改、查詢等操作;
3)完整性約束表達爲數據的自身完整性約束(如數據類型、檢查、規則等)和數據間的參照完整性約束(如聯繫、繼承聯繫等);


二、實體、屬性及標識符的定義 
實體(Entity),也稱爲實例,對應現實世界中可區別於其他對象的“事件”或“事物”。例如,學校中的每個學生,醫院中的每個手術。
每個實體都有用來描述實體特徵的一組性質,稱之爲屬性,一個實體由若干個屬性來描述。如學生實體可由學號、姓名、性別、出生年月、所在系別、入學年份等屬性組成。

實體集(Entity Set)是具體相同類型及相同性質實體的集合。例如學校所有學生的集合可定義爲“學生”實體集,“學生”實體集中的每個實體均具有學號、姓名、性別、出生年月、所在系別、入學年份等性質。

實體類型(Entity Type)是實體集中每個實體所具有的共同性質的集合,例如“患者”實體類型爲:患者{門診號,姓名,性別,年齡,身份證號.............}。實體是實體類型的一個實例,在含義明確的情況下,實體、實體類型通常互換使用。

實體類型中的每個實體包含唯一標識它的一個或一組屬性,這些屬性稱爲實體類型的標識符(Identifier),如“學號”是學生實體類型的標識符,“姓名”、“出生日期”、“信址”共同組成“公民”實體類型的標識符。

有些實體類型可以有幾組屬性充當標識符,選定其中一組屬性作爲實體類型的主標識符,其他的作爲次標識符。

三、實體、屬性及標識符的表達 

介紹PowerDesigner概念數據模型以及實體、屬性創建。

一、新建概念數據模型 
1)選擇File-->New,彈出如圖所示對話框,選擇CDM模型(即概念數據模型)建立模型。
 

2)完成概念數據模型的創建。以下圖示,對當前的工作空間進行簡單介紹。(以後再更詳細說明)
 

3) 選擇新增的CDM模型,右擊,在彈出的菜單中選擇“Properties”屬性項,彈出如圖所示對話框。在“General”標籤裏可以輸入所建模型的名 稱、代碼、描述、創建者、版本以及默認的圖表等等信息。在“Notes”標籤裏可以輸入相關描述及說明信息。當然再有更多的標籤,可以點擊 "More>>"按鈕,這裏就不再進行詳細解釋。
 

二、創建新實體 
1)在CDM的圖形窗口中,單擊工具選項版上的Entity工具,再單擊圖形窗口的空白處,在單擊的位置就出現一個實體符號。點擊Pointer工具或右擊鼠標,釋放Entitiy工具。如圖所示
 
2)雙擊剛創建的實體符號,打開下列圖標窗口,在此窗口“General”標籤中可以輸入實體的名稱、代碼、描述等信息。
 

三、添加實體屬性 
1)在上述窗口的“Attribute”選項標籤上可以添加屬性,如下圖所示。
 

注意:
數據項中的“添加屬性”和“重用已有數據項”這兩項功能與模型中Data Item的Unique code 和Allow reuse選項有關。
P列表示該屬性是否爲主標識符;D列表示該屬性是否在圖形窗口中顯示;M列表示該屬性是否爲強制的,即該列是否爲空值。

如果一個實體屬性爲強制的,那麼, 這個屬性在每條記錄中都必須被賦值,不能爲空。2)在上圖所示窗口中,點擊插入屬性按鈕,彈出屬性對話框,如下圖所示。
 
注意:這裏涉及到域的概念,即一種標準的數據結構,它可應用至數據項或實體的屬性上

一、定義屬性的標準檢查約束
標準檢查約束是一組確保屬性有效的表達式。在實體屬性的特性窗口,打開如圖所示的檢查選項卡。 
 

在這個選項卡可以定義屬性的標準檢查約束,窗口中每項的參數的含義,如下 
參 數說明Minimum屬性可接受的最小數Maximum 屬性可接受的最大數Default屬性不賦值時,系統提供的默認值Unit單位,如公里、噸、元Format屬性的數據顯示格式Lowercase屬性的 賦值全部變爲小寫字母Uppercase屬性的賦值全部變爲大寫字母Cannot modify該屬性一旦賦值不能再修改List Of Values屬性賦值列表,除列表中的值,不能有其他的值Label屬性列表值的標籤
二、定義屬性的附加檢查
當Standard checks 或Rules 不能滿足檢查的要求時,可以在Additional Checks選項卡的Server子頁上,通過SQL語句中使用%MINMAX%、%LISTVAL%、%RULES%、%UPPER%、%LOWER% 幾個變量來定義Standard和Rule,如圖所示
 

%MINMAX%、%LISTVAL%、%UPPER%、%LOWER%
在Standard Check中定義的Minimum 和Maximum、List values 、uppervalues、lowervalues

%RULES%
在Rules特性窗口Expression選項卡中定義的有效性規則表達式

一、標識符
標識符是實體中一個或多個屬性的集合,可用來唯一標識實體中的一個實例。要強調的是,CDM中的標識符等價於PDM中的主鍵或候選鍵。 
每個實體都必須至少有一個標識符。如果實體只有一個標識符,則它爲實體的主標識符。如果實體有多個標識符,則其中一個被指定爲主標識符,其餘的標識符就是次標識符了。 

二、如果定義主、次標識符 
1)選擇某個實體雙擊彈出實體的屬性對話框。在Identifiers選項卡上可以進行實體標識符的定義。如下圖所示 

 

2)選擇第一行“主標識符”,點擊屬性按鈕或雙擊第一行“主標識符”,彈出屬性對話框,如圖所示 
 
3)選擇"Attributes"選項卡,再點擊“Add Attributes”工具,彈出如圖所示窗口,選擇某個屬性作爲標識符就行了。

一、數據項
數據項(Data Item)是信息存儲的最小單位,它可以附加在實體上作爲實體的屬性。 
注意:模型中允許存在沒有附加至任何實體上的數據項。 

二、新建數據項 
1)使用“Model”---> Data Items 菜單,在打開的窗口中顯示已有的數據項的列表,點擊 “Add a Row”按鈕,創建一個新數據項,如圖所示 
 

2)當然您可以繼續設置具體數據項的Code、DataType、Length等等信息。這裏就不再詳細說明了。 

三、數據項的唯一性代碼選項和重用選項 
使用Tools--->Model Options->Model Settings。在Data Item組框中定義數據項的唯一性代碼選項(Unique Code)與重用選項(Allow Reuse)。 
注意: 
如果選擇Unique Code複選框 ,每個數據項在同一個命名空間有唯一的代碼,而選擇Allow reuse ,一個數據項可以充當多個實體的屬性。 
 

四、在實體中添加數據項 
1)雙擊一個實體符號,打開該實體的屬性窗口。 
2)單擊Attributes選項卡,打開如下圖所示窗口 
 

注意: 
Add a DataItem 與 Reuse a DataItem的區別在於 
Add a DataItem 情況下,選擇一個已經存在的數據項,系統會自動複製所選擇的數據項。如果您設置了UniqueCode選項,那系統在複製過程中,新數據項的Code會自動生成一個唯一的號碼,否則與所選擇的數據項完全一致。 


Reuse a DataItem情況下,只引用不新增,就是引用那些已經存在的數據項,作爲新實體的數據項

一、 聯繫
聯繫(Relationship)是指實體集這間或實體集內部實例之間的連接。

實體之間可以通過聯繫來相互關聯。與實體和實體集對應,聯繫也可以分爲聯繫和聯繫集,聯繫集是實體集之間的聯繫,聯繫是實體之間的聯繫,聯繫是具有方向性的。聯繫和聯繫集在含義明確的情況之下均可稱爲聯繫。

按照實體類型中實例之間的數量對應關係,通常可將聯繫分爲4類,即一對一(ONE TO ONE)聯繫、一對多(ONE TO MANY)聯繫、多對一(MANY TO ONE)聯繫和多對多聯繫(MANY TO MANY)。 二、 建立聯繫 
在CDM工具選項板中除了公共的工具外,還包括如下圖所示的其它對象產生工具。
 
在圖形窗口中創建兩個實體後,單擊“實體間建立聯繫”工具,單擊一個實體,在按下鼠標左鍵的同時把光標拖至別一個實體上並釋放鼠標左鍵,這樣就在兩個實體間創建了聯繫,右鍵單擊圖形窗口,釋放Relationship工具。如下圖所示
 

三、 四種基本的聯繫
即一對一(ONE TO ONE)聯繫、一對多(ONE TO MANY)聯繫、多對一(MANY TO ONE)聯繫和多對多聯繫(MANY TO MANY)。如圖所示
 
四、 其他幾類特殊聯繫 

除了4種基本的聯繫之外,實體集與實體集之間還存在標定聯繫(Identify Relationship)、非標定聯繫(Non-Identify RelationShip)和遞歸聯繫(Recursive Relationship)。

標定聯繫: 
每個實體類型都有自己的標識符,如果兩個實體集之間發生聯繫,其中一個實體類型的標識符進入另一個實體類型並與該實體類型中的標識符共同組成其標識符時,這種聯繫則稱爲標定聯繫,也叫依賴聯繫。反之稱爲非標定聯繫,也叫非依賴聯繫。
注意:
在 非標定聯繫中,一個實體集中的部分實例依賴於另一個實例集中的實例,在這種依賴聯繫中,每個實體必須至少有一個標識符。而在標定聯繫中,一個實體集中的全 部實例完全依賴於另個實體集中的實例,在這種依賴聯繫中一個實體必須至少有一個標識符,而另一個實體卻可以沒有自己的標識符。沒有標識符的實體用它所依賴 的實體的標識符作爲自己的標識符。

換句話來理解,在標定聯繫中,一個實體(選課)依賴 一個實體(學生),那麼(學生)實體必須至少有一個標識符,而(選課)實體可以沒有自己的標識符,沒有標標識符的實體可以用實體(學生)的標識符作爲自己的標識符。
 


遞歸聯繫: 
遞歸聯繫是實體集內部實例之間的一種聯繫,通常形象地稱爲自反聯繫。同一實體類型中不同實體集之間的聯繫也稱爲遞歸聯繫。

例 如:在“職工”實體集中存在很多的職工,這些職工之間必須存在一種領導與被領導的關係。又如“學生”實體信中的實體包含“班長”子實體集與“普通學生”子 實體集,這兩個子實體集之間的聯繫就是一種遞歸聯繫。創建遞歸聯繫時,只需要單擊“實體間建立聯繫”工具從實體的一部分拖至該實體的別一個部分即可。如圖
 

五、 定義聯繫的特性 

在兩個實體間建立了聯繫後,雙擊聯繫線,打開聯繫特性窗口,如圖所示。
 

六、 定義聯繫的角色名
在聯繫的兩個方向上各自包含有一個分組框,其中的參數只對這個方向起作用,Role Name爲角色名,描述該方向聯繫的作用,一般用一個動詞或動賓組表。
如:“學生 to 課目 ” 組框中應該填寫“擁有”,而在“課目To 學生”組框中填寫“屬於”。(在此只是舉例說明,可能有些用詞不太合理)。
七、 定義聯繫的強制性 
Mandatory 表洋這個方向聯繫的強制關係。選中這個複選框,則在聯繫線上產生一個聯繫線垂直的豎線。不選擇這個複選框則表示聯繫這個方向上是可選的,在聯繫線上產生一個小圓圈。

八、 有關聯繫的基數 
聯繫具有方向性,每個方向上都有一個基數。

舉例,
“系” 與“學生”兩個實體之間的聯繫是一對多聯繫,換句話說“學生”和“系”之間的聯繫是多對一聯繫。而且一個學生必須屬於一個系,並且只能屬於一個系,不能屬 於零個系,所以從“學生”實體至“系”實體的基數爲“1,1”,從聯繫的另一方向考慮,一個系可以擁有多個學生,也可以沒有任何學生,即零個學生,所以該 方向聯繫的基數就爲“0,n”,如圖所示
 
CDM 是大多數開發者使用PD時最先創建的模型,也是整個數據庫設計最高層的抽象。CDM是建立在傳統的ER圖模型理論之上的,ER圖中有三大主要元素:實體 型,屬性和聯繫。其中實體型對應到CDM中的Entity,屬性對應到CDM中每個Entity的Attribute,在概念上基本上是一一對應的。但在 聯繫上,CDM有了比較大的擴展,除了保留ER圖原有的RelationShip概念之外,還增加了Association,Inheritance兩種 實體關係,下面就讓我們分別看看這些關係的用法和之間的區別(下圖中被標紅的工具欄按鈕就是用來向實體中添加這些關係的)。
 
  另外,在介紹所有這些CDM中的元素之前,筆者先給出一個很簡單的CDM圖,是對我們最最熟悉的學校場景的一個建模,下文中提到的所有概念在圖中都有體現,大家在看下文的時候可以對照着來看:
 

一. RelationShip(聯繫)
  先 給出PD手冊裏對聯繫的定義:“A relationship is a link between entities. For example, in a CDM that manages human resources, the relationship Member links the entities Employee and Team, because employees can be members of teams. This relationship expresses that each employee works in a team and that each team has employees.” 可見,也許聯繫的概念真的太簡單了吧,所以反而不那麼好表述,所以PD的文檔裏也是用一個例子來說明出現了什麼樣的情況我們就認爲兩個實體間是有聯繫的。
  當 我們提起實體間聯繫的時候,最先想到的恐怕是one to one,one to many 和many to many這三種聯繫類型,這些聯繫類型也是大家最熟悉的。筆者對ER圖原本的概念並不精通,但在CDM中,聯繫還有另外三個可以設置的屬 性:mandatory(強制性聯繫), dependent(依賴性聯繫/標定關聯) 和dominant(統制聯繫)。這些屬性對後面PDM的生成都有比較大的影響,需要我們一一有所瞭解。它們都是在聯繫的屬性控制面板中設定的,見下圖:
 
1.mandatory
  聯 系是否具有強制性,指的是實體間是不是一定會出現這種聯繫;或者換句話說,當我們在談及一個聯繫的應用場景的時候,聯繫對應的那兩個實體型的實體實例的個 數可不可能爲零。也許這樣的解釋還是有點抽象,讓我們舉兩個聯繫的例子,一個是對兩邊的實體都有強制性的,另一個則不然。
(1)教師--學生 聯繫
  這個聯繫首先是一個多對多聯繫,因爲每個老師可以教多個學生,每個學生也都有多個老師來負責他們的學業。同時,這個聯繫對教師和學生都是強制性的,也就是說,不存在任何一個老師,他不負責任何一個學生的教學;也不存在任何一個學生,他沒有任何一個任課老師。
(2)學生--俱樂部 聯繫
  這個聯繫也是一個多對多關係,但它對學生這個實體型而言就不是強制的(Optional,可選的)。每個俱樂部都有至少一個學生參加,但並不是每個學生都要去參加俱樂部的活動。完全可以有一些學生,他們什麼俱樂部都沒參加。
上 面的例子主要是從概念的角度來區分了mandatory和optional的區別。實際上如果把這個模型對應到我們最後生成的表,如果A-B間的聯繫對A 是mandatory的話,那麼如果在A裏面如果包含B的外鍵,這個外鍵不能爲空值,反之可以爲空值。後面我們談到PDM和實際數據庫的時候,大家會看到 這一點。
2.dependent
  每 一個Entity型都有自己的Identifier,如果兩個Entity型之間發生關聯時,其中一個Entity型的Identifier進入另一個 Entity型並與該 Entity型中的Identifier共同組成其Identifier時,這種關聯稱爲標定關聯,也叫依賴性關聯(dependent relationship)。一個Entity型的Identifier進入另一個Entity型後充當其非Identifier時,這種關聯稱爲非標定 關聯,也叫非依賴關聯。
  概念的定義說起來還是有些拗口,說白了其實就是主-從表關 系,從表要依賴於主表。比如在我們系統裏要記錄教師休假的情況,有一個實體型Holiday,其屬性包括休假的開始時間和天數,每次有教師休假的時候,都 要在這個表留下記錄。從我們的場景描述中可以看到,實體型假期必須依附於實體型教師,即對於每一個假期實例,必須指向某一個教師實例。
  對於依賴型聯繫,必須注意它不可能是一個多對多聯繫,在這個聯繫中,必須有一個作爲主體的實體型。一個dependent聯繫的從實體可以沒有自己的identifier.
3.dominant
  這 個聯繫屬性是最爲簡單的,它僅作用於一對一聯繫,並指明這種聯繫中的主從表關係。在A,B兩個實體型的聯繫中,如果A-->B被指定爲 dominant,那麼A爲這個一對一聯繫的主表,B爲從表,並且在以後生成的PDM中會產生一個引用(如果不指定dominant屬性的話會產生兩個引 用)。比如老師和班級之間的聯繫,因爲每個班級都有一個老師做班主任,每個老師也最多隻能做一個班級的班主任,所以是一個一對一關係。同時,我們可以將老 師作爲主表,用老師的工號來唯一確定一個班主任聯繫。

二.Association(關聯)
  先 來看一下PD給association的定義:“An association is a connection between entities. In the Merise modeling methodology an association is used to connect several entities that each represents clearly defined objects, but are linked by an event, which may not be so clearly represented by another entity.”。
  在上一小段提到的那些RelationShip,在很多情況下 (特別是多對多關係中),我們會把聯繫專門提出來,作爲一個實體型放在兩個需要被關聯的實體型中間(在PD中,選中任何一個聯繫,在右鍵的彈出菜單中選擇 “Change to Entity”命令即可完成聯繫轉實體的操作)。但有的時候,把若干個實體型之間的聯繫抽象爲一個實體型可能不太合適,這個時候你可以選擇爲這些實體型建 立一個association,那麼在生成PDM的時候,所有這些相關實體型的identifier都會被加入到association對應生成的表模型 中。所以,說白了,其實association就是實體型的一種特例,用來在建模的時候更確切的表達實體間的關聯信息。在PD的文檔中舉了一個錄音帶、顧 客、商店三個實體型在租借錄音帶這個場景上發生關聯,然後把租借定義爲上述三個實體型之間的association的例子,非常確切。在我們的學校模型 裏,我定義了家訪做爲老師和學生實體型中間的一個association,在接下來產生的PDM中大家就可能看到這種定義所產生的效果。

三.Inheritance(繼承)
  這種關係在概念層面是最容易理解的了,本文就不贅述了。

前面已經介紹了CDM中關於實體間關係的主要內容,接下來我們就來看看根據這個CDM所生成的PDM是一個什麼樣子:
 
上圖中所有標紅的部分是我們最應該關注的內容,因爲他們都是由於我們對實體型間的關係的定義而產生的,下面給出一些簡單的說明。
1. “師生關係”和“學生俱樂部”這兩個表是由於我們的多對多關係而產生的。
2. “假期”表的“工號”字段是由於我們將教師-假期關係指定爲dependent而產生的。
3. “班級”表的“工號”字段是由於我們將教師-班級關係制定爲dominant而產生的。
4. “家訪”表中的“工號”和“學號”字段是由於家訪是教師和學生實體型的association而產生的。
另 外,記得我們在提到dominant屬性的時候說過,一個沒指定dominant方向的一對一聯繫將產生兩個引用,下面我們就把原本的CDM中的教師-班 級關係進行一個小小的修改,去掉這個relationship的dominant定義,那麼最終產生的PDM中教師表和班級表將互相包含對方的主鍵(由於 我們的班級表沒有自己的主鍵,所以只能在班級表中看到多出來的列),截圖如下:
 
對照這個PDM截圖和上一個PDM截圖之間的區別,大家可以很容易得看出dominant屬性對一個一對一關係的作用。

發佈了14 篇原創文章 · 獲贊 29 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章