PowerDesigner 教程篇 - 概念数据模型
??? 概念數(shù)據(jù)模型也稱信息模型,它以實(shí)體-聯(lián)系(Entity-RelationShip,簡稱E-R)理論為基礎(chǔ),并對這一理論進(jìn)行了擴(kuò)充。它從用戶的觀點(diǎn)出發(fā)對信息進(jìn)行建模,主要用于數(shù)據(jù)庫的概念級設(shè)計(jì)。
??? 通常人們先將現(xiàn)實(shí)世界抽象為概念世界,然后再將概念世界轉(zhuǎn)為機(jī)器世界。換句話說,就是先將現(xiàn)實(shí)世界中的客觀對象抽象為實(shí)體(Entity)和聯(lián)系 (Relationship),它并不依賴于具體的計(jì)算機(jī)系統(tǒng)或某個DBMS系統(tǒng),這種模型就是我們所說的CDM;然后再將CDM轉(zhuǎn)換為計(jì)算機(jī)上某個 DBMS所支持的數(shù)據(jù)模型,這樣的模型就是物理數(shù)據(jù)模型,即PDM。
??? CDM是一組嚴(yán)格定義的模型元素的集合,這些模型元素精確地描述了系統(tǒng)的靜態(tài)特性、動態(tài)特性以及完整性約束條件等,其中包括了數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)操作和完整性約束三部分。
1)數(shù)據(jù)結(jié)構(gòu)表達(dá)為實(shí)體和屬性;
2)數(shù)據(jù)操作表達(dá)為實(shí)體中的記錄的插入、刪除、修改、查詢等操作;
3)完整性約束表達(dá)為數(shù)據(jù)的自身完整性約束(如數(shù)據(jù)類型、檢查、規(guī)則等)和數(shù)據(jù)間的參照完整性約束(如聯(lián)系、繼承聯(lián)系等);
二、實(shí)體、屬性及標(biāo)識符的定義
??? 實(shí)體(Entity),也稱為實(shí)例,對應(yīng)現(xiàn)實(shí)世界中可區(qū)別于其他對象的“事件”或“事物”。例如,學(xué)校中的每個學(xué)生,醫(yī)院中的每個手術(shù)。每個實(shí)體都有用來描述實(shí)體特征的一組性質(zhì),稱之為屬性,一個實(shí)體由若干個屬性來描述。如學(xué)生實(shí)體可由學(xué)號、姓名、性別、出生年月、所在系別、入學(xué)年份等屬性組成。
??? 實(shí)體集(Entity Set)是具體相同類型及相同性質(zhì)實(shí)體的集合。例如學(xué)校所有學(xué)生的集合可定義為“學(xué)生”實(shí)體集,“學(xué)生”實(shí)體集中的每個實(shí)體均具有學(xué)號、姓名、性別、出生年月、所在系別、入學(xué)年份等性質(zhì)。
??? 實(shí)體類型(Entity Type)是實(shí)體集中每個實(shí)體所具有的共同性質(zhì)的集合,例如“患者”實(shí)體類型為:患者{門診號,姓名,性別,年齡,身份證號.............}。實(shí)體是實(shí)體類型的一個實(shí)例,在含義明確的情況下,實(shí)體、實(shí)體類型通常互換使用。實(shí)體類型中的每個實(shí)體包含唯一標(biāo)識它的一個或一組屬性,這些屬性稱為實(shí)體類型的標(biāo)識符(Identifier),如“學(xué)號”是學(xué)生實(shí)體類型的標(biāo)識符,“姓名”、“出生日期”、“信址”共同組成“公民”實(shí)體類型的標(biāo)識符。有些實(shí)體類型可以有幾組屬性充當(dāng)標(biāo)識符,選定其中一組屬性作為實(shí)體類型的主標(biāo)識符,其他的作為次標(biāo)識符。
三、實(shí)體、屬性及標(biāo)識符的表達(dá)
四、新建概念數(shù)據(jù)模型
1)選擇File-->New,彈出如圖所示對話框,選擇CDM模型(即概念數(shù)據(jù)模型)建立模型。
2)完成概念數(shù)據(jù)模型的創(chuàng)建。以下圖示,對當(dāng)前的工作空間進(jìn)行簡單介紹。(以后再更詳細(xì)說明)
3)選擇新增的CDM模型,右擊,在彈出的菜單中選擇“Properties”屬性項(xiàng),彈出如圖所示對話框。在“General”標(biāo)簽里可以輸入所建模型的名稱、代碼、描述、創(chuàng)建者、版本以及默認(rèn)的圖表等等信息。在“Notes”標(biāo)簽里可以輸入相關(guān)描述及說明信息。當(dāng)然再有更多的標(biāo)簽,可以點(diǎn)擊 "More>>"按鈕,這里就不再進(jìn)行詳細(xì)解釋。
五、定義實(shí)體
1、創(chuàng)建實(shí)體
1)在CDM的圖形窗口中,單擊工具選項(xiàng)版上的Entity工具,再單擊圖形窗口的空白處,在單擊的位置就出現(xiàn)一個實(shí)體符號。點(diǎn)擊Pointer工具或右擊鼠標(biāo),釋放Entitiy工具。如圖所示
2)雙擊剛創(chuàng)建的實(shí)體符號,打開下列圖標(biāo)窗口,在此窗口“General”標(biāo)簽中可以輸入實(shí)體的名稱、代碼、描述等信息。
Name:是用來在模型中標(biāo)識一個實(shí)體,一般用于模型在界面中的顯示(這個可以通過更改選項(xiàng)設(shè)置進(jìn)行改變)。在一個模型當(dāng)中,實(shí)體的名字不能重復(fù)。
Code:在模型轉(zhuǎn)化時一般作為對象的物理名稱,比如把實(shí)體屬性的Code轉(zhuǎn)化為數(shù)據(jù)庫中的列名,當(dāng)然我們現(xiàn)在不必為了這個實(shí)體將來叫什么而費(fèi)神,一般采取與Name一致即可。
Generate:默認(rèn)是選擇狀態(tài),如果取消,則在轉(zhuǎn)化為其他模型時,會忽略這個實(shí)體。
2、添加實(shí)體屬性1)在上述窗口的“Attribute”選項(xiàng)標(biāo)簽上可以添加屬性,如下圖所示。
注意:
數(shù)據(jù)項(xiàng)中的“添加屬性”和“重用已有數(shù)據(jù)項(xiàng)”這兩項(xiàng)功能與模型中Data Item的Unique code 和Allow reuse選項(xiàng)有關(guān)。
P列表示該屬性是否為主標(biāo)識符;D列表示該屬性是否在圖形窗口中顯示;M列表示該屬性是否為強(qiáng)制的,即該列是否為空值。
如果一個實(shí)體屬性為強(qiáng)制的,那么, 這個屬性在每條記錄中都必須被賦值,不能為空。
按“Crtl+U”呼出“定制列過濾器”的窗口,可以根據(jù)自己的喜好和實(shí)際需要選擇那些列出現(xiàn)在窗口中,那些隱藏。使用快捷鍵 “Crtl+E”可以允許或者禁止當(dāng)前過濾器。
2)在上圖所示窗口中,點(diǎn)擊插入屬性按鈕,彈出屬性對話框,如下圖所示。
1)定義屬性的標(biāo)準(zhǔn)檢查
標(biāo)準(zhǔn)檢查約束是一組確保屬性有效的表達(dá)式。在實(shí)體屬性的特性窗口,打開如圖所示的檢查選項(xiàng)卡。
在這個選項(xiàng)卡可以定義屬性的標(biāo)準(zhǔn)檢查約束,窗口中每項(xiàng)的參數(shù)的含義,如下
| 參數(shù) | 說明 |
| Minimum | 屬性可接受的最小數(shù) |
| Maximum? | 屬性可接受的最大數(shù) |
| Default | 屬性不賦值時,系統(tǒng)提供的默認(rèn)值 |
| Unit | 單位,如公里、噸、元 |
| Format | 屬性的數(shù)據(jù)顯示格式 |
| Lowercase | 屬性的賦值全部變?yōu)樾懽帜?/td> |
| Uppercase | 屬性的賦值全部變?yōu)榇髮懽帜?/td> |
| Cannot modify | 該屬性一旦賦值不能再修改 |
| List Of Values | 屬性賦值列表,除列表中的值,不能有其他的值 |
| Label | 屬性列表值的標(biāo)簽 |
2)定義屬性的附加檢查
當(dāng)Standard checks 或Rules 不能滿足檢查的要求時,可以在Additional Checks選項(xiàng)卡的Server子頁上,通過SQL語句中使用%MINMAX%、%LISTVAL%、%RULES%、%UPPER%、%LOWER% 幾個變量來定義Standard和Rule,如圖所示
%MINMAX%、%LISTVAL%、%UPPER%、%LOWER%
在Standard Check中定義的Minimum 和Maximum、List values 、uppervalues、lowervalues
%RULES%
在Rules特性窗口Expression選項(xiàng)卡中定義的有效性規(guī)則表達(dá)式
六、標(biāo)識符
??? 標(biāo)識符是實(shí)體中一個或多個屬性的集合,可用來唯一標(biāo)識實(shí)體中的一個實(shí)例。要強(qiáng)調(diào)的是,CDM中的標(biāo)識符等價于PDM中的主鍵或候選鍵。每個實(shí)體都必須至少有一個標(biāo)識符。如果實(shí)體只有一個標(biāo)識符,則它為實(shí)體的主標(biāo)識符。如果實(shí)體有多個標(biāo)識符,則其中一個被指定為主標(biāo)識符,其余的標(biāo)識符就是次標(biāo)識符了。
1、定義主、次標(biāo)識符
1)選擇某個實(shí)體雙擊彈出實(shí)體的屬性對話框。在Identifiers選項(xiàng)卡上可以進(jìn)行實(shí)體標(biāo)識符的定義。如下圖所示
2)選擇第一行“主標(biāo)識符”,點(diǎn)擊屬性按鈕或雙擊第一行“主標(biāo)識符”,彈出屬性對話框,如圖所示
3)選擇"Attributes"選項(xiàng)卡,再點(diǎn)擊“Add Attributes”工具,彈出如圖所示窗口,選擇某個屬性作為標(biāo)識符就行了。
數(shù)據(jù)項(xiàng)(Data Item)是信息存儲的最小單位,它可以附加在實(shí)體上作為實(shí)體的屬性。
注意:模型中允許存在沒有附加至任何實(shí)體上的數(shù)據(jù)項(xiàng)。
1、新建數(shù)據(jù)項(xiàng)
1)使用“Model”---> Data Items 菜單,在打開的窗口中顯示已有的數(shù)據(jù)項(xiàng)的列表,點(diǎn)擊 “Add a Row”按鈕,創(chuàng)建一個新數(shù)據(jù)項(xiàng),如圖所示
2)當(dāng)然您可以繼續(xù)設(shè)置具體數(shù)據(jù)項(xiàng)的Code、DataType、Length等等信息。這里就不再詳細(xì)說明了。
2、數(shù)據(jù)項(xiàng)的唯一性代碼選項(xiàng)和重用選項(xiàng)
使用Tools--->Model Options->Model Settings。在Data Item組框中定義數(shù)據(jù)項(xiàng)的唯一性代碼選項(xiàng)(Unique Code)與重用選項(xiàng)(Allow Reuse)。
注意:
如果選擇Unique Code復(fù)選框 ,每個數(shù)據(jù)項(xiàng)在同一個命名空間有唯一的代碼,而選擇Allow reuse ,一個數(shù)據(jù)項(xiàng)可以充當(dāng)多個實(shí)體的屬性。
3、在實(shí)體中添加數(shù)據(jù)項(xiàng)
1)雙擊一個實(shí)體符號,打開該實(shí)體的屬性窗口。
2)單擊Attributes選項(xiàng)卡,打開如下圖所示窗口
注意:
Add a DataItem 與 Reuse a DataItem的區(qū)別在于
Add a DataItem 情況下,選擇一個已經(jīng)存在的數(shù)據(jù)項(xiàng),系統(tǒng)會自動復(fù)制所選擇的數(shù)據(jù)項(xiàng)。如果您設(shè)置了UniqueCode選項(xiàng),那系統(tǒng)在復(fù)制過程中,新數(shù)據(jù)項(xiàng)的Code會自動生成一個唯一的號碼,否則與所選擇的數(shù)據(jù)項(xiàng)完全一致。
Reuse a DataItem情況下,只引用不新增,就是引用那些已經(jīng)存在的數(shù)據(jù)項(xiàng),作為新實(shí)體的數(shù)據(jù)項(xiàng)。
八、 聯(lián)系
??? 聯(lián)系(Relationship)是指實(shí)體集這間或?qū)嶓w集內(nèi)部實(shí)例之間的連接。
??? 實(shí)體之間可以通過聯(lián)系來相互關(guān)聯(lián)。與實(shí)體和實(shí)體集對應(yīng),聯(lián)系也可以分為聯(lián)系和聯(lián)系集,聯(lián)系集是實(shí)體集之間的聯(lián)系,聯(lián)系是實(shí)體之間的聯(lián)系,聯(lián)系是具有方向性的。聯(lián)系和聯(lián)系集在含義明確的情況之下均可稱為聯(lián)系。
??? 按照實(shí)體類型中實(shí)例之間的數(shù)量對應(yīng)關(guān)系,通常可將聯(lián)系分為4類,即一對一(ONE?TO ONE)聯(lián)系、一對多(ONE TO MANY)聯(lián)系、多對一(MANY TO ONE)聯(lián)系和多對多聯(lián)系(MANY TO MANY)。
1、?建立聯(lián)系
在CDM工具選項(xiàng)板中除了公共的工具外,還包括如下圖所示的其它對象產(chǎn)生工具。
?在圖形窗口中創(chuàng)建兩個實(shí)體后,單擊“實(shí)體間建立聯(lián)系”工具,單擊一個實(shí)體,在按下鼠標(biāo)左鍵的同時把光標(biāo)拖至別一個實(shí)體上并釋放鼠標(biāo)左鍵,這樣就在兩個實(shí)體間創(chuàng)建了聯(lián)系,右鍵單擊圖形窗口,釋放Relationship工具。如下圖所示
在兩個實(shí)體間建立了聯(lián)系后,雙擊聯(lián)系線,打開聯(lián)系特性窗口,如圖所示。
2、?四種基本的聯(lián)系
即一對一(ONE?TO ONE)聯(lián)系、一對多(ONE TO MANY)聯(lián)系、多對一(MANY TO ONE)聯(lián)系和多對多聯(lián)系(MANY TO MANY)。如圖所示
3、?其他幾類特殊聯(lián)系
除了4種基本的聯(lián)系之外,實(shí)體集與實(shí)體集之間還存在標(biāo)定聯(lián)系(Identify Relationship)、非標(biāo)定聯(lián)系(Non-Identify RelationShip)和遞歸聯(lián)系(Recursive Relationship)。
標(biāo)定聯(lián)系:
每個實(shí)體類型都有自己的標(biāo)識符,如果兩個實(shí)體集之間發(fā)生聯(lián)系,其中一個實(shí)體類型的標(biāo)識符進(jìn)入另一個實(shí)體類型并與該實(shí)體類型中的標(biāo)識符共同組成其標(biāo)識符時,這種聯(lián)系則稱為標(biāo)定聯(lián)系,也叫依賴聯(lián)系。反之稱為非標(biāo)定聯(lián)系,也叫非依賴聯(lián)系。
?注意:
在非標(biāo)定聯(lián)系中,一個實(shí)體集中的部分實(shí)例依賴于另一個實(shí)例集中的實(shí)例,在這種依賴聯(lián)系中,每個實(shí)體必須至少有一個標(biāo)識符。而在標(biāo)定聯(lián)系中,一個實(shí)體集中的全部實(shí)例完全依賴于另個實(shí)體集中的實(shí)例,在這種依賴聯(lián)系中一個實(shí)體必須至少有一個標(biāo)識符,而另一個實(shí)體卻可以沒有自己的標(biāo)識符。沒有標(biāo)識符的實(shí)體用它所依賴的實(shí)體的標(biāo)識符作為自己的標(biāo)識符。
換句話來理解,在標(biāo)定聯(lián)系中,一個實(shí)體(選課)依賴 一個實(shí)體(學(xué)生),那么(學(xué)生)實(shí)體必須至少有一個標(biāo)識符,而(選課)實(shí)體可以沒有自己的標(biāo)識符,沒有標(biāo)標(biāo)識符的實(shí)體可以用實(shí)體(學(xué)生)的標(biāo)識符作為自己的標(biāo)識符。
?遞歸聯(lián)系:
遞歸聯(lián)系是實(shí)體集內(nèi)部實(shí)例之間的一種聯(lián)系,通常形象地稱為自反聯(lián)系。同一實(shí)體類型中不同實(shí)體集之間的聯(lián)系也稱為遞歸聯(lián)系。
例如:在“職工”實(shí)體集中存在很多的職工,這些職工之間必須存在一種領(lǐng)導(dǎo)與被領(lǐng)導(dǎo)的關(guān)系。又如“學(xué)生”實(shí)體信中的實(shí)體包含“班長”子實(shí)體集與“普通學(xué)生”子實(shí)體集,這兩個子實(shí)體集之間的聯(lián)系就是一種遞歸聯(lián)系。創(chuàng)建遞歸聯(lián)系時,只需要單擊“實(shí)體間建立聯(lián)系”工具從實(shí)體的一部分拖至該實(shí)體的別一個部分即可。如圖
3、 定義聯(lián)系的特性
雙擊關(guān)系(Relationship)的符號,進(jìn)入關(guān)系的屬性頁,在Detail項(xiàng)目中,我們可以對兩個實(shí)體的關(guān)系進(jìn)行詳細(xì)的定義,如下圖:
一般最好為關(guān)系取一個貼切的名字,本例的業(yè)務(wù)關(guān)系描述如下:一個部門有多個員工,我們使用“Has”作為這個關(guān)系的名字。
同樣的我們也可以描述為:多個員工屬于一個部門,可不可以使用“Belong to”作為關(guān)系名字呢?一般不推薦這樣做,在概念圖中有一個約定,關(guān)系的名字采用從“1,n”中“1”所在的方向向“n”所在一方進(jìn)行讀取的語義。本例即 “1”在部門一方,從部門一方向雇員一方讀取語義,即:部門有(Has)多個員工。
假定對于實(shí)體部門(Department)和雇員(Employee),具有如下關(guān)系:
- 一個部門可以有多個雇員,新成立的部門也可以暫時沒有任何雇員;
- 一個雇員必須屬于一個部門,并且同時只能屬于一個部門;
根據(jù)以上關(guān)系,我們修改屬性頁,部門-雇員的方向采用默認(rèn)的0,n,雇員-部門的方向修改為強(qiáng)制約束(Mandatory),或者從下拉框中選擇“1,1”,如下圖:
最后定義完成的關(guān)系(Relationship)在概念圖中表示如下:
注:在Power Designer中,關(guān)系符號靠近實(shí)體端的一個“橫線”代表強(qiáng)制性約束,“空心圓圈”代表無強(qiáng)制約束,即這一方可以無對象關(guān)聯(lián);“非分岔”線代表為“1” 的關(guān)系,“分岔”線代表“多”的關(guān)系。以上四個符號共可以組合出16種關(guān)系(包含反向)。其中“多對多”的關(guān)系一般通過給出一個中間實(shí)體來進(jìn)行分解,所以在許多概念圖中,是看不到實(shí)際的“多對多”的關(guān)系存在的。
另外在關(guān)系的屬性中還有兩項(xiàng):Dominant role 和Dependent,可以表示更復(fù)雜的關(guān)系,會在后面講到。
使用依賴關(guān)系(Dependent)
還是使用上面的例子,我們假定這樣的業(yè)務(wù)描述:雇員享有假期,雇員每次休假,需要記錄雇員休假的起始日與結(jié)束日,假期以天為單位,一個雇員和一個開始日唯一確定一個假期。根據(jù)這個業(yè)務(wù)描述,我們知道,對于假期而言,其必須依存于實(shí)體“Employee”而存在,即一個休假,必定有一個主體雇員。我們在上一個模型的基礎(chǔ)之上,添加一個實(shí)體,名稱是“Holiday”,定義假期的屬性開始日與結(jié)束日,這里并不需要重復(fù)定義一個雇員編號,而是替代的,使用依賴關(guān)系,來表示實(shí)體“Holiday”依賴于實(shí)體“Employee”,關(guān)系定義如下圖:
在實(shí)體“Holiday”中,我們需要設(shè)置開始日為主鍵標(biāo)識符,開始日與其依賴實(shí)體中的雇員編號一起作為實(shí)體“Holiday”的標(biāo)識符,用來唯一確定一個假期。這種依賴關(guān)系在概念圖中表現(xiàn)如下:
從途中可以看出,在實(shí)體“Holiday”一端多了一個朝外的三角▲箭頭,這個含義就是這個實(shí)體“的依賴于三角箭頭所指的另外一個實(shí)體,在轉(zhuǎn)化出來的物理模型當(dāng)中,實(shí)體“Employee”的empNo,在Holiday實(shí)體中不僅會作為一個外鍵,還同時會作為主鍵出現(xiàn)(與startData一起作為復(fù)合主鍵)。
使用Dominant role
當(dāng)兩個實(shí)體之間的關(guān)系是1..1 時(盡管這種關(guān)系比較少見,常見于面向?qū)ο蟮脑O(shè)計(jì)方法當(dāng)中,依賴實(shí)體中的主鍵通常與外健重合),你需要明確指定這兩個實(shí)體,哪一個是父實(shí)體,哪一個是依賴實(shí)體,否則,系統(tǒng)在由概念模型轉(zhuǎn)化為物理模型時,將不能確定需要在哪一端生成外鍵,這時就需要用到“Dominant role”選項(xiàng),這個選項(xiàng)只有在1..1 的關(guān)系中才允許進(jìn)行設(shè)置。我們假定這樣的業(yè)務(wù)描述,企業(yè)中的部分雇員擁有一個系統(tǒng)帳號,并且是唯一的一個帳號,這些雇員需要保存一些額外的信息,比如帳號名稱、密碼等等。我們添加了一個新的實(shí)體“User”,其與雇員之間為1..1 的關(guān)系,由于一個用戶帳號必定屬于一個雇員,而一個雇員則可能沒有用戶帳號,所以我們定義實(shí)體“Employee”支配實(shí)體“User”。同時,由于 “User”依賴于“Employee”而存在,所以再定義一個由前者到后者的依賴關(guān)系,如下圖:
Dominant role 選項(xiàng)中,箭頭所指的實(shí)體為被支配的實(shí)體,即作為依賴實(shí)體。在模型圖中,支配實(shí)體的一方會出現(xiàn)一個用圓括號括起來的大寫字母“D”。
轉(zhuǎn)化出來的物理模型中,表User中,empNo作為單獨(dú)的主鍵,同時也是引用Employee表的一個外鍵。
處理多對多(n..n)的關(guān)系
在概念模型中,一般很少看見兩個實(shí)體之間是直接的n..n 的關(guān)系,一般這種情況下我們會增加一個中間實(shí)體,在Power Designer中,提供了一個專門的符號來對應(yīng),叫做“Association”。請考慮以下的情形:
企業(yè)中擁有帳號的雇員在系統(tǒng)中具有不同的操作權(quán)限,這通過用戶角色來進(jìn)行管理,權(quán)限已經(jīng)分配給了多個不同的角色,一個用戶帳號至少屬于一個角色,并且可能會同時屬于多個角色,一個角色可以包含0個或多個用戶帳號。根據(jù)以上描述,我們添加一個實(shí)體“Role”,它與實(shí)體“User”之間是n..n 的關(guān)系,為了表達(dá)這種關(guān)系,我們增加一個“Association”并分別使用“Association Link”與其他兩個實(shí)體建立關(guān)系,表示如下:
使用一個普通的實(shí)體,合理定義關(guān)系,并選擇“Dependent”選項(xiàng),是可以替代“Association”的,但使用 “Association”更方便、直觀,使模型更容易理解,并可以減少因不謹(jǐn)慎而可能導(dǎo)致的錯誤。
轉(zhuǎn)載于:https://www.cnblogs.com/kingjiong/archive/2010/04/01/1701880.html
總結(jié)
以上是生活随笔為你收集整理的PowerDesigner 教程篇 - 概念数据模型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DIV图片垂直居中
- 下一篇: 间接通过new 来申请一个二维的堆内存数