大型資料庫設計原則

2022-03-05 04:24:11 字數 4650 閱讀 3091

摘要:大型資料庫相比較於以前檔案型資料庫有著其眾多的優點,也是當今

mis系統開發的的首選產品。但是,資料庫模型的設計合理會極大地影響到

mis系統使用效能。本**根據作者多年從事資料庫設計的一些經驗,闡述了資料庫設計時的一些準則。

隨著市場競爭的加劇和資訊社會需求的發展,人們對資訊的處理、獲取、發布、儲存等提出了更高的效能要求。主要體現在以下幾個方面:一、資訊的儲存,如何面對各種形式的資訊(如字元、圖形、聲音等),以及日益膨脹的歷史資料。二、資訊的檢索,各種各樣的使用者如何從乙個資料庫中快速的查詢到所需的資訊。三、資料的完整性和一致性如何保證。顯然傳統的資料庫系統很難滿足這種需求。隨著客戶

/伺服器(

client/server

)技術的成熟和大型關係型資料庫(

ldbms

)技術的發展

,出現了

oracle

,sybase

,informix

,db2

,ms sqlserver

等一些著名的資料庫產品,使得這些問題得到完美的解決。但是,乙個好的資料庫產品不等於就有乙個好的應用系統,如果不能設計乙個合理的資料庫模型,不僅會增加客戶端和伺服器段程式的程式設計和維護的難度,而且將會影響系統實際執行的效能。一般來講,在乙個

mis系統分析、設計、測試和試執行階段,因為資料量較小,設計人員和測試人員往往只注意到功能的實現,而很難注意到效能的薄弱之處,等到系統投入實際執行一段時間後,隨著資料的日益膨脹,才發現系統的效能在降低,這時再來考慮提高系統效能則要花費更多的人力物力,而整個系統也不可避免的形成了乙個打補丁工程。筆者依據多年來設計和使用資料庫的經驗,提出以下一些設計準則,供同仁們參考。

*命名的規範。不同的資料庫產品對物件的命名有不同的要求,因此,資料庫中的各種物件的命名、後台程式的**編寫應採用大小寫敏感的形式,各種物件命名長度不要超過

30個字元,這樣便於應用系統適應不同的資料庫平台。

*

游標(cursor)的慎用。游標提供了對特定集合中逐行掃瞄的手段,一般使用游標逐行遍歷資料,根據取出的資料不同條件進行不同的操作。尤其對多表和大資料表定義的游標(大的資料集合)迴圈很容易使程式進入乙個漫長的等特甚至宕機,筆者在某市《住房公積金管理系統》進行日終帳戶滾積數計息處理時,對乙個

10萬個帳戶的游標處理導致程式進入了乙個無限期的等特(後經測算需

48個小時才能完成)

(硬體環境:

alpha/4000 128mram ,sco unix ,sybase 11.0)

,後根據不同的條件改成用不同的

update

語句得以在二十分鐘之內完成。示例如下:

declare mycursor cursor for select count_no from count 

open mycursor

fetch mycursor into @vcount_no

while (@@sqlstatus=0) begin

if @vcount_no='' 條件1

操作1if @vcount_no='' 條件2

操作2。。。fetch mycursor into @vcount_no

end。。。

。。。改為

update count set

操作1 for 條件1

update count set

操作2 for 條件2

。。。。。。

在有些場合,有時也非得使用游標,此時也可考慮將符合條件的資料行轉入臨時表中,再對臨時表定義游標進行操作,可使得效能得到明顯提高。筆者在某地市郵電局〈電信收費系統〉資料庫後台程式設計中,對乙個表(

3萬行中符合條件的

30多行資料)進行游標操作

(硬體環境:

pc伺服器,

pii266 64mram ,nt4.0 ms sqlserver 6.5)

。示例如下:

create #tmp /*

定義臨時表

*/( 欄位1

欄位2。。。)

insert into #tmp select * from total where

條件/* total中3

萬行符合條件只有幾十行

*/declare mycursor cursor for select * from #tmp /*

對臨時表定義游標

*/。。。

*

索引(index)的使用原則。建立索引一般有以下兩個目的:維護被索引列的唯一性和提供快速訪問表中資料的策略。大型資料庫有兩種索引即簇索引和非簇索引,乙個沒有簇索引的表是按堆結構儲存資料,所有的資料均新增在表的尾部,而建立了簇索引的表,其資料在物理上會按照簇索引鍵的順序儲存,乙個表只允許有乙個簇索引,因此,根據

b樹結構,可以理解新增任何一種索引均能提高按索引列查詢的速度,但會降低插入、更新、刪除操作的效能,尤其是當填充因子(

fill factor

)較大時。所以對索引較多的表進行頻繁的插入、更新、刪除操作,建表和索引時應設定較小的填充因子,以便在各資料頁中留下較多的自由空間,減少頁分割及重新組織工作的產生的概率。

*資料的一致性和完整性。為了保證資料庫的一致性和完整性,設計人員往往會設計過多的表間關聯(

relation

),盡可能的降低資料的冗餘。表間關聯是一種強制性措施,建立後,對父表(

parent table

)和子表

(child table)

的插入、更新、刪除操作均要占用系統的開銷,另外,最好不要用

identify

屬性字段作為主鍵與子表關聯。如果資料冗餘低,資料的完整性容易得到保證,但增加了表間連線查詢的操作,為了提高系統的響應時間,合理的資料冗餘也是必要的。使用規則(

rule

)和約束(

check

)來防止系統操作人員誤輸入造成資料的錯誤是設計人員的另一種常用手段,但是,不必要的規則和約束也會占用系統的不必要開銷,需要注意的是,約束對資料的有效性驗證要比規則快。所有這些,設計人員在設計階段應根據系統操作的型別、頻度加以均衡考慮。

* 事務的陷阱。事務是在一次性完成的一組操作。雖然這些操作是單個的操作,

sql server

能夠保證這組操作要麼全部都完成,要麼一點都不做。正是大型資料庫的這一特性,使得資料的完整性得到了極大的保證。

眾所周知,

sql server

為每個獨立的

sql語句都提供了隱含的事務控制,使得每個

dml的資料操作得以完整提交或回滾,但是

sql server

還提供了顯式事務控制語句

begin transaction

開始乙個事務

commit transaction

提交乙個事務

rollback transaction

回滾乙個事務

事務可以巢狀,可以通過全域性變數

@@trancount

檢索到連線的事務處理巢狀層次。需要加以特別注意並且極容易使程式設計人員犯錯誤的是,每個顯示或隱含的事物開始都使得該變數加

1,每個事務的提交使該變數減

1,每個事務的回滾都會使得該變數置

0,而只有當該變數為

0時的事務提交(最後乙個提交語句時),這時才把物理資料寫入磁碟。

* 資料庫效能調整。在計算機硬體配置和網路設計確定的情況下,影響到應用系統效能的因素不外乎為資料庫效能和客戶端程式設計。而大多數資料庫設計員採用兩步法進行資料庫設計:首先進行邏輯設計,而後進行物理設計。資料庫邏輯設計去除了所有冗餘資料,提高了資料吞吐速度,保證了資料的完整性,清楚地表達資料元素之間的關係。而對於多表之間的關聯查詢(尤其是大資料表)時,其效能將會降低,同時也提高了客戶端程式的程式設計難度,因此,物理設計需折衷考慮,根據業務規則,確定對關聯表的資料量大小、資料項的訪問頻度,對此類資料表頻繁的關聯查詢應適當提高資料冗餘設計。

資料庫模實體生成後,應根據應用系統的事物大小、伺服器的效能調整資料庫伺服器的系統引數,一般來講,有兩個系統引數鎖(

locks

)的數量、記憶體(

memory

)和過程快取記憶體(

procedure cache

)大小應加以提高,可以提高資料庫的操作效能。

*資料型別的選擇。資料型別的合理選擇對於資料庫的效能和操作具有很大的影響,有關這方面的書籍也有不少的闡述,這裡主要介紹幾點經驗。

1. identify

字段不要作為表的主鍵與其它表關聯,這將會影響到該錶的資料遷移。

2. text

和image

欄位屬指標型資料,主要用來存放二進位制大型物件(

blob

)。這類資料的操作相比其它資料型別較慢,因此要避開使用。

3. 各種型別欄位的均有眾多的相關函式支援,例如日期型函式,在日期的大小比較、加減操作上非常簡單。但是,在按照日期作為相等條件的查詢操作也要用函式,而使用函式作為查詢的條件時,伺服器無法用先進的效能策略來優化查詢而只能進行表掃瞄遍歷每行

,因此,在選擇大資料表的關鍵字段資料型別時應根據在選擇查詢策略盡可能避開使用函式的原則加以考慮。

大型資料庫設計原則

大型資料庫設計

隨著計算機技術越來越廣泛地應用於國民經濟的各個領域,在計算機硬體不斷微型化的同時,應用系統向著複雜化 大型化的方向發展。資料庫是整個系統的核心,它的設計直接關係系統執行的效率和系統的穩定性。因此在軟體系統開發中,資料庫設計應遵循必要的資料庫正規化理論,以減少冗餘 保證資料的完整性與正確性。只有在合適...

大型資料庫的設計原則與開發技巧

隨著計算機技術越來越廣泛地應用於國民經濟的各個領域,在計算機硬體不斷微型化的同時,應用系統向著複雜化 大型化的方向發展。資料庫是整個系統的 核心,它的設計直接關係系統執行的效率和系統的穩定性。因此在軟體系統開發中,資料庫設計應遵循必要的資料庫正規化理論,以減少冗餘 保證資料的完整性與正 確性。只有在...

大型資料庫的設計原則與開發技巧

著計算機技術越來越廣泛地應用於國民經濟的各個領域,在計算機硬體不斷微型化的同時,應用系統向著複雜化 大型化的方向發展。資料庫是整個系統的核心,它的設計直接關係系統執行的效率和系統的穩定性。因此在軟體系統開發中,資料庫設計應遵循必要的資料庫正規化理論,以減少冗餘 保證資料的完整性與正確性。只有在合適的...