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

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

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

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

    淺談軟件測試開發技術數據庫設計中的反規范

    發布: 2009-9-10 11:03 | 作者: 不詳 | 來源: 領測軟件測試網 | 查看: 115次 | 進入軟件測試論壇討論

    領測軟件測試網

    如果經常做這種查詢,則就有必要在B-TB01中加入列busi-balance,相應的代價則是必須在表B-TB06上創建增、刪、改的觸發器來維護B-TB01表上busi-balance列的值。類似的情況在決策支持系統中經常發生。

      反規范的好處是降低連接操作的需求、降低外碼和索引的數目,還可能減少表的數目,相應帶來的問題是可能出現數據的完整性問題。加快查詢速度,但會降低修改速度。因此決定做反規范時,一定要權衡利弊,仔細分析應用的數據存取需求和實際的性能特點,好的索引和其它方法經常能夠解決性能問題,而不必采用反規范這種方法。

      3.2. 常用的反規范技術

      在進行反規范操作之前,要充分考慮數據的存取需求、常用表的大小、一些特殊的計算(例如合計)、數據的物理存儲位置等。常用的反規范技術有增加冗余列、增加派生列、重新組表和分割表。

      3.2.1. 增加冗余列

      增加冗余列是指在多個表中具有相同的列,它常用來在查詢時避免連接操作。例如前面例子中,如果經常檢索一門課的任課教師姓名,則需要做class和teacher表的連接查詢:

      select class-name,teacher-name

      from class,teacher

      where class.teacher-no=teacher.teacher-no

      這樣的話就可以在class表中增加一列teacher-name就不需要連接操作了。

      增加冗余列可以在查詢時避免連接操作,但它需要更多的磁盤空間,同時增加表維護的工作量。

      3.2.2. 增加派生列

      增加派生列指增加的列來自其它表中的數據,由它們計算生成。它的作用是在查詢時減少連接操作,避免使用集函數。例如前面所講的賬戶系統中的表B-TB01的列busi-balance就是派生列。派生列也具有與冗余列同樣的缺點。

      3.2.3. 重新組表

      重新組表指如果許多用戶需要查看兩個表連接出來的結果數據,則把這兩個表重新組成一個表來減少連接而提高性能。例如,用戶經常需要同時查看課程號,課程名稱,任課教師號,任課教師姓名,則可把表class(class-no,class-name,teacher-no)和表teacher(teacher-no,teacher-name)合并成一個表class(class-no,class-name,teacher-no,teacher-name)。這樣可提高性能,但需要更多的磁盤空間,同時也損失了數據在概念上的獨立性。

      3.2.4. 分割表

      有時對表做分割可以提高性能。表分割有兩種方式:

      1水平分割:根據一列或多列數據的值把數據行放到兩個獨立的表中。

      水平分割通常在下面的情況下使用:A 表很大,分割后可以降低在查詢時需要讀的數據和索引的頁數,同時也降低了索引的層數,提高查詢速度。B 表中的數據本來就有獨立性,例如表中分別記錄各個地區的數據或不同時期的數據,特別是有些數據常用,而另外一些數據不常用。C 需要把數據存放到多個介質上。

      例如法規表law就可以分成兩個表active-law和inactive-law。activea-authors表中的內容是正生效的法規,是經常使用的,而inactive-law表則使已經作廢的法規,不常被查詢。水平分割會給應用增加復雜度,它通常在查詢時需要多個表名,查詢所有數據需要union操作。在許多數據庫應用中,這種復雜性會超過它帶來的優點,因為只要索引關鍵字不大,則在索引用于查詢時,表中增加兩到三倍數據量,查詢時也就增加讀一個索引層的磁盤次數。

      2垂直分割:把主碼和一些列放到一個表,然后把主碼和另外的列放到另一個表中。如果一個表中某些列常用,而另外一些列不常用,則可以采用垂直分割,另外垂直分割可以使得數據行變小,一個數據頁就能存放更多的數據,在查詢時就會減少I/O次數。其缺點是需要管理冗余列,查詢所有數據需要join操作。

      4. 反規范技術需要維護數據的完整性

      無論使用何種反規范技術,都需要一定的管理來維護數據的完整性,常用的方法是批處理維護、應用邏輯和觸發器。批處理維護是指對復制列或派生列的修改積累一定的時間后,運行一批處理作業或存儲過程對復制或派生列進行修改,這只能在對實時性要求不高的情況下使用。數據的完整性也可由應用邏輯來實現,這就要求必須在同一事務中對所有涉及的表進行增、刪、改操作。用應用邏輯來實現數據的完整性風險較大,因為同一邏輯必須在所有的應用中使用和維護,容易遺漏,特別是在需求變化時,不易于維護。另一種方式就是使用觸發器,對數據的任何修改立即觸發對復制列或派生列的相應修改。觸發器是實時的,而且相應的處理邏輯只在一個地方出現,易于維護。一般來說,是解決這類問題的最好的辦法。

      5. 結束語

      數據庫的反規范設計可以提高查詢性能。常用的反規范技術有增加冗余列、增加派生列、重新組表和分割表。但反規范技術需要維護數據的完整性。因此在做反規范時,一定要權衡利弊,仔細分析應用的數據存取需求和實際的性能特點。

     

    延伸閱讀

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

    44/4<1234

    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(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>