軟件工程-數(shù)據(jù)庫-Powerdesigner數(shù)據(jù)庫設計 物理數(shù)據(jù)模型的概念和使用_第1頁
軟件工程-數(shù)據(jù)庫-Powerdesigner數(shù)據(jù)庫設計 物理數(shù)據(jù)模型的概念和使用_第2頁
軟件工程-數(shù)據(jù)庫-Powerdesigner數(shù)據(jù)庫設計 物理數(shù)據(jù)模型的概念和使用_第3頁
軟件工程-數(shù)據(jù)庫-Powerdesigner數(shù)據(jù)庫設計 物理數(shù)據(jù)模型的概念和使用_第4頁
軟件工程-數(shù)據(jù)庫-Powerdesigner數(shù)據(jù)庫設計 物理數(shù)據(jù)模型的概念和使用_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

物理數(shù)據(jù)模型的概念和使用定義物理數(shù)據(jù)模型〔PhysicalDataModel〕:簡寫為PDM,是用于定義詳細定義物理結構和數(shù)據(jù)查詢的數(shù)據(jù)庫設計工具。你可以在PDM中使用不同類型的圖表,這取決于你所要設計的目標數(shù)據(jù)庫的類型。當今關于數(shù)據(jù)庫方面比擬熱門的話題莫過于數(shù)據(jù)倉庫,數(shù)據(jù)集市,OLAP,數(shù)據(jù)挖掘等內容了。而PowerDesigner對這幾方面的設計都有很好的支持,分別支持了操作型數(shù)據(jù)庫,數(shù)據(jù)倉庫或數(shù)據(jù)集市,OLAP等類型數(shù)據(jù)庫系統(tǒng)。PDMDBMS:PowerDesigner能夠用于創(chuàng)立多種不同類型的DBMS,對于每種類型的DBMS,都包含一個標準定義文件用于在PowerDesigner和DBMS中確定關聯(lián)而提供一套接口。你可以修改裝載在PowerDesigner中DBMS,對于每個你將要修改的初始DBMS,你都可以創(chuàng)立一個相應的新DBMS。新建PDM你可以通過三種方式新建PDM直接創(chuàng)立新PDM,這個操作過程和前面CDM的創(chuàng)立過程非常的類似。使用模板創(chuàng)立新PDM通過現(xiàn)有根底創(chuàng)立新PDM,現(xiàn)有元素包括:數(shù)據(jù)庫的反向工程,引入一Erwin模型,從現(xiàn)有CDM或OOM自動生成,從V6版本的數(shù)據(jù)倉庫分析模型遷移等。在本教程中,主要是通過前面創(chuàng)立好的CDM生成PDM。下面只簡要講解概述第一種PDM的創(chuàng)立過程:〔1〕選擇New,即翻開創(chuàng)立模型選項窗口,如下列圖:〔2〕選擇左邊模型列表中PhysicalDataModel,同時在DBMS下拉列表中選擇相應類型DBMS〔當然你也可以在后面的過程中更改DBMS類型〕,〔3〕在diagram中選擇PhysicalDiagram,其中列表中MultidimensionalDiagram選項用于創(chuàng)立多維〔Multidimensional〕數(shù)據(jù)模型?!?〕單擊〞確認〞,即完成PDM創(chuàng)立過程?!?〕隨后的物理數(shù)據(jù)模型的編輯操作和前面CDM的操作很類似,只不過將對實體Entity的操作更改為了對表的操作,至于其中的一些細節(jié),將在后面的教程中陸續(xù)提到。從CDM生成PDM上面簡單介紹了物理數(shù)據(jù)模型的創(chuàng)立,當然,你可以在此根底上完成數(shù)據(jù)庫設計。但是不要忘記了前面我們已經做了很多事情,設計了一個完善的概念數(shù)據(jù)模型了,現(xiàn)在我們來看看如何將CDM轉換為PDM。在CDM的設計界面下,選擇“工具->GeneralPhysicalDataModel〞〔這里你會發(fā)現(xiàn)其實各個模型之間都是可以互相轉換的〕,或使用快捷鍵:Ctrl+Shift+P,就會出轉化為PDM的界面:這里上面GenerateNewPhysicalDataModel是用于生成一個新的物理數(shù)據(jù)模型,其中要選擇設置好DBMS,還有你的PDM的Name和Code,然后就可以生成了。如果你是準備更新已經錯在的PDM,那么你可以選擇下面UpdateexistingPhysicalDataModel來繼續(xù)操作,當然需要選擇要更新的PDM和DBMS。ConfigureModelOptions中,可以對生成的參數(shù)進行一些設置,這里暫時不介紹,一般你不需要更改什么就可以點擊“確定〞開始生成了。這里值得強調的是在powerdesigner15中,DBMS的選擇中,一般來說,你需要按照你實際使用的數(shù)據(jù)庫進行選擇。但是,在操作中發(fā)現(xiàn)存在如下情況:如果選擇SQL2005或SQL2021,生成的PDM在最終生成數(shù)據(jù)庫的時候都無法生成主外鍵關系,取而代之的是生成了索引Index。要生成主外鍵關系,必須選擇SQL2000。這點讓我非常困惑,也一直沒有找到對應的設置進行解決,不知道是我的版本問題還是原先的模板就是這樣。難道是否powerdesigner15提倡不使用主外鍵關系,以防止操作錯誤??這個在一些微軟提供的實例的數(shù)據(jù)庫的設計中都可以看到這種設計。因此,如果你要最終在數(shù)據(jù)庫中生成主外鍵關系,那么即使你使用SQL2021,也建議你的DBMS使用SQL2000,因為后期我們會生成數(shù)據(jù)庫腳本,這個腳本在SQL2021上是通用的,一樣可以生成你要的基于SQL2021的數(shù)據(jù)庫。當然,如果你選擇直接更新現(xiàn)有數(shù)據(jù)庫那么可能會有一些問題的。還有一個過渡性的方法:DBMS先選擇SQL2000生成一個PDM,然后再由此PDM生成另外一個PDM,此時你可以選擇設置DBMS為SQL2021,此后生成的PDM就一切正常了。好,那我們就按上面的操作,創(chuàng)立好DBMS使用SQL2000的物理數(shù)據(jù)模型,如下列圖:很熟悉的界面吧,感覺和CDM非常的類似。注意將生成的這個PDM拖到前面你創(chuàng)立好的“物理數(shù)據(jù)模型〞文件夾下,如右圖。仔細觀察一下生成內容,表取代了原先的Entity實體。再仔細看看原先實體的屬性和現(xiàn)在的表中的數(shù)據(jù)列,你會發(fā)現(xiàn)所有的屬性和數(shù)據(jù)列都是一一對應的,包括它們的名稱、代碼、數(shù)據(jù)類型、約束等等。但是注意,這里提到的是“幾乎〞,因為在有建立聯(lián)系的表中,一些表多了一個標記為外鍵“FK〞的列。如產品表中的“分類編號〞。因此,在前期CDM設計中,你不需要考慮在實體中添加外鍵的索引,因為在生成PDM的時候,這一切系統(tǒng)會幫你完成的。而你建立的有繼承關系的表,父表已經不見〔還記得前面設置中提到這個表如何設置讓它不在PDM中出現(xiàn)嗎?〕,其屬性已經成為字表中的對應屬性。另外,表之間的聯(lián)系名稱也許讓你感到困惑,不過沒有關系,其名稱的設置還是在的,你雙擊這些聯(lián)系,就可以看到原先的中文名稱。如果要修改,當然也可以在Integrity選項卡中,你可以修改其Constraintname為你想要的名稱。再強調一下,并不是一定要先設計CDM,然后才能生成PDM并進行編輯的,只是這樣更加自然,符合軟件開發(fā)的流程。當然,如果你對powerdesigner非常的屬性,或那么工程不大,你對其數(shù)據(jù)庫設計有充分的了解,那么也可以直接使用PDM進行數(shù)據(jù)庫的設計,跳過前面CDM的過程。不要覺得前面學習的內容那就沒有用了,其實CDM和PDM的操作根本是一樣的,可以參照。下面我們將通過對CDM和PDM的對應關系的說明介紹PDM的使用。注意:因為其操作和CDM類似,這里只是比擬快的將一些根本操作流程進行說明,沒有再給出具體實例進行圖示說明,有問題,可參見前面章節(jié)的設計。小技巧:添加表名前綴:很多情況下,在一個大的工程中,往往對最終的數(shù)據(jù)庫表名有嚴格的規(guī)定,最常見的就是增加一個代表工程含義的前綴。比方,想給EStore的每個表增加一個前綴PS_,如Category表的Code就應該是PS_Code。當然,如果你一開始就想好了表名前綴,且以后肯定不修改了,可以在每個表上加上特定的前綴,在設計的時候手工寫Code的時候就可以寫好它,但顯然這樣不夠靈活,萬一需要修改呢?最好的方式是:在CDM生成PDM時候添加指定表名前綴的選項,即你在使用[Tool]–>[GeneratePhysicalDataModel]生成PDM時,在Detail選項卡中的[Table]–>[Tableprefix]中添加表名前綴,如圖:那么最后生成的PDM中,其Code就會如下列圖:域在PDM中一樣有域的概念,對于域的定義和使用在CDM的域的教程中已經說明,這里和前面根本類似,就不重復。先看一下CDM和PDM中域的對應關系。這里看到CDM和其生成的PDM中域是一一對應的。操作上你可以通過在Domains上右鍵菜單來進行添加,同樣也可以通過下面的操作來進行:選擇Model->Domains以翻開域列表〔ListofDomains〕窗口。單擊工具欄中AddaRow工具,新建域。輸入相應的Name和Code,這里我們輸入Identifier和ID。單擊Apply提交Domain的創(chuàng)立,單擊工具欄中Properties工具以翻開DomainProperties窗口,如下列圖:選擇數(shù)據(jù)類型〔Datatype〕,設置Length等屬性,同時可以選擇StandardChecks屬性頁以編輯詳細約束。單擊OK,確認修改。這樣就已經完成域Identifier的創(chuàng)立過程。再看一下修改Domain屬性:選擇Model->Domains以翻開域列表〔ListofDomains〕。單擊你想要修改的域對象,如名稱,使目標域對象處于選擇狀態(tài)。雙擊該域對象或單擊工具欄中Properties工具以翻開域屬性〔DomainProperties〕窗口,現(xiàn)在可以對域屬性進行更改了,這里我們可以將其長度設置為90。確認更改后,點擊〞應用〞,此時系統(tǒng)會自動將相關應用了該域的列進行修改,注意左下方窗口的提示信息。這里注意一下,你如果修改的是Name或Code,可能會你的修改并沒有生效,因為默認情況下域的修改會自動引起改變的只是數(shù)據(jù)類型,當然你可以修改這個配置,指定哪些信息時需要自動進行修改的:步驟如下:選擇Tools->ModelOptions,翻開ModelOptions窗口,選擇左邊樹形子菜單中Column&Domain選項,如下列圖:選擇Enforcenon-divergence,再選擇相應模型元素即可,這樣每次Domain發(fā)生更改后,對應使用了該Domain的模型元素就自動發(fā)生更改。業(yè)務規(guī)那么業(yè)務規(guī)那么的設置也域一樣,也和CDM類似,其定義就不說了。雙擊某個業(yè)務規(guī)那么,展開窗口,你會看到前面在CDM中設置好的信息,包括Expression也是完全一樣的。有時你會發(fā)現(xiàn)上面Rule_1和Rule_3這樣的規(guī)那么,好似你在CDM中并沒有配置過。雙擊翻開查看,確實是空白的,不存在Expression表達式。這是由于你某些誤操作導致的〔其實系統(tǒng)挺笨的〕,可以刪除掉他們,如果保存,有時最終會生成一些錯誤的代碼導致數(shù)據(jù)庫腳本錯誤。如果要在PDM中增加新的業(yè)務規(guī)那么,你可以按下面步驟操作:選擇Model->BusinessRules,翻開ListofBusinessRules窗口,列表顯示當前模型中存在的業(yè)務規(guī)那么,如下列圖:單擊工具欄中AddaRow工具或單擊列表中一個空白行,即添加一個新業(yè)務規(guī)那么。輸入相應的Name和Code,單擊Apply,提交業(yè)務規(guī)那么的新建。雙擊所選擇的業(yè)務規(guī)那么或單擊工具欄上Properties工具,翻開業(yè)務規(guī)那么屬性〔BusinessRuleProperties〕窗口進行編輯。再次強調:Type下拉列表中選擇相應的業(yè)務規(guī)那么方式,待選類別有定義〔Definition〕,事實〔Fact〕,公式〔Formula〕,需求〔Requirement〕,驗證〔Validation〕,約束〔Constraint〕。但只有驗證〔Validation〕和約束〔Constraint〕類型的業(yè)務規(guī)那么才能生成到數(shù)據(jù)庫中。選擇Expression屬性窗口,有兩種類型的業(yè)務規(guī)那么表達式,分別為Client和Server。其中Server局部為可以生成到數(shù)據(jù)庫中,而Client局部那么僅用于模型文檔的生成。設置完畢,單擊〞確認〞,完成業(yè)務規(guī)那么創(chuàng)立過程。要在PDM中應用業(yè)務規(guī)那么,操作如下:在當前模型圖表中雙擊將要應用業(yè)務規(guī)那么的對象,以翻開該對象屬性窗口。選擇Rules屬性,列表中顯示應用至該對象上的業(yè)務規(guī)那么列表。單擊工具欄中AddObjects工具以顯示業(yè)務規(guī)那么列表。如下列圖:選擇你想要添加的應用于該對象的業(yè)務規(guī)那么,單擊OK。在對象屬性框中單擊OK,即完成業(yè)務規(guī)那么應用,假設添加的是約束規(guī)那么或驗證規(guī)那么,你可以通過Preview選項看到業(yè)務規(guī)那么生成的數(shù)據(jù)庫代碼。注意:對于一些業(yè)務邏輯可能出現(xiàn)在多個數(shù)據(jù)表中,建議封裝成BusinessRule,這樣便于業(yè)務邏輯的重新使用,也便于業(yè)務邏輯的維護。為了便于維護業(yè)務邏輯,可以考慮將BusinessRule和Domains結合起來使用。將業(yè)務BusinessRule應用到Domains上,然后再把Domains應用到數(shù)據(jù)表的字段上。表表的對應關系很直觀了,沒有必要提供圖片了。唯一注意就是在CDM中的繼承關系在PDM中的表達:父實體根本產品信息被具體化到產品和產品分類表中去了。如果你要在PDM中直接添加表,操作如下:左鍵單擊Palette面板中Table工具左鍵單擊模型圖表空白區(qū)域以在模型圖表中新建Table圖符。單擊鼠標右鍵或單擊Palette面板中Pointer工具,使鼠標處于選擇狀態(tài)。左鍵雙擊模型圖表中剛創(chuàng)立的Table圖符以翻開Table屬性窗口,如下列圖:輸入相應表的名稱和代碼。其中Number選項為物理數(shù)據(jù)庫中表的記錄的大概估計,用于后述的估計數(shù)據(jù)庫的大小規(guī)模;Generate選項表示是否在物理數(shù)據(jù)庫中生成該表。最后勾選上Generate。單擊〞確定〞,即完成表的創(chuàng)立。創(chuàng)立完畢表后就要添加編輯列:翻開表的屬性窗口,選擇Columns屬性頁,如下所示:這里我們可能需要使用域設置名稱、圖片、狀態(tài)等信息,前面我們已經完成了域的創(chuàng)立工作,這里可以直接應用于列中。但是要注意,默認情況下,PDM中并沒有和CDM中一樣有一個Domain的設置列的,那么在哪里操作域的配置呢?單擊工具欄上CustomizeColumnsandFilter工具,彈出CustomizeColumnsandFilter窗口,在列表中選擇Domain,如下列圖:單擊OK,那么這時Columns屬性頁中顯示Domain屬性。編輯列屬性,在Domain下拉列表中選擇設置好的域,如下列圖:單擊確認,即將域〔Domain〕應用至該列。翻開Check,編輯約束,其操作參見CDM的設置。注意:在CDM中實體屬性的設置和PDM中一樣,其實列表中可以顯示的信息由很多的,你一樣可以通過CustomizeColumnsandFilter工具挑選你要顯示的信息,以方便操作。另外需要注意的是,在建立主鍵時,系統(tǒng)會在主鍵上建立索引,索引分為聚集索引和非聚集索引,在“鍵屬性〞窗口的General選項卡中可以設置該主鍵上建立的索引是聚集索引還是非聚集索引,如下圖:小技巧:供給商的主鍵SuppIdId是自增長列,在CDM的設置中我們僅僅完成了主標示符的設置,對應在生成的PDM中,該列也僅僅是一個主鍵,但并非自增長的,要設置為自增長,操作如下:點擊供給商表,編輯其屬性,選中Columns選項卡,編輯主鍵SuppId,在右下角處選中Identity即可將其設置為自增長列。隨后,點擊Microsoft,還可以編輯自增長列的起點和步長,如設置其從1開始自增,每次自增步長也為1,設置如下引用定義引用〔Reference〕在CDM中我們?yōu)楦鱾€實體設置了關系,在PDM中與之對應的就是引用。引用〔Reference〕是一個父表〔parenttable〕和子表〔childtable〕之間的連接,它定義了在數(shù)據(jù)表各列用于主鍵,候選鍵,外鍵或用戶指定列之間的完整性約束。當兩個表中的數(shù)據(jù)列通過了引用〔Reference〕連接時,子表中的該列的每個值都對應了父表中對應列的一個相同的值。在一對引用關系中,數(shù)據(jù)列之間通過連接〔Join〕連接,根據(jù)在主鍵/候選鍵中列的數(shù)目,指定列的數(shù)目,一個引用關系中可能包含一個或多個連接〔Join〕。建立引用〔Reference〕選擇Palette面板中Reference工具在模型圖表區(qū)域,左鍵單擊子表圖符并按住鼠標不放,拖動鼠標至父表圖符,松開鼠標,即在兩表之間建立了引用關系。單擊Palette面板中Pointer工具或單擊鼠標右鍵使鼠標處于選擇狀態(tài)。雙擊模型圖表中的引用〔Reference〕連接圖符以翻開引用屬性〔ReferenceProperties〕窗口,如下列圖:輸入相應的引用〔Reference〕Name和Code?!玻丁扯x引用連接〔Join〕,選擇Joins屬性頁,如下列圖所示:〔7〕在Parentkey選項列表中選擇相應的父表鍵,此時列表中顯示出當前連接〔Join〕所連接的父表列和對應的子表列?!玻浮超F(xiàn)在可以對對應于每個父表列〔ParentTableColumn〕的子表列〔ChildTableColumn〕進行選擇更改。注意:添加引用關系的時候,一般系統(tǒng)會自動將主表中的標示列添加到字表中,不需要你手動添加。但如果子表中已經有一個字段名稱、Code、數(shù)據(jù)類型都和主表的主鍵相匹配,系統(tǒng)會自動將引用關聯(lián)到這個列上。重建引用〔Rebuildingreferences〕:有時我們進行反向工程〔下一章節(jié)會介紹〕時可能不會將所有的對象都添加進去,這時可能會遇到引用沖突問題,即在已經添加進反向工程的工程中可能包含一些具有引用關系的表,而這些引用關系與沒有添加進反向工程中。這時我們可以借助PowerDesigner提供的重建引用〔Rebuildingreferences〕功能,對引用進行選擇重建。選擇Tools->RebuildObjects->RebuildReferences,彈出重建引用窗口。在General屬性頁中選擇重建引用方式〔其中Deleteandrebuild方式為刪除所有現(xiàn)有引用,再根據(jù)匹配鍵列創(chuàng)立新的引用;Perserve方式為保存所有現(xiàn)有引用,且根據(jù)匹配鍵列建立新的引用〕。選擇Selection屬性頁,根據(jù)需要選擇你要重建引用的表。確認選擇后,單擊〞確認〞按鈕,假設你選擇的重建方式為Deleteandrebuild,那么會彈出確認對話框。確認重建,單擊〞是(Y)〞即可完成重建引用。注意:powerdesigner雖然提供了這個重建引用的功能,但因為系統(tǒng)的智能不能滿足需要,因此往往你會發(fā)現(xiàn)重建的引用和你預期的不一樣,因此,一般還是建議重建引用后必須手動檢查修正。引用完整性〔ReferentialIntegrity〕:引用完整性是管理數(shù)據(jù)主鍵,候選鍵和外鍵之間數(shù)據(jù)一致性的一系列規(guī)那么,它定義了當你更新或刪除父表中的一個被引用的列,或從父表中刪除一條包含被引用的列的數(shù)據(jù)記錄時要發(fā)生的動作。有以下兩種方式實現(xiàn)引用完整性:Declarative:引用完整性通過詳細引用來定義,當引用生成目標DBMS,它評估引用的正確性并生成相應的錯誤消息。Usingtriggers:通過在引用屬性窗口中定義的基于完整性約束的觸發(fā)器〔Trigger〕來實現(xiàn)引用完整性約束。觸發(fā)器用于衡量引用的正確性并生成適當?shù)挠脩糇远x錯誤信息。注:對于目標數(shù)據(jù)庫你可以作為生成目標數(shù)據(jù)庫的選項而定義引用完整性,但并不是所有的類型的DBMS都支持使用引用完整性作為生成數(shù)據(jù)庫的選項,此時當你生成這些類型DBMS的SQL腳本時,其中不會包含引用完整性的定義。定義引用完整性雙擊模型圖表中的引用圖符以翻開引用屬性窗口。選擇Integrity屬性頁,顯示出其中用于引用完整性約束的一系列可設置選項,如下列圖:默認情況下設置為Declarative,如果更新或刪除時違反引用規(guī)那么,如要刪除的某條產品信息中,該產品的產品分類確不存在,此時會報錯。如果你跟新為Usingtriggers,那么后面就會針對這個情況生成對應的腳本,在刪除前對產品分類進行檢查,看該分類是否存在,防止出錯。關于觸發(fā)器Triggers在下一章節(jié)中還會進一步說明。小技巧:引用關系命名規(guī)那么的修改看一下生成的引用關系命名,可能你會覺得

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論