




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
UML類圖與關(guān)系數(shù)據(jù)庫之間的映射策略摘要:UML是目前面向?qū)ο蟪绦蛟O(shè)計中的一種標(biāo)準(zhǔn)的建模技術(shù)。在關(guān)系數(shù)據(jù)庫系統(tǒng)的設(shè)計過程中,我們可先利用UML建立商業(yè)模型,然后將其映射成表。本文主要討論如何將UML類圖中的類映射成表的策略。關(guān)鍵詞:UML類表關(guān)系建模映射
概論在關(guān)系數(shù)據(jù)庫設(shè)計中,用來創(chuàng)建數(shù)據(jù)庫邏輯模型的標(biāo)準(zhǔn)方法是使用實體關(guān)系模型(ER模型)。ER模型的中心思想是:可以僅通過實體和它們之間的關(guān)系合理地體現(xiàn)一個組織的數(shù)據(jù)模型。但這樣做似乎對描述一個組織的信息過于簡單化,并且詞匯量也遠(yuǎn)遠(yuǎn)不足。所以,迫切需要使用更加靈活、健壯的模型來代替ER模型。標(biāo)準(zhǔn)建模語言UML是由世界著名的面向?qū)ο蠹夹g(shù)專家發(fā)起的,在綜合了著名的Booch方法、OMT方法和OOSE方法的基礎(chǔ)上而形成的一種建模技術(shù),它通過用例圖、類圖、交互圖、活動圖等模型來描述復(fù)雜系統(tǒng)的全貌及其相關(guān)部件之間的聯(lián)系。UML可以完成ER模型的所有建模工作,而且可以描述ER模型所不能表示的關(guān)系。在UML中,類圖主要用于描述系統(tǒng)中各種類及其對象之間的靜態(tài)結(jié)構(gòu)。在關(guān)系數(shù)據(jù)庫領(lǐng)域中,類與表相對應(yīng)。本文主要討論將UML類圖中的類及其對象映射成關(guān)系型數(shù)據(jù)庫中的表的策略。二.UML類圖中的類映射成表的策略UML中的類圖主要由類及其關(guān)系組成,而類之間的關(guān)系又可以細(xì)分為:(1)泛化:在UML類圖中,如果子類型的接口包括超類型的接口中的每個元素。則超類與子類之間構(gòu)成泛化關(guān)系。泛化通??梢杂美^承或授權(quán)的方式實現(xiàn)。(2)關(guān)聯(lián):在UML類圖中,關(guān)聯(lián)表示類的實例之間存在的某種關(guān)系。它通常可以有1對1、1對多和多對多等情形。(3)聚集:在UML類圖中,聚集描述了部分與整體之間的關(guān)系。(4)組成:在UML類圖中,組成由聚集演變而成,它表示一個部分對象僅屬于一個整體,并且部分對象通常與整體對象共存亡。下面結(jié)合例子,分別討論在將類映射成表的過程中這些關(guān)系的實現(xiàn)技術(shù)。假設(shè),有一個電腦公司專門從事軟件開發(fā),其項目主要由項目開發(fā)部門承擔(dān),它們之間構(gòu)成多對多的關(guān)聯(lián)(即一個項目可由多個部門承擔(dān),而一個部門又可以承擔(dān)多個項目的開發(fā)工作);項目開發(fā)部門由經(jīng)理及一般職員組成,項目開發(fā)部門和組成人員之間構(gòu)成聚集關(guān)系,而人(抽象類)又可以進(jìn)一步和一般職員及經(jīng)理兩個子類之間構(gòu)成繼承關(guān)系;每個項目具有一定的屬性,它們之間構(gòu)成組成關(guān)系。綜上所述,其主要關(guān)系的UML類圖如圖1所示。項目開發(fā)部門部門名稱項目開發(fā)部門部門名稱項目項目開始時間結(jié)束時間**經(jīng)理職位補貼
經(jīng)理職位補貼
人<Abstract>>姓名人<Abstract>>姓名
項目屬性規(guī)模屬性
職員工作類別職員工作類別
圖11.將類圖中的屬性類型映射成表的域域的使用提高了設(shè)計的一致性,且優(yōu)化了應(yīng)用的移植性。簡單的域是非常容易實現(xiàn)的,在映射時僅需替換相對應(yīng)的數(shù)據(jù)類型和數(shù)據(jù)尺寸。但要注意:有時可能要求在域的約束中加入SQL的Check串(如限定域的取值范圍等)。2.將類的屬性映射成表的字段一般地,可將類的屬性直接映射成表的一個字段,但要注意以下兩種特殊情況:(1)并不是類中的所有屬性均是永久的。例如,發(fā)票中的“合計”屬性可由計算所得而不需保存在數(shù)據(jù)庫中,此時,該類屬性(稱為派生屬性)映射成個0個字段。(2)一般地,類中的屬性是單值的,但如果在類中存在多值屬性,則該屬性映射成多個字段。3.將類直接或間接地映射成表。將UML類圖中的類映射成表時,可針對類間的不同關(guān)系,采用下面介紹的各種策略。首先,在關(guān)系數(shù)據(jù)庫中,一個關(guān)鍵問題是表主鍵的唯一性策略的選取。適當(dāng)?shù)姆桨改軆?yōu)化繼承、組成等類之間的關(guān)系的實現(xiàn)。為此,可以在處理數(shù)據(jù)庫關(guān)系時嵌入對象標(biāo)識符(OID)的概念,即采用對象標(biāo)識符OID(對象唯一的標(biāo)識符)作為相應(yīng)的數(shù)據(jù)庫中所有表的主鍵,從而簡化了關(guān)系數(shù)據(jù)庫的主鍵方案,使數(shù)據(jù)庫發(fā)生更新時,不會出現(xiàn)完整性問題,并且還可以避免在數(shù)據(jù)庫操作時的諸多限制。但要注意的是,OID不應(yīng)包含有商業(yè)內(nèi)涵(這一點可能和傳統(tǒng)的關(guān)系理論相悖),因為任何具有商業(yè)意義的字段不在控制范圍之內(nèi),從而設(shè)計者面臨值和規(guī)劃改變的危險。(1)繼承的實現(xiàn)策略一:將整個類層次映射為單個數(shù)據(jù)庫表。類層次中的所有類映射為單個的數(shù)據(jù)庫表,表中保存所有類(基類、子類)的屬性。例如,圖1中人、職員及經(jīng)理之間的關(guān)系的實現(xiàn)如圖2所示。人(主鍵)人人(主鍵)人OID對象類型姓名工作類別職位補貼
圖2該策略實現(xiàn)簡單,支持多態(tài),報表操作實現(xiàn)簡單。但增加了類層次中的耦合,類層次中任何類的屬性的增加會導(dǎo)致表的變更;某個子類屬性的修改錯誤會影響到整個層次結(jié)構(gòu),而不僅僅是該子類。并且該策略還浪費了大量的數(shù)據(jù)庫空間。策略二:每個具體子類映射成單個數(shù)據(jù)庫表。數(shù)據(jù)庫表包括自身的屬性和繼承的屬性,每個具體的子類包含各自的OID。抽象基類不參與映射,它的所有屬性都復(fù)制到子類對應(yīng)的表中。例如,圖1中的人、職員及經(jīng)理之間的關(guān)系可映射成兩個表,其中“職員”表包含“職員OID”(主鍵)、“姓名”和“工作類別”字段;“經(jīng)理”表包含“經(jīng)理OID(主鍵)”、“姓名”和“職位補貼”字段。該策略由于在表中包含了具體子類的所有信息,所以報表操作實現(xiàn)簡單。但類的修改會導(dǎo)致相對應(yīng)的表及其子類所對應(yīng)表的更改;角色的更改會造成ID的重新賦值(因為不同子類的ID可能重復(fù))。并且該策略還難以在支持多重角色時,保持?jǐn)?shù)據(jù)的完整性。策略三:每個類均映射為數(shù)據(jù)庫表。為每一個類創(chuàng)建數(shù)據(jù)庫表,表中包含特定于該類的屬性和OID。例如,圖1中的人、職員及經(jīng)理之間的關(guān)系可映射成三個表,其中“人”表包含“人OID”(主鍵)和“姓名”字段;“職員”表包含“人OID”(主鍵及外鍵)和“工作類別”字段;“經(jīng)理”表包含“人OID”(主鍵及外鍵)和“職位補貼”字段。值得注意的是:“人OID”作為所有表的主鍵。該策略與面向?qū)ο蟮母拍钕嘁恢?,對多態(tài)的支持最好,并且對于對象可能充當(dāng)?shù)慕巧珒H需要在相應(yīng)的表中保存記錄,易于修改基類和增加新的類。但由于數(shù)據(jù)庫中存在大量的表,所以訪問數(shù)據(jù)的時間較長,對報表的支持較差(除非定義視圖)。(2)關(guān)聯(lián)的實現(xiàn)在關(guān)系數(shù)據(jù)庫中,可通過外鍵實現(xiàn)類的關(guān)聯(lián)。外鍵允許表中的某一行與其它表中的行相關(guān)聯(lián)。為了下面論述方便,現(xiàn)假定M表示強制(Mandatory),O表示可選(Optional)。情況一:1對1的關(guān)聯(lián)如果關(guān)聯(lián)是O-M,則可將外鍵放置在可選的一端,該外鍵不能為空值;其它1對1的情況外鍵可放置在任意一邊,具體情況依賴于性能等因素。但要注意的是:對于1對1的情況,不要在兩個表中均放置對方的主鍵。這樣,增加了冗余,并且不會提高性能。對于關(guān)聯(lián)的強制性,一般在商業(yè)規(guī)則的對應(yīng)層實現(xiàn),而不在物理層中實現(xiàn)。情況二:1對多的關(guān)聯(lián)將外鍵放置在“多”的一方。如果“1”方是可選的,則外鍵可有空值,以表明“多”方的記錄可以獨立于“1”方存在;如果情況三:多對多的關(guān)聯(lián)實現(xiàn)多對多關(guān)系,通常需要建立一個關(guān)聯(lián)表,并把它與關(guān)系兩端的表建立聯(lián)系。在傳統(tǒng)實現(xiàn)中,關(guān)聯(lián)表的屬性包含關(guān)系中兩個表的主鍵,并且關(guān)聯(lián)表的主鍵往往是它們的組合。該實現(xiàn)方法意味兩個表的聯(lián)系是靜態(tài)的,不能跟蹤一方退出某個項目然后又在某個時候加入的情況。另一種實現(xiàn)方法是將關(guān)聯(lián)表視為普通表,使用自身的主鍵OID,然后加入實現(xiàn)關(guān)系所必需的外鍵。例如,“項目”與“項目開發(fā)部門”之間的多對多關(guān)聯(lián)可用圖3的方式實現(xiàn)。
項目開發(fā)部門(主鍵)部門OID部門名稱項目開發(fā)部門(主鍵)部門OID部門名稱關(guān)聯(lián)表(主鍵)OID(外鍵)項目OID(外鍵)部門OID項目(主鍵)項目OID開始時間結(jié)束時間
圖3
使用該方法,可保證在物理層中,所有的表具有相同的形式,從而簡化了實現(xiàn),提高了運行時效率。但要注意的是:一些數(shù)據(jù)庫在連接具有復(fù)合外鍵的表時,性能較差;并且,存在著向關(guān)聯(lián)表中增添字段的可能。(3)聚集的實現(xiàn)例如,在圖1中項目開發(fā)部門及人之間的聚集關(guān)系的實現(xiàn)如圖4所示:人(主鍵)人OIDnotnull人(主鍵)人OIDnotnull(外鍵)部門OIDnull項目開發(fā)部門(主鍵)部門OIDnotnull
圖4(4)組成的實現(xiàn)組成的映射和聚集類似,但要注意的是:子表中的外鍵必須是強制非空的。三.引用完整性及關(guān)系約束檢查的策略在UML中,類之間的關(guān)系反映了具體的商業(yè)規(guī)則,因此將類映射到關(guān)系數(shù)據(jù)庫時,必須保證類之間關(guān)系的正確定義,并確保在數(shù)據(jù)庫中實施對數(shù)據(jù)的約束。以下就1對多的情形為例加以說明(1對1關(guān)系可以視為特殊的1對多關(guān)系;多對多關(guān)系則可以分解為兩個1對多關(guān)系)。1.父表操作的約束。將類的關(guān)系映射為到關(guān)系數(shù)據(jù)庫后,父表在操作上的約束規(guī)定如表1。類關(guān)系關(guān)系類型InsertUpdateDelete關(guān)聯(lián)數(shù)據(jù)無耦合關(guān)系則一般不映射O-O無限制無限制,對子表中的外鍵可能需要附加的處理無限制,一般將子女的外鍵置空M-O無限制修改所有子女(如果存在的話)相匹配的鍵值。刪除所有子女或?qū)λ械淖优M(jìn)行重新分配。聚集O-M插入新的子女或合適的子女已存在至少修改一個子女的鍵值或合適的子女已存在無限制,一般將子女的外鍵置空組合M-M對插入進(jìn)行封裝,插入父記錄的同時至少能生成一個子女修改所有子女相匹配的鍵值刪除所有子女或?qū)λ械淖优M(jìn)行重新分配表12.子表操作的約束將類的關(guān)系映射為到關(guān)系數(shù)據(jù)庫后,子表在操作上的約束規(guī)定如表2。類關(guān)系關(guān)系類型InsertUpdateDelete關(guān)聯(lián)數(shù)據(jù)無耦合關(guān)系則一般不映射O-O無限制無限制無限制M-O父親存在或者創(chuàng)建一個父親具有新值的父親存在或創(chuàng)建父親無限制聚集O-M無限制兄弟存在兄弟存在組合M-M父親存在或者創(chuàng)建一個父親具有新值的父親存在(或創(chuàng)建父親)并且兄弟存在兄弟存在表2施加子表的約束主要是為了防止碎片的產(chǎn)生。在一些情況下(如在O-M、M-M約束中),一個子女(子表中的記錄)只有在當(dāng)其兄弟存在時才能被刪除或修改。即最后一個存在的子女是不能被刪除或修改的。此時,可以對父記錄進(jìn)行即時的更新?;蛘呓乖摬僮鳌6颖砑s束可以通過在數(shù)據(jù)庫中加入觸發(fā)器來實現(xiàn),一個更合理、可行的方法是將對子表方的限制放在業(yè)務(wù)層中實現(xiàn)。應(yīng)用程序執(zhí)行數(shù)據(jù)約束有很重要的作用。在四類約束M-M、M-O、O-M、O-O中,鍵值的修改可能會改變表之間的關(guān)系,而且可能違反一些約束。違反約束的操作是不允許的。而前面的規(guī)則僅為具體實現(xiàn)提供了可能性。具體的應(yīng)用必須根據(jù)實際的要求和商業(yè)規(guī)則進(jìn)行適當(dāng)?shù)倪x擇。但在設(shè)計和開發(fā)時,必須考慮以上所分析的約束。目前,面向?qū)ο笠殉蔀檐浖_發(fā)的主流技
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 重慶能源職業(yè)學(xué)院《概率論與統(tǒng)計》2023-2024學(xué)年第二學(xué)期期末試卷
- 海南大學(xué)《自然地理學(xué)方法之土壤生物》2023-2024學(xué)年第二學(xué)期期末試卷
- 楚雄彝族自治州永仁縣2025屆數(shù)學(xué)三下期末監(jiān)測模擬試題含解析
- 浙江省舟山市2024-2025學(xué)年高二上學(xué)期期末檢測英語試題(含聽力)
- 2025年高考?xì)v史風(fēng)標(biāo)訓(xùn)練卷3(含解析)
- 巖棉彩鋼板施工方案
- 儲罐焊縫返修施工方案
- 商丘醫(yī)用吊橋施工方案
- 2025年西醫(yī)護(hù)理學(xué)試題及答案
- 消防常識考試試題及答案
- 2024解析:第十二章機(jī)械效率-基礎(chǔ)練(解析版)
- 國家電網(wǎng)招聘考試試題及答案
- 2024年度5G基站建設(shè)材料采購合同3篇
- 危險化學(xué)品目錄(2024版)
- Unit 2 Special Days(說課稿)2023-2024學(xué)年人教新起點版英語五年級下冊
- 腦室鏡手術(shù)配合
- 2024年湖南省中考數(shù)學(xué)試卷含答案
- 濃香白酒采購合同范例
- GB/T 11981-2024建筑用輕鋼龍骨
- 藥店信息化管理制度
- 2023年山東省德州市中考化學(xué)試題
評論
0/150
提交評論