下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
UML類圖與關(guān)系數(shù)據(jù)庫之間的映射策略摘要:UML是目前面向?qū)ο蟪绦蛟O(shè)計(jì)中的一種標(biāo)準(zhǔn)的建模技術(shù)。在關(guān)系數(shù)據(jù)庫系統(tǒng)的設(shè)計(jì)過程中,我們可先利用UML建立商業(yè)模型,然后將其映射成表。本文主要討論如何將UML類圖中的類映射成表的策略。關(guān)鍵詞:UML類表關(guān)系建模映射
概論在關(guān)系數(shù)據(jù)庫設(shè)計(jì)中,用來創(chuàng)建數(shù)據(jù)庫邏輯模型的標(biāo)準(zhǔn)方法是使用實(shí)體關(guān)系模型(ER模型)。ER模型的中心思想是:可以僅通過實(shí)體和它們之間的關(guān)系合理地體現(xiàn)一個(gè)組織的數(shù)據(jù)模型。但這樣做似乎對描述一個(gè)組織的信息過于簡單化,并且詞匯量也遠(yuǎn)遠(yuǎn)不足。所以,迫切需要使用更加靈活、健壯的模型來代替ER模型。標(biāo)準(zhǔn)建模語言UML是由世界著名的面向?qū)ο蠹夹g(shù)專家發(fā)起的,在綜合了著名的Booch方法、OMT方法和OOSE方法的基礎(chǔ)上而形成的一種建模技術(shù),它通過用例圖、類圖、交互圖、活動(dòng)圖等模型來描述復(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è)元素。則超類與子類之間構(gòu)成泛化關(guān)系。泛化通常可以用繼承或授權(quán)的方式實(shí)現(xiàn)。(2)關(guān)聯(lián):在UML類圖中,關(guān)聯(lián)表示類的實(shí)例之間存在的某種關(guān)系。它通??梢杂?對1、1對多和多對多等情形。(3)聚集:在UML類圖中,聚集描述了部分與整體之間的關(guān)系。(4)組成:在UML類圖中,組成由聚集演變而成,它表示一個(gè)部分對象僅屬于一個(gè)整體,并且部分對象通常與整體對象共存亡。下面結(jié)合例子,分別討論在將類映射成表的過程中這些關(guān)系的實(shí)現(xiàn)技術(shù)。假設(shè),有一個(gè)電腦公司專門從事軟件開發(fā),其項(xiàng)目主要由項(xiàng)目開發(fā)部門承擔(dān),它們之間構(gòu)成多對多的關(guān)聯(lián)(即一個(gè)項(xiàng)目可由多個(gè)部門承擔(dān),而一個(gè)部門又可以承擔(dān)多個(gè)項(xiàng)目的開發(fā)工作);項(xiàng)目開發(fā)部門由經(jīng)理及一般職員組成,項(xiàng)目開發(fā)部門和組成人員之間構(gòu)成聚集關(guān)系,而人(抽象類)又可以進(jìn)一步和一般職員及經(jīng)理兩個(gè)子類之間構(gòu)成繼承關(guān)系;每個(gè)項(xiàng)目具有一定的屬性,它們之間構(gòu)成組成關(guān)系。綜上所述,其主要關(guān)系的UML類圖如圖1所示。項(xiàng)目開發(fā)部門部門名稱項(xiàng)目開發(fā)部門部門名稱項(xiàng)目項(xiàng)目開始時(shí)間結(jié)束時(shí)間**經(jīng)理職位補(bǔ)貼
經(jīng)理職位補(bǔ)貼
人<Abstract>>姓名人<Abstract>>姓名
項(xiàng)目屬性規(guī)模屬性
職員工作類別職員工作類別
圖11.將類圖中的屬性類型映射成表的域域的使用提高了設(shè)計(jì)的一致性,且優(yōu)化了應(yīng)用的移植性。簡單的域是非常容易實(shí)現(xiàn)的,在映射時(shí)僅需替換相對應(yīng)的數(shù)據(jù)類型和數(shù)據(jù)尺寸。但要注意:有時(shí)可能要求在域的約束中加入SQL的Check串(如限定域的取值范圍等)。2.將類的屬性映射成表的字段一般地,可將類的屬性直接映射成表的一個(gè)字段,但要注意以下兩種特殊情況:(1)并不是類中的所有屬性均是永久的。例如,發(fā)票中的“合計(jì)”屬性可由計(jì)算所得而不需保存在數(shù)據(jù)庫中,此時(shí),該類屬性(稱為派生屬性)映射成個(gè)0個(gè)字段。(2)一般地,類中的屬性是單值的,但如果在類中存在多值屬性,則該屬性映射成多個(gè)字段。3.將類直接或間接地映射成表。將UML類圖中的類映射成表時(shí),可針對類間的不同關(guān)系,采用下面介紹的各種策略。首先,在關(guān)系數(shù)據(jù)庫中,一個(gè)關(guān)鍵問題是表主鍵的唯一性策略的選取。適當(dāng)?shù)姆桨改軆?yōu)化繼承、組成等類之間的關(guān)系的實(shí)現(xiàn)。為此,可以在處理數(shù)據(jù)庫關(guān)系時(shí)嵌入對象標(biāo)識符(OID)的概念,即采用對象標(biāo)識符OID(對象唯一的標(biāo)識符)作為相應(yīng)的數(shù)據(jù)庫中所有表的主鍵,從而簡化了關(guān)系數(shù)據(jù)庫的主鍵方案,使數(shù)據(jù)庫發(fā)生更新時(shí),不會(huì)出現(xiàn)完整性問題,并且還可以避免在數(shù)據(jù)庫操作時(shí)的諸多限制。但要注意的是,OID不應(yīng)包含有商業(yè)內(nèi)涵(這一點(diǎn)可能和傳統(tǒng)的關(guān)系理論相悖),因?yàn)槿魏尉哂猩虡I(yè)意義的字段不在控制范圍之內(nèi),從而設(shè)計(jì)者面臨值和規(guī)劃改變的危險(xiǎn)。(1)繼承的實(shí)現(xiàn)策略一:將整個(gè)類層次映射為單個(gè)數(shù)據(jù)庫表。類層次中的所有類映射為單個(gè)的數(shù)據(jù)庫表,表中保存所有類(基類、子類)的屬性。例如,圖1中人、職員及經(jīng)理之間的關(guān)系的實(shí)現(xiàn)如圖2所示。人(主鍵)人人(主鍵)人OID對象類型姓名工作類別職位補(bǔ)貼
圖2該策略實(shí)現(xiàn)簡單,支持多態(tài),報(bào)表操作實(shí)現(xiàn)簡單。但增加了類層次中的耦合,類層次中任何類的屬性的增加會(huì)導(dǎo)致表的變更;某個(gè)子類屬性的修改錯(cuò)誤會(huì)影響到整個(gè)層次結(jié)構(gòu),而不僅僅是該子類。并且該策略還浪費(fèi)了大量的數(shù)據(jù)庫空間。策略二:每個(gè)具體子類映射成單個(gè)數(shù)據(jù)庫表。數(shù)據(jù)庫表包括自身的屬性和繼承的屬性,每個(gè)具體的子類包含各自的OID。抽象基類不參與映射,它的所有屬性都復(fù)制到子類對應(yīng)的表中。例如,圖1中的人、職員及經(jīng)理之間的關(guān)系可映射成兩個(gè)表,其中“職員”表包含“職員OID”(主鍵)、“姓名”和“工作類別”字段;“經(jīng)理”表包含“經(jīng)理OID(主鍵)”、“姓名”和“職位補(bǔ)貼”字段。該策略由于在表中包含了具體子類的所有信息,所以報(bào)表操作實(shí)現(xiàn)簡單。但類的修改會(huì)導(dǎo)致相對應(yīng)的表及其子類所對應(yīng)表的更改;角色的更改會(huì)造成ID的重新賦值(因?yàn)椴煌宇惖腎D可能重復(fù))。并且該策略還難以在支持多重角色時(shí),保持?jǐn)?shù)據(jù)的完整性。策略三:每個(gè)類均映射為數(shù)據(jù)庫表。為每一個(gè)類創(chuàng)建數(shù)據(jù)庫表,表中包含特定于該類的屬性和OID。例如,圖1中的人、職員及經(jīng)理之間的關(guān)系可映射成三個(gè)表,其中“人”表包含“人OID”(主鍵)和“姓名”字段;“職員”表包含“人OID”(主鍵及外鍵)和“工作類別”字段;“經(jīng)理”表包含“人OID”(主鍵及外鍵)和“職位補(bǔ)貼”字段。值得注意的是:“人OID”作為所有表的主鍵。該策略與面向?qū)ο蟮母拍钕嘁恢?,對多態(tài)的支持最好,并且對于對象可能充當(dāng)?shù)慕巧珒H需要在相應(yīng)的表中保存記錄,易于修改基類和增加新的類。但由于數(shù)據(jù)庫中存在大量的表,所以訪問數(shù)據(jù)的時(shí)間較長,對報(bào)表的支持較差(除非定義視圖)。(2)關(guān)聯(lián)的實(shí)現(xiàn)在關(guān)系數(shù)據(jù)庫中,可通過外鍵實(shí)現(xiàn)類的關(guān)聯(lián)。外鍵允許表中的某一行與其它表中的行相關(guān)聯(lián)。為了下面論述方便,現(xiàn)假定M表示強(qiáng)制(Mandatory),O表示可選(Optional)。情況一:1對1的關(guān)聯(lián)如果關(guān)聯(lián)是O-M,則可將外鍵放置在可選的一端,該外鍵不能為空值;其它1對1的情況外鍵可放置在任意一邊,具體情況依賴于性能等因素。但要注意的是:對于1對1的情況,不要在兩個(gè)表中均放置對方的主鍵。這樣,增加了冗余,并且不會(huì)提高性能。對于關(guān)聯(lián)的強(qiáng)制性,一般在商業(yè)規(guī)則的對應(yīng)層實(shí)現(xiàn),而不在物理層中實(shí)現(xiàn)。情況二:1對多的關(guān)聯(lián)將外鍵放置在“多”的一方。如果“1”方是可選的,則外鍵可有空值,以表明“多”方的記錄可以獨(dú)立于“1”方存在;如果情況三:多對多的關(guān)聯(lián)實(shí)現(xiàn)多對多關(guān)系,通常需要建立一個(gè)關(guān)聯(lián)表,并把它與關(guān)系兩端的表建立聯(lián)系。在傳統(tǒng)實(shí)現(xiàn)中,關(guān)聯(lián)表的屬性包含關(guān)系中兩個(gè)表的主鍵,并且關(guān)聯(lián)表的主鍵往往是它們的組合。該實(shí)現(xiàn)方法意味兩個(gè)表的聯(lián)系是靜態(tài)的,不能跟蹤一方退出某個(gè)項(xiàng)目然后又在某個(gè)時(shí)候加入的情況。另一種實(shí)現(xiàn)方法是將關(guān)聯(lián)表視為普通表,使用自身的主鍵OID,然后加入實(shí)現(xiàn)關(guān)系所必需的外鍵。例如,“項(xiàng)目”與“項(xiàng)目開發(fā)部門”之間的多對多關(guān)聯(lián)可用圖3的方式實(shí)現(xiàn)。
項(xiàng)目開發(fā)部門(主鍵)部門OID部門名稱項(xiàng)目開發(fā)部門(主鍵)部門OID部門名稱關(guān)聯(lián)表(主鍵)OID(外鍵)項(xiàng)目OID(外鍵)部門OID項(xiàng)目(主鍵)項(xiàng)目OID開始時(shí)間結(jié)束時(shí)間
圖3
使用該方法,可保證在物理層中,所有的表具有相同的形式,從而簡化了實(shí)現(xiàn),提高了運(yùn)行時(shí)效率。但要注意的是:一些數(shù)據(jù)庫在連接具有復(fù)合外鍵的表時(shí),性能較差;并且,存在著向關(guān)聯(lián)表中增添字段的可能。(3)聚集的實(shí)現(xiàn)例如,在圖1中項(xiàng)目開發(fā)部門及人之間的聚集關(guān)系的實(shí)現(xiàn)如圖4所示:人(主鍵)人OIDnotnull人(主鍵)人OIDnotnull(外鍵)部門OIDnull項(xiàng)目開發(fā)部門(主鍵)部門OIDnotnull
圖4(4)組成的實(shí)現(xiàn)組成的映射和聚集類似,但要注意的是:子表中的外鍵必須是強(qiáng)制非空的。三.引用完整性及關(guān)系約束檢查的策略在UML中,類之間的關(guān)系反映了具體的商業(yè)規(guī)則,因此將類映射到關(guān)系數(shù)據(jù)庫時(shí),必須保證類之間關(guān)系的正確定義,并確保在數(shù)據(jù)庫中實(shí)施對數(shù)據(jù)的約束。以下就1對多的情形為例加以說明(1對1關(guān)系可以視為特殊的1對多關(guān)系;多對多關(guān)系則可以分解為兩個(gè)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插入新的子女或合適的子女已存在至少修改一個(gè)子女的鍵值或合適的子女已存在無限制,一般將子女的外鍵置空組合M-M對插入進(jìn)行封裝,插入父記錄的同時(shí)至少能生成一個(gè)子女修改所有子女相匹配的鍵值刪除所有子女或?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)建一個(gè)父親具有新值的父親存在或創(chuàng)建父親無限制聚集O-M無限制兄弟存在兄弟存在組合M-M父親存在或者創(chuàng)建一個(gè)父親具有新值的父親存在(或創(chuàng)建父親)并且兄弟存在兄弟存在表2施加子表的約束主要是為了防止碎片的產(chǎn)生。在一些情況下(如在O-M、M-M約束中),一個(gè)子女(子表中的記錄)只有在當(dāng)其兄弟存在時(shí)才能被刪除或修改。即最后一個(gè)存在的子女是不能被刪除或修改的。此時(shí),可以對父記錄進(jìn)行即時(shí)的更新?;蛘呓乖摬僮鳌6颖砑s束可以通過在數(shù)據(jù)庫中加入觸發(fā)器來實(shí)現(xiàn),一個(gè)更合理、可行的方法是將對子表方的限制放在業(yè)務(wù)層中實(shí)現(xiàn)。應(yīng)用程序執(zhí)行數(shù)據(jù)約束有很重要的作用。在四類約束M-M、M-O、O-M、O-O中,鍵值的修改可能會(huì)改變表之間的關(guān)系,而且可能違反一些約束。違反約束的操作是不允許的。而前面的規(guī)則僅為具體實(shí)現(xiàn)提供了可能性。具體的應(yīng)用必須根據(jù)實(shí)際的要求和商業(yè)規(guī)則進(jìn)行適當(dāng)?shù)倪x擇。但在設(shè)計(jì)和開發(fā)時(shí),必須考慮以上所分析的約束。目前,面向?qū)ο笠殉蔀檐浖_發(fā)的主流技
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年智能農(nóng)田水利工程承包合同
- 2024年度能源集團(tuán)員工聘用合同范本
- 校園信貸安全教育
- pe 投資 投資合同范例
- 香菇種植合作協(xié)議合同范例
- 關(guān)于股東出資合同范例
- 銷售廢紙合作合同范例
- 預(yù)訂養(yǎng)老服務(wù)合同范例
- 公司工人合同范例
- 物流承包區(qū)合同范例
- 【9物(人)期末】安慶市宿松縣2023-2024學(xué)年九年級上學(xué)期期末考試物理試題
- 2024年度上海船舶分包建造合同2篇
- 全媒體運(yùn)營師試題庫(含答案)
- 尊重學(xué)術(shù)道德遵守學(xué)術(shù)規(guī)范學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 五年級上冊奧數(shù)版教材(學(xué)生使用版)
- 媒介與性別文化傳播智慧樹知到期末考試答案章節(jié)答案2024年浙江工業(yè)大學(xué)
- 形勢與政策中國式現(xiàn)代化論文1500字
- 峨眉山月歌-李白
- 望廬山瀑布李白
- 開展靜脈輸液申報(bào)表【模板】
- 保加利亞自由加工區(qū)
評論
0/150
提交評論