|
一個(gè)好的數(shù)據(jù)庫產(chǎn)品不等于就有一個(gè)好的應(yīng)用系統(tǒng),如果不能設(shè)計(jì)一個(gè)合理的數(shù)據(jù)庫模型,不僅會(huì)增加客戶端和服務(wù)器段程序的編程和維護(hù)的難度,而且將會(huì)影響系統(tǒng)實(shí)際運(yùn)行的性能。一般來講,在一個(gè)MIS系統(tǒng)分析、設(shè)計(jì)、測(cè)試和試運(yùn)行階段,因?yàn)閿?shù)據(jù)量較小,設(shè)計(jì)人員和測(cè)試人員往往只注意到功能的實(shí)現(xiàn),而很難注意到性能的薄弱之處,等到系統(tǒng)投入實(shí)際運(yùn)行一段時(shí)間后,才發(fā)現(xiàn)系統(tǒng)的性能在降低,這時(shí)再來考慮提高系統(tǒng)性能則要花費(fèi)更多的人力物力,而整個(gè)系統(tǒng)也不可避免的形成了一個(gè)打補(bǔ)丁工程。筆者依據(jù)多年來設(shè)計(jì)和使用數(shù)據(jù)庫的經(jīng)驗(yàn),提出以下一些設(shè)計(jì)準(zhǔn)則,供同仁們參考。
命名的規(guī)范
不同的數(shù)據(jù)庫產(chǎn)品對(duì)對(duì)象的命名有不同的要求,因此,數(shù)據(jù)庫中的各種對(duì)象的命名、后臺(tái)程序的代碼編寫應(yīng)采用大小寫敏感的形式,各種對(duì)象命名長(zhǎng)度不要超過30個(gè)字符,這樣便于應(yīng)用系統(tǒng)適應(yīng)不同的數(shù)據(jù)庫。
游標(biāo)(Cursor)的慎用
游標(biāo)提供了對(duì)特定集合中逐行掃描的手段,一般使用游標(biāo)逐行遍歷數(shù)據(jù),根據(jù)取出的數(shù)據(jù)不同條件進(jìn)行不同的操作。尤其對(duì)多表和大表定義的游標(biāo)(大的數(shù)據(jù)集合)循環(huán)很容易使程序進(jìn)入一個(gè)漫長(zhǎng)的等特甚至死機(jī),筆者在某市《住房公積金管理系統(tǒng)》進(jìn)行日終帳戶滾積數(shù)計(jì)息處理時(shí),對(duì)一個(gè)10萬個(gè)帳戶的游標(biāo)處理導(dǎo)致程序進(jìn)入了一個(gè)無限期的等特(后經(jīng)測(cè)算需48個(gè)小時(shí)才能完成)(硬件環(huán)境:Alpha/4000 128Mram ,Sco Unix ,Sybase 11.0),后根據(jù)不同的條件改成用不同的UPDATE語句得以在二十分鐘之內(nèi)完成。示例如下:
Declare Mycursor cursor for select count_no from COUNT
Open Mycursor
Fetch Mycursor into @vcount_no
While (@@sqlstatus=0)
Begin
If @vcount_no=’’ 條件1
操作1
If @vcount_no=’’ 條件2
操作2
。。。
Fetch Mycursor into @vcount_no
End
。。。
。。。
改為
Update COUNT set 操作1 for 條件1
Update COUNT set 操作2 for 條件2
。。。
。。。
it知識(shí)庫:大型數(shù)據(jù)庫設(shè)計(jì)原則,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。