這篇文章陳述如何用關系型數據庫實現UML模型。假設我們熟悉UML對象建模表示法和關系型數據庫。 許多人認為面向對象概念和關系型數據庫相互不一致,并且不能結合。事實上完全相反!經過靈活的使用,一個關系型數據庫能夠為面向對象(OO)模型提供一套優秀的實現。同樣的模型能夠用來開發編程代碼和建立關系型數據庫結構。 關系型數據庫技術是意義深遠的、強大的,但它比許多開發商使你相信的要難得多。單個表是簡單易懂的、直觀的,但是要徹底了解由數以百計的表組成(這是常見的)的應用是相當困難的。這正是OO模型有用之處。 OO模型使你深入地、連貫地思考問題。OO模型提供一種問題的超結構(superstructure)的思考方式,然后該方式能夠用關系型數據庫的更低層的組成塊來實現。 本文章綜合地討論了關系型數據庫技術,而不是集中于特定的產品上。我們將不討論物理設計細節(例如存儲分配和物理聚集),因為它們是依賴于產品的。 用關系型數據庫實現UML模型有兩個方面:映射結構(第2節)和映射功能(第3節)。第4節注解了面向對象到關系型數據庫的擴展。第5節總結本文章。 UML對象模型在本質上只是一個擴展的實體-關系(ER)模型[ii]。用來設計數據庫的ER模型的方式受到普遍接受,而我們將講述一種近似的但更強大的方式-使用UML對象模型。OO模型的主要優勢在于編程和數據庫使用相同的模型工作。而且,作為考慮功能性的一種方式(第3節),我們強調OO模型的導航。這一節顯示如何實現UML對象模型的主要構造。 實現對象模型的 步是處理標識。我們從定義幾個術語開始。
正常地你應該為每個表定義一個主鍵,盡管偶爾有例外。我們強烈建議所有的外鍵都只指向主鍵而不是其它的候選鍵。 定義主鍵有兩種基本的方法:
我們推薦你在超過30個類的RDBMS應用里使用基于存在的標識;诖嬖诤突谥档臉俗R都是所有RDBMS應用的可行選項。 屬性類型是UML術語,對應于數據庫著作里的域的術語。比起直接用數據類型,域提升到更一致的設計,并便利了應用的定位。 簡單域很容易實現。你僅僅要定義相應的數據類型和大小。并且每個用了域的屬性,你都必須為每個域約束加入一條SQL檢查子句。簡單域的一些例子是:名字(name),長字符(longString)和電話號碼(phone-Number)。 一個枚舉域把一個屬性限制在一系列的值里。枚舉域比簡單域實現起來更復雜,圖1顯示了四個方法。
正常情況下,我們把每個類映射為一個表,每個屬性映射為一個列。你可能因一個已產生的標識符(基于存在的標識符)、隱藏的關聯(第2.4節)和通用鑒別器(第2.5節)需要一些另外的列。 現在我們討論關聯的實現。我們已經把我們的陳述分為建議的映射(我們正常使用的映射),可選的映射(我們偶爾使用的映射)和不鼓勵的映射(我們遇到的應該避免的錯誤)。我們所有的例子都采用基于存在的標識。
![]() ![]() ![]() 正常情況下我們使用建議的映射。但有些偶爾的情況,可選的映射更合適。
我們已經注意到有些開發者選擇有缺陷的映射。我們要注意避免這些映射。
![]() ![]() ![]() ![]() 現在我們討論泛化。我們這里只論述單個繼承。 最簡單的方法是只映射超類和每個子類為一個表。所有的表共享一個共同的主鍵。應用必須執行子類的劃分,因為RDBMS并不能執行。(關于后者的詳盡的描述,請參閱第4節。)
![]() 泛化有幾個可選的映射。
![]() ![]() ![]() 一旦你已經建立了表,你就應該定義參考完整性動作來明確對象模型的意義。(不要使用SQL觸發器來實現參考完整性。┤绻闶褂没诖嬖诘臉俗R,你將不需要傳播更新的結果。我們建議以下對刪除的參考完整性方針:
我們已經簡要地論及參考完整性,因為它是個高級話題。參考文獻[iii]有更多的解釋和例子。 實現數據庫結構的最后的一步是加入索引來調整數據庫性能。正常地,你應該為每個主鍵和候選鍵定義一個唯一的索引。(多數RDBMS作為SQL主鍵和候選鍵約束的副作用來建立唯一的索引。)你也應該為每個被主鍵或候選鍵所約束的外鍵建立一個索引。 我們強調索引的重要性。外鍵和主鍵的索引使在對象模型里能快速地遍歷是不容懷疑的。你必須包括這些索引,否則你將使用戶感到灰心。你應該在你的數據庫開始設計階段里加入索引,因為它們很容易加入并且也沒有什么好理由推遲加入。 數據庫管理員(DBA)可能為經常請求的查詢定義了額外的索引。DBA也可能采用產品相關的調整性能的機制。 范式是關系型數據庫設計的提高數據一致性的有效方法。我們的書3討論了范式,但我們關于這個問題卻說錯了。我們將利用這篇文章的機會來澄清我們的觀點。如果你不熟悉范式你可以跳過這節。我們的說明是針對關系型設計人員,他們正在嘗試用面向對象適應他們原有的技能。 范式是正確設計關系型數據庫的精確的原則。同樣地,它們與使用了什么開發技術是無關的 - 基于屬性的設計、基于實體的設計、面向對象設計或其它什么。 過去使用基于屬性設計的方法,開發人員不得不非常注意范式;范式提供了分組數據的根據。相反地,范式對于基于面向對象(或基于實體)的開發不是很重要。如果你采用OO方法并且你的模型經過很好的構思,那你就正在把數據組織成為有意義的單位,也在本質上滿足了范式的規定。如果你愿意,你仍能夠檢查范式,但這樣的檢查是不必要的。 圖13總結了我們已經陳述的映射規則。這些映射規則的完整例子,包括一個UML對象模型,能夠在這篇完整的擴展版本里找到(Adobe Acrobat PDF文件)。
對象模型為數據庫應用提供三種主要的用途。
對象模型不僅僅是被動的數據結構,相反它們能夠幫助你思考一個應用的功能。你可以根據遍歷一個對象模型說出它的許多功能。例如,根據我們對一個模型檢查用例時的遍歷,我們進行思索。這強調對象模型的估算能力對于RDBMS應用是特別重要的,因為遍歷表達式可以直接映射到SQL代碼。 UML對象約束語言(Object Constraint Language,OCL)有助于表達遍歷。點符號導航從對象到對象和對象到屬性,方括號表示對象集合的過濾器。我們加入冒號(:)操作符來表示泛化的遍歷;因為我們正常地用多個表來實現一個泛化繼承,清楚的遍歷很有用。 圖14里的遍歷表達式例子是基于我們創建的UML對象模型上的(請參閱本文的擴展版本(Adobe Acrobat PDF文件)),我們把它們映射為SQL代碼。我們用冒號開始SQL編程變量。
數據庫團體對RDBMS的OO擴展有興趣。產品和SQL標準正嘗試加入到OO擴展里。我們將簡要地陳述一下這個技術的方向。
圖15摘錄于我們的在參考文獻3的財務案例學習。我們用資產超類來統一某些沒有顯示在摘錄里的通用的數據和功能。一項資產可以是一支股票或股票期權。一支股票可以有許多它的股票期權。例如,IBM股票可以有許多寫明達到價格和過期日期的期權。 ![]() 我們推薦的泛化實現是單獨的表 - 映射該超類和每個子類為一個表。然后,我們就可以使用參考完整性使股票期權和股票的記錄依賴于資產。一個資產記錄的刪除級聯到相應的子類記錄、股票期權或股票的刪除上。我們也能夠定義一個參考完整性動作,這樣一個股票的刪除就級聯到關聯的股票期權記錄的刪除。 現在問題如下:如果我們刪除的一項資產是一支股票,資產記錄的刪除級聯到引起股票記錄的刪除。隨后,股票記錄的刪除級聯引起所有股票期權記錄的刪除。但現在參考完整性使我們失敗了:一條股票期權記錄的刪除并不引起一項資產記錄的刪除。刪除級聯只能從超類走到子類。為了完全的行為,級聯應該雙向地走下去。 當前有用的參考完整性的工作是做更多的編程(也即做更多的工作和承擔更多的故障風險)。在我們的案例學習的實現里,用戶隨時要刪除一項是股票的資產,我們不得不書寫額外的代碼來首先檢查關聯股票期權的存在性,然后刪除它們。
本文陳述了用關系型數據庫實現UML模型的快速的概觀。我們希望本文向你演示的技術是十分適用的。一個訓練有素的開發人員能夠用關系型數據庫準備一套優秀的OO模型的實現。如果你要關于實現機制的更多的細節,參考3有另外的信息,并且也覆蓋了我們沒有在這里討論的一些高級模型建模結構。 Michael Blana是紐約Schenectady的通用電氣研發部的畢業生(譯者按:這是作者幽默的說法,意思是他已經跳槽了)。在過去的五年里,他已經成為面向對象技術、建模、數據庫設計和逆向工程領域的獨立的產業顧問。Blaha博士是多篇論文、五個專利和兩本書的作者?梢酝ㄟ^www.omtassociates.com或blaha@acm.org和他聯系。 William Premerlani從1975年開始就在通用電氣研發部供職。他的主要研究興趣在軟件工程、元建模(metamodeling)、數據庫技術和復雜工程應用等領域。Premerlani博士是許多論文、二十五個專利和兩本書的作者。通過premerlani@acm.org和他聯系。 [i]Michael Blaha and William Premerlani. Object-Oriented Design of Database Applications. Rose Architect 1,2 (Winter, 1999). [ii] PPS Chen. The Entity-Relationship model - toward a unified view of data. ACM Transactions on Database Systems1, 1 (March 1976). [iii] Michael Blaha and William Premerlani. Object-Oriented Modeling and Design for Database Applications, Prentice Hall, Englewood Cliffs, New Jersey, 1998. [iv] CJ Date. Don't mix pointers and relations! Presentation at Third Annual Object/Relational Summit sponsored by Miller Freeman, Washington D.C., September 16-19, 1998. |
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/
領測軟件測試網最新更新
關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
技術支持和業務聯系:info@testage.com.cn 電話:010-51297073
版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
技術支持和業務聯系:info@testage.com.cn 電話:010-51297073
老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月