• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    使用UML設計數據庫應用(1)

    發布: 2007-6-11 17:19 | 作者: Michael Blana | 來源: | 查看: 29次 | 進入軟件測試論壇討論

    領測軟件測試網

    1. 介紹

    許多人認為面向對象概念和關系型數據庫相互不一致,并且不能結合。事實上完全相反!經過靈活的使用,一個關系型數據庫能夠為面向對象(OO)模型提供一套優秀的實現。同樣的模型能夠用來開發編程代碼和建立關系型數據庫結構。

    關系型數據庫技術是意義深遠的、強大的,但它比許多開發商使你相信的要難得多。單個表是簡單易懂的、直觀的,但是要徹底了解由數以百計的表組成(這是常見的)的應用是相當困難的。這正是OO模型有用之處。

    OO模型使你深入地、連貫地思考問題。OO模型提供一種問題的超結構(superstructure)的思考方式,然后該方式能夠用關系型數據庫的更低層的組成塊來實現。

    本文章綜合地討論了關系型數據庫技術,而不是集中于特定的產品上。我們將不討論物理設計細節(例如存儲分配和物理聚集),因為它們是依賴于產品的。

    用關系型數據庫實現UML模型有兩個方面:映射結構(第2節)和映射功能(第3節)。第4節注解了面向對象到關系型數據庫的擴展。第5節總結本文章。

    2. 結構映射到表

    UML對象模型在本質上只是一個擴展的實體-關系(ER)模型[ii]。用來設計數據庫的ER模型的方式受到普遍接受,而我們將講述一種近似的但更強大的方式-使用UML對象模型。OO模型的主要優勢在于編程和數據庫使用相同的模型工作。而且,作為考慮功能性的一種方式(第3節),我們強調OO模型的導航。這一節顯示如何實現UML對象模型的主要構造。

    2.1 標識(identity)

    實現對象模型的第一步是處理標識。我們從定義幾個術語開始。

    • 候選鍵(candidate key)是一個或多個屬性的組合,它唯一地確定某個表里的記錄。一個候選鍵里的屬性集必須是最小化的;除非破壞唯一性,否則屬性不能從候選鍵刪除。候選鍵里的屬性不能為空。
    • 主鍵(primary key)是一個特定選定的候選鍵,用來優先地參考記錄。
    • 外鍵(foreign key)是一個候選鍵的參考。外鍵必須包括每個要素屬性的一個值,或者它必須全部為空。外鍵用來實現關聯和泛化。
    正常地你應該為每個表定義一個主鍵,盡管偶爾有例外。我們強烈建議所有的外鍵都只指向主鍵而不是其它的候選鍵。

    定義主鍵有兩種基本的方法:

    • 基于存在的標識。你應該為每個類表加一個對象標識符屬性,并將它設為主鍵。每個關聯表的主鍵包括一個或更多的相關類的標識符;诖嬖诘臉俗R符有作為單獨屬性的優勢,占位小且大小相同。只要你的關系型數據庫管理系統(RDBMS)支持,基于存在的標識符就沒有性能的劣勢。(多數RDBMS提供有效的基于存在的標識符的分配順序號碼。)唯一的劣勢是基于存在的標識符在維護時內沒有固有的意義。
    • 基于值的標識。一些真實世界的屬性的組合確定了每個對象;谥档臉俗R有不同的優勢。主鍵對于用戶有固有的意義,容易進行調試和數據庫維護。在另一面,基于值的主鍵很難改變。一個主鍵的改變需要傳播到許多外鍵。而一些對象沒有自然的真實世界里的標識符。

    我們推薦你在超過30個類的RDBMS應用里使用基于存在的標識;诖嬖诤突谥档臉俗R都是所有RDBMS應用的可行選項。

    2.2 域(屬性類型)

    屬性類型是UML術語,對應于數據庫著作里的域的術語。比起直接用數據類型,域提升到更一致的設計,并便利了應用的定位。

    簡單域很容易實現。你僅僅要定義相應的數據類型和大小。并且每個用了域的屬性,你都必須為每個域約束加入一條SQL檢查子句。簡單域的一些例子是:名字(name),長字符(longString)和電話號碼(phone-Number)。

    一個枚舉域把一個屬性限制在一系列的值里。枚舉域比簡單域實現起來更復雜,圖1顯示了四個方法。

    圖1 枚舉的實現方法。

    實現方法 優勢 劣勢 建議
    枚舉字符。定義一條SQL檢查約束,把該枚舉限制在允許的值里。 簡單。受控的方便搜索的詞匯表。 大的枚舉難以使用檢查。約束難以編碼。 我們正常地選擇。
    每個枚舉值一個標記。為每個枚舉的值定義一個布爾型屬性。 回避命名的難處。 冗長 - 每個值一個屬性。 當枚舉值不是互相排斥的并且多個值可能同時地應用時使用。
    枚舉表。把枚舉定義存儲到一個表里。不是每個枚舉一個表,也不是所有的枚舉一個表。 高效地處理大的枚舉。不用改變應用的代碼就可以定義新的枚舉值 偶爾使用時很麻煩。必須編寫通用的軟件來閱讀枚舉表和加強值。 適合大的枚舉和沒有結尾(open-ended)的枚舉。
    枚舉編碼。把枚舉值編碼作為有序的數字。 節省磁盤空間。有助于用多種語言處理。 大大地復雜化了維護和調試。 避免使用,除非你要用多種語言處理。

    2.3 類

    正常情況下,我們把每個類映射為一個表,每個屬性映射為一個列。你可能因一個已產生的標識符(基于存在的標識符)、隱藏的關聯(第2.4節)和通用鑒別器(第2.5節)需要一些另外的列。

    2.4 關聯

    現在我們討論關聯的實現。我們已經把我們的陳述分為建議的映射(我們正常使用的映射),可選的映射(我們偶爾使用的映射)和不鼓勵的映射(我們遇到的應該避免的錯誤)。我們所有的例子都采用基于存在的標識。

    2.4.1 建議的映射

    • 多對多關聯。用一個單獨的表(圖2)來實現一個多對多關聯。關聯的主鍵是每個類的主鍵的合并。那些省略號(...)表示在模型里沒有顯示出來的屬性。主鍵用黑體字體顯示。
    • 一對多關聯。把一個外鍵隱藏在“多”表(圖3)。角色名字成為外鍵屬性名字的一部分。
    • 零或一對一關聯。把外鍵隱藏在“零或一”表(圖4)。
    • 其它一對一關聯。把外鍵隱藏在任一表里。
    圖2 建議的實現:單獨的多對多關聯表。




    共5頁: 1 [2] [3] [4] [5] 下一頁

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>