CDM是大多數(shù)開發(fā)者使用PD時最先創(chuàng)建的模型,也是整個數(shù)據(jù)庫設(shè)計最高層的抽象。CDM是建立在傳統(tǒng)的ER圖模型理論之上的,ER圖中有三大主要元素: 實體型,屬性和聯(lián)系。其中實體型對應(yīng)到CDM中的Entity,屬性對應(yīng)到CDM中每個Entity的Attribute,在概念上基本上是一一對應(yīng)的。 但在聯(lián)系上,CDM有了比較大的擴(kuò)展,除了保留ER圖原有的RelationShip概念之外,還增加了Association,Inheritance 兩種實體關(guān)系,下面就讓我們分別看看這些關(guān)系的用法和之間的區(qū)別(下圖中被標(biāo)紅的工具欄按鈕就是用來向?qū)嶓w中添加這些關(guān)系的)。
另外,在介紹所有這些CDM中的元素之前,筆者先給出一個很簡單的CDM圖,是對我們最最熟悉的學(xué)校場景的一個建模,下文中提到的所有概念在圖中都有體現(xiàn),大家在看下文的時候可以對照著來看:
一. RelationShip(聯(lián)系)
先給出PD手冊里對聯(lián)系的定義:“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.” 可見,也許聯(lián)系的概念真的太簡單了吧,所以反而不那么好表述,所以PD的文檔里也是用一個例子來說明出現(xiàn)了什么樣的情況我們就認(rèn)為兩個實體間是有聯(lián)系的。
當(dāng)我們提起實體間聯(lián)系的時候,最先想到的恐怕是one to one,one to many 和many to many這三種聯(lián)系類型,這些聯(lián)系類型也是大家最熟悉的。筆者對ER圖原本的概念并不精通,但在CDM中,聯(lián)系還有另外三個可以設(shè)置的屬 性:mandatory(強(qiáng)制性聯(lián)系), dependent(依賴性聯(lián)系/標(biāo)定關(guān)聯(lián)) 和dominant(統(tǒng)制聯(lián)系)。這些屬性對后面PDM的生成都有比較大的影響,需要我們一一有所了解。它們都是在聯(lián)系的屬性控制面板中設(shè)定的,見下圖:
1.mandatory
聯(lián)系是否具有強(qiáng)制性,指的是實體間是不是一定會出現(xiàn)這種聯(lián)系;或者換句話說,當(dāng)我們在談及一個聯(lián)系的應(yīng)用場景的時候,聯(lián)系對應(yīng)的那兩個實體型的實體實例的 個數(shù)可不可能為零。也許這樣的解釋還是有點抽象,讓我們舉兩個聯(lián)系的例子,一個是對兩邊的實體都有強(qiáng)制性的,另一個則不然。
(1)教師--學(xué)生 聯(lián)系
這個聯(lián)系首先是一個多對多聯(lián)系,因為每個老師可以教多個學(xué)生,每個學(xué)生也都有多個老師來負(fù)責(zé)他們的學(xué)業(yè)。同時,這個聯(lián)系對教師和學(xué)生都是強(qiáng)制性的,也就是說,不存在任何一個老師,他不負(fù)責(zé)任何一個學(xué)生的教學(xué);也不存在任何一個學(xué)生,他沒有任何一個任課老師。
(2)學(xué)生--俱樂部 聯(lián)系
這個聯(lián)系也是一個多對多關(guān)系,但它對學(xué)生這個實體型而言就不是強(qiáng)制的(Optional,可選的)。每個俱樂部都有至少一個學(xué)生參加,但并不是每個學(xué)生都要去參加俱樂部的活動。完全可以有一些學(xué)生,他們什么俱樂部都沒參加。
上 面的例子主要是從概念的角度來區(qū)分了mandatory和optional的區(qū)別。實際上如果把這個模型對應(yīng)到我們最后生成的表,如果A-B間的聯(lián)系對A 是mandatory的話,那么如果在A里面如果包含B的外鍵,這個外鍵不能為空值,反之可以為空值。后面我們談到PDM和實際數(shù)據(jù)庫的時候,大家會看到 這一點。
2.dependent
每一個Entity型都有自己的Identifier,如果兩個Entity型之間發(fā)生關(guān)聯(lián)時,其中一個Entity型的Identifier進(jìn)入另一個 Entity型并與該 Entity型中的Identifier共同組成其Identifier時,這種關(guān)聯(lián)稱為標(biāo)定關(guān)聯(lián),也叫依賴性關(guān)聯(lián)(dependent relationship)。一個Entity型的Identifier進(jìn)入另一個Entity型后充當(dāng)其非Identifier時,這種關(guān)聯(lián)稱為非標(biāo)定 關(guān)聯(lián),也叫非依賴關(guān)聯(lián)。
概念的定義說起來還是有些拗口,說白了其實就是主-從表關(guān)系,從表要依賴于主表。比如在我們系統(tǒng)里要記錄教師休假的情 況,有一個實體型Holiday,其屬性包括休假的開始時間和天數(shù),每次有教師休假的時候,都要在這個表留下記錄。從我們的場景描述中可以看到,實體型假 期必須依附于實體型教師,即對于每一個假期實例,必須指向某一個教師實例。
對于依賴型聯(lián)系,必須注意它不可能是一個多對多聯(lián)系,在這個聯(lián)系中,必須有一個作為主體的實體型。一個dependent聯(lián)系的從實體可以沒有自己的identifier.
3.dominant
這 個聯(lián)系屬性是最為簡單的,它僅作用于一對一聯(lián)系,并指明這種聯(lián)系中的主從表關(guān)系。在A,B兩個實體型的聯(lián)系中,如果A-->B被指定為 dominant,那么A為這個一對一聯(lián)系的主表,B為從表,并且在以后生成的PDM中會產(chǎn)生一個引用(如果不指定dominant屬性的話會產(chǎn)生兩個引 用)。比如老師和班級之間的聯(lián)系,因為每個班級都有一個老師做班主任,每個老師也最多只能做一個班級的班主任,所以是一個一對一關(guān)系。同時,我們可以將老 師作為主表,用老師的工號來唯一確定一個班主任聯(lián)系。
二.Association(關(guān)聯(lián))
先來看一下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,在很多情況下(特別是多對多關(guān)系中),我們會把聯(lián)系專門 提出來,作為一個實體型放在兩個需要被關(guān)聯(lián)的實體型中間(在PD中,選中任何一個聯(lián)系,在右鍵的彈出菜單中選擇“Change to Entity”命令即可完成聯(lián)系轉(zhuǎn)實體的操作)。但有的時候,把若干個實體型之間的聯(lián)系抽象為一個實體型可能不太合適,這個時候你可以選擇為這些實體型建 立一個association,那么在生成PDM的時候,所有這些相關(guān)實體型的identifier都會被加入到association對應(yīng)生成的表模型 中。所以,說白了,其實association就是實體型的一種特例,用來在建模的時候更確切的表達(dá)實體間的關(guān)聯(lián)信息。在PD的文檔中舉了一個錄音帶、顧 客、商店三個實體型在租借錄音帶這個場景上發(fā)生關(guān)聯(lián),然后把租借定義為上述三個實體型之間的association的例子,非常確切。在我們的學(xué)校模型 里,我定義了家訪做為老師和學(xué)生實體型中間的一個association,在接下來產(chǎn)生的PDM中大家就可能看到這種定義所產(chǎn)生的效果。
三.Inheritance(繼承)
這種關(guān)系在概念層面是最容易理解的了,本文就不贅述了。
前面已經(jīng)介紹了CDM中關(guān)于實體間關(guān)系的主要內(nèi)容,接下來我們就來看看根據(jù)這個CDM所生成的PDM是一個什么樣子:
上圖中所有標(biāo)紅的部分是我們最應(yīng)該關(guān)注的內(nèi)容,因為他們都是由于我們對實體型間的關(guān)系的定義而產(chǎn)生的,下面給出一些簡單的說明。
1. “師生關(guān)系”和“學(xué)生俱樂部”這兩個表是由于我們的多對多關(guān)系而產(chǎn)生的。
2. “假期”表的“工號”字段是由于我們將教師-假期關(guān)系指定為dependent而產(chǎn)生的。
3. “班級”表的“工號”字段是由于我們將教師-班級關(guān)系制定為dominant而產(chǎn)生的。
4. “家訪”表中的“工號”和“學(xué)號”字段是由于家訪是教師和學(xué)生實體型的association而產(chǎn)生的。
另外,記得我們在提到dominant屬性的時候說過,一個沒指定dominant方向的一對一聯(lián)系將產(chǎn)生兩個引用,下面我們就把原本的CDM中的教師- 班級關(guān)系進(jìn)行一個小小的修改,去掉這個relationship的dominant定義,那么最終產(chǎn)生的PDM中教師表和班級表將互相包含對方的主鍵(由 于我們的班級表沒有自己的主鍵,所以只能在班級表中看到多出來的列),截圖如下:
對照這個PDM截圖和上一個PDM截圖之間的區(qū)別,大家可以很容易得看出dominant屬性對一個一對一關(guān)系的作用。

另外,在介紹所有這些CDM中的元素之前,筆者先給出一個很簡單的CDM圖,是對我們最最熟悉的學(xué)校場景的一個建模,下文中提到的所有概念在圖中都有體現(xiàn),大家在看下文的時候可以對照著來看:

一. RelationShip(聯(lián)系)
先給出PD手冊里對聯(lián)系的定義:“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.” 可見,也許聯(lián)系的概念真的太簡單了吧,所以反而不那么好表述,所以PD的文檔里也是用一個例子來說明出現(xiàn)了什么樣的情況我們就認(rèn)為兩個實體間是有聯(lián)系的。
當(dāng)我們提起實體間聯(lián)系的時候,最先想到的恐怕是one to one,one to many 和many to many這三種聯(lián)系類型,這些聯(lián)系類型也是大家最熟悉的。筆者對ER圖原本的概念并不精通,但在CDM中,聯(lián)系還有另外三個可以設(shè)置的屬 性:mandatory(強(qiáng)制性聯(lián)系), dependent(依賴性聯(lián)系/標(biāo)定關(guān)聯(lián)) 和dominant(統(tǒng)制聯(lián)系)。這些屬性對后面PDM的生成都有比較大的影響,需要我們一一有所了解。它們都是在聯(lián)系的屬性控制面板中設(shè)定的,見下圖:

1.mandatory
聯(lián)系是否具有強(qiáng)制性,指的是實體間是不是一定會出現(xiàn)這種聯(lián)系;或者換句話說,當(dāng)我們在談及一個聯(lián)系的應(yīng)用場景的時候,聯(lián)系對應(yīng)的那兩個實體型的實體實例的 個數(shù)可不可能為零。也許這樣的解釋還是有點抽象,讓我們舉兩個聯(lián)系的例子,一個是對兩邊的實體都有強(qiáng)制性的,另一個則不然。
(1)教師--學(xué)生 聯(lián)系
這個聯(lián)系首先是一個多對多聯(lián)系,因為每個老師可以教多個學(xué)生,每個學(xué)生也都有多個老師來負(fù)責(zé)他們的學(xué)業(yè)。同時,這個聯(lián)系對教師和學(xué)生都是強(qiáng)制性的,也就是說,不存在任何一個老師,他不負(fù)責(zé)任何一個學(xué)生的教學(xué);也不存在任何一個學(xué)生,他沒有任何一個任課老師。
(2)學(xué)生--俱樂部 聯(lián)系
這個聯(lián)系也是一個多對多關(guān)系,但它對學(xué)生這個實體型而言就不是強(qiáng)制的(Optional,可選的)。每個俱樂部都有至少一個學(xué)生參加,但并不是每個學(xué)生都要去參加俱樂部的活動。完全可以有一些學(xué)生,他們什么俱樂部都沒參加。
上 面的例子主要是從概念的角度來區(qū)分了mandatory和optional的區(qū)別。實際上如果把這個模型對應(yīng)到我們最后生成的表,如果A-B間的聯(lián)系對A 是mandatory的話,那么如果在A里面如果包含B的外鍵,這個外鍵不能為空值,反之可以為空值。后面我們談到PDM和實際數(shù)據(jù)庫的時候,大家會看到 這一點。
2.dependent
每一個Entity型都有自己的Identifier,如果兩個Entity型之間發(fā)生關(guān)聯(lián)時,其中一個Entity型的Identifier進(jìn)入另一個 Entity型并與該 Entity型中的Identifier共同組成其Identifier時,這種關(guān)聯(lián)稱為標(biāo)定關(guān)聯(lián),也叫依賴性關(guān)聯(lián)(dependent relationship)。一個Entity型的Identifier進(jìn)入另一個Entity型后充當(dāng)其非Identifier時,這種關(guān)聯(lián)稱為非標(biāo)定 關(guān)聯(lián),也叫非依賴關(guān)聯(lián)。
概念的定義說起來還是有些拗口,說白了其實就是主-從表關(guān)系,從表要依賴于主表。比如在我們系統(tǒng)里要記錄教師休假的情 況,有一個實體型Holiday,其屬性包括休假的開始時間和天數(shù),每次有教師休假的時候,都要在這個表留下記錄。從我們的場景描述中可以看到,實體型假 期必須依附于實體型教師,即對于每一個假期實例,必須指向某一個教師實例。
對于依賴型聯(lián)系,必須注意它不可能是一個多對多聯(lián)系,在這個聯(lián)系中,必須有一個作為主體的實體型。一個dependent聯(lián)系的從實體可以沒有自己的identifier.
3.dominant
這 個聯(lián)系屬性是最為簡單的,它僅作用于一對一聯(lián)系,并指明這種聯(lián)系中的主從表關(guān)系。在A,B兩個實體型的聯(lián)系中,如果A-->B被指定為 dominant,那么A為這個一對一聯(lián)系的主表,B為從表,并且在以后生成的PDM中會產(chǎn)生一個引用(如果不指定dominant屬性的話會產(chǎn)生兩個引 用)。比如老師和班級之間的聯(lián)系,因為每個班級都有一個老師做班主任,每個老師也最多只能做一個班級的班主任,所以是一個一對一關(guān)系。同時,我們可以將老 師作為主表,用老師的工號來唯一確定一個班主任聯(lián)系。
二.Association(關(guān)聯(lián))
先來看一下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,在很多情況下(特別是多對多關(guān)系中),我們會把聯(lián)系專門 提出來,作為一個實體型放在兩個需要被關(guān)聯(lián)的實體型中間(在PD中,選中任何一個聯(lián)系,在右鍵的彈出菜單中選擇“Change to Entity”命令即可完成聯(lián)系轉(zhuǎn)實體的操作)。但有的時候,把若干個實體型之間的聯(lián)系抽象為一個實體型可能不太合適,這個時候你可以選擇為這些實體型建 立一個association,那么在生成PDM的時候,所有這些相關(guān)實體型的identifier都會被加入到association對應(yīng)生成的表模型 中。所以,說白了,其實association就是實體型的一種特例,用來在建模的時候更確切的表達(dá)實體間的關(guān)聯(lián)信息。在PD的文檔中舉了一個錄音帶、顧 客、商店三個實體型在租借錄音帶這個場景上發(fā)生關(guān)聯(lián),然后把租借定義為上述三個實體型之間的association的例子,非常確切。在我們的學(xué)校模型 里,我定義了家訪做為老師和學(xué)生實體型中間的一個association,在接下來產(chǎn)生的PDM中大家就可能看到這種定義所產(chǎn)生的效果。
三.Inheritance(繼承)
這種關(guān)系在概念層面是最容易理解的了,本文就不贅述了。
前面已經(jīng)介紹了CDM中關(guān)于實體間關(guān)系的主要內(nèi)容,接下來我們就來看看根據(jù)這個CDM所生成的PDM是一個什么樣子:

上圖中所有標(biāo)紅的部分是我們最應(yīng)該關(guān)注的內(nèi)容,因為他們都是由于我們對實體型間的關(guān)系的定義而產(chǎn)生的,下面給出一些簡單的說明。
1. “師生關(guān)系”和“學(xué)生俱樂部”這兩個表是由于我們的多對多關(guān)系而產(chǎn)生的。
2. “假期”表的“工號”字段是由于我們將教師-假期關(guān)系指定為dependent而產(chǎn)生的。
3. “班級”表的“工號”字段是由于我們將教師-班級關(guān)系制定為dominant而產(chǎn)生的。
4. “家訪”表中的“工號”和“學(xué)號”字段是由于家訪是教師和學(xué)生實體型的association而產(chǎn)生的。
另外,記得我們在提到dominant屬性的時候說過,一個沒指定dominant方向的一對一聯(lián)系將產(chǎn)生兩個引用,下面我們就把原本的CDM中的教師- 班級關(guān)系進(jìn)行一個小小的修改,去掉這個relationship的dominant定義,那么最終產(chǎn)生的PDM中教師表和班級表將互相包含對方的主鍵(由 于我們的班級表沒有自己的主鍵,所以只能在班級表中看到多出來的列),截圖如下:

對照這個PDM截圖和上一個PDM截圖之間的區(qū)別,大家可以很容易得看出dominant屬性對一個一對一關(guān)系的作用。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
