[摘 要] 現(xiàn)在大型應(yīng)用系統(tǒng)越來(lái)越多,這不但體現(xiàn)在系統(tǒng)的功能數(shù)量上,還體現(xiàn)在系統(tǒng)底層的數(shù)據(jù)存儲(chǔ)數(shù)量上。本文基于作者在政府、企業(yè)項(xiàng)目的設(shè)計(jì)經(jīng)歷,提出了在大型系統(tǒng)中數(shù)據(jù)庫(kù)設(shè)計(jì)的一些設(shè)計(jì)經(jīng)驗(yàn),并從這些設(shè)計(jì)經(jīng)驗(yàn)中總結(jié)出兩種數(shù)據(jù)庫(kù)設(shè)計(jì)模式,從而解決了大型應(yīng)用系統(tǒng)中統(tǒng)計(jì)、查詢等應(yīng)用性能和應(yīng)用完整性的問(wèn)題。
[關(guān)鍵詞] 應(yīng)用系統(tǒng) 數(shù)據(jù)庫(kù) 數(shù)據(jù)庫(kù)設(shè)計(jì) 設(shè)計(jì)模式
一、引言
現(xiàn)如今絕大部分的應(yīng)用系統(tǒng)都是基于數(shù)據(jù)庫(kù)的,也就是說(shuō)沒(méi)有數(shù)據(jù)存儲(chǔ)的應(yīng)用系統(tǒng)是非常少的。那么在應(yīng)用系統(tǒng)的設(shè)計(jì)階段,必然會(huì)涉及數(shù)據(jù)模型的概要設(shè)計(jì)和物理設(shè)計(jì),良好的數(shù)據(jù)庫(kù)設(shè)計(jì)是關(guān)系到系統(tǒng)能否成功運(yùn)行、維護(hù)的關(guān)鍵之一。在當(dāng)今系統(tǒng)越來(lái)越龐大,應(yīng)用數(shù)據(jù)越來(lái)越多的今天,數(shù)據(jù)庫(kù)設(shè)計(jì)的合理性和靈活性顯得越來(lái)越重要,因?yàn)樵谌魏螒?yīng)用中,數(shù)據(jù)是最重要的、最核心的、最有價(jià)值的,技術(shù)上可以根據(jù)需要選擇不同的架構(gòu)和技術(shù),但數(shù)據(jù)不會(huì)因此改變而發(fā)生任何變化,甚至可以說(shuō)數(shù)據(jù)是企業(yè)在信息世界的靈魂,例如現(xiàn)在的電信、金融、公安、勞動(dòng)、民航等系統(tǒng)都是這種應(yīng)用的典型代表。
在各種大型應(yīng)用系統(tǒng)中,系統(tǒng)操作的信息主體無(wú)外乎單位和個(gè)人兩類(lèi),拿個(gè)人來(lái)說(shuō),個(gè)人基本信息按照信息生命周期的可變性分為不變屬性和可變屬性兩種,不變屬性包括:公民身份號(hào)碼(目前隨著二代身份證系統(tǒng)的實(shí)施,18位的公民身份號(hào)碼理論上可以保持惟一)、姓名、性別、出生日期、民族等,可變屬性包括:年齡、文化程度、政治面貌、戶籍所在地、居住所在地等,大部份的數(shù)據(jù)庫(kù)設(shè)計(jì)都會(huì)將個(gè)人不變屬性和可變屬性放在一個(gè)個(gè)人基本信息表中存儲(chǔ),在業(yè)務(wù)表中通過(guò)公民身份號(hào)碼做主外鍵關(guān)聯(lián)。
但是,這樣的設(shè)計(jì)在實(shí)際應(yīng)用系統(tǒng)中有時(shí)會(huì)存在非常大的問(wèn)題。例如有如下業(yè)務(wù)場(chǎng)景:某人在某個(gè)時(shí)間點(diǎn)上做過(guò)一次業(yè)務(wù),當(dāng)時(shí)他(她)的文化程度是“大?!?,在此之后又做過(guò)一次相同的業(yè)務(wù),此時(shí)他(她)的文化程度是“本科”,當(dāng)然這個(gè)業(yè)務(wù)場(chǎng)景存在的前提是業(yè)務(wù)邏輯是符合業(yè)務(wù)規(guī)則的。如果現(xiàn)在有一個(gè)按照時(shí)間范圍和文化程度的統(tǒng)計(jì),時(shí)間跨度覆蓋此人的上述兩次辦理業(yè)務(wù),那么,按照上面的描述應(yīng)該把此人分別統(tǒng)計(jì)為“大?!狈诸?lèi)1次/人,“本科”分類(lèi)1次/人的統(tǒng)計(jì)數(shù)據(jù),而不是2次/人的“本科”分類(lèi)統(tǒng)計(jì)數(shù)據(jù)。這種情況如何解決呢?
二、數(shù)據(jù)庫(kù)設(shè)計(jì)模式
1.規(guī)范模式設(shè)計(jì)。這種模式是在個(gè)人基本信息表的基礎(chǔ)上設(shè)計(jì)一個(gè)變更表(見(jiàn)圖1),記錄此人歷次基本信息項(xiàng)變更時(shí)的信息(通過(guò)“變更類(lèi)型”屬性區(qū)別本次變更的是個(gè)人基本信息表中的哪個(gè)屬性),在個(gè)人基本信息表中保存最新的個(gè)人基本信息,業(yè)務(wù)表記錄此人業(yè)務(wù)發(fā)生時(shí)的信息。這種設(shè)計(jì)完全符合數(shù)據(jù)庫(kù)關(guān)系模式的規(guī)范化要求,做到了最小的數(shù)據(jù)冗余(除主外鍵的關(guān)聯(lián)外),從而消除了數(shù)據(jù)的傳遞依賴,這是此模式的優(yōu)點(diǎn)。但如果當(dāng)需要針對(duì)業(yè)務(wù)表進(jìn)行統(tǒng)計(jì)、查詢時(shí),就需要關(guān)聯(lián)3個(gè)信息表,且當(dāng)3個(gè)表的數(shù)據(jù)量處在較高的數(shù)量級(jí)別時(shí)(例如分別在上百萬(wàn)數(shù)量級(jí)),那么關(guān)聯(lián)所占的臨時(shí)存儲(chǔ)空間和消耗的時(shí)間都是非常巨大的,甚至是不可忍受的。有些業(yè)務(wù)系統(tǒng)經(jīng)常出現(xiàn)部分統(tǒng)計(jì)、查詢需要幾十分鐘,甚至幾個(gè)小時(shí)才能出現(xiàn)結(jié)果的情況,一般都是因?yàn)檫@個(gè)原因,當(dāng)然部分情況可以通過(guò)建立索引或者優(yōu)化索引的方式解決,但不能從根本上解決性能下降的問(wèn)題。
2.冗余模式設(shè)計(jì)。這種模式是在業(yè)務(wù)表中增加必要的個(gè)人基本信息屬性的冗余,即冗余列反范式技術(shù)。這種方法的設(shè)計(jì)思想就是在當(dāng)業(yè)務(wù)發(fā)生時(shí),將當(dāng)時(shí)個(gè)人的業(yè)務(wù)信息和相關(guān)的個(gè)人基本信息中的狀態(tài)信息記錄到業(yè)務(wù)表中,形成當(dāng)時(shí)時(shí)間點(diǎn)上個(gè)人信息的一個(gè)“快照”。例如,如果業(yè)務(wù)需要對(duì)業(yè)務(wù)信息按文化程度屬性進(jìn)行統(tǒng)計(jì),那么就冗余文化程度屬性;如果需要按年齡段(20周歲至25周歲,25周歲至30周歲等)進(jìn)行統(tǒng)計(jì),那么就冗余年齡屬性,這樣在業(yè)務(wù)信息表中除了公民身份號(hào)碼作為外鍵關(guān)聯(lián)外,還將冗余文化程度和年齡屬性。而這些屬性實(shí)際在個(gè)人基本信息表中已經(jīng)存在,在業(yè)務(wù)表中又保留了它的一個(gè)“拷貝”。此模式也可以增加一個(gè)變更表記錄歷次變更的信息,但它的作用只限于變更情況的記錄,不參與系統(tǒng)的統(tǒng)計(jì)、查詢操作。
當(dāng)然冗余的設(shè)計(jì)需要在需求分析過(guò)程中,對(duì)業(yè)務(wù)需求進(jìn)行詳細(xì)、充分的需求調(diào)研,要從業(yè)務(wù)的角度尋求對(duì)冗余的設(shè)計(jì)的業(yè)務(wù)需求支持,這決定了到底要冗余那些信息項(xiàng);在系統(tǒng)設(shè)計(jì)過(guò)程中細(xì)致、縝密,并且具有豐富的業(yè)務(wù)和設(shè)計(jì)經(jīng)驗(yàn),也就是說(shuō)冗余要做到有效冗余,不能為了冗余而過(guò)度冗余那些沒(méi)有必要的屬性。這種方法的好處是減少了數(shù)據(jù)表之間的關(guān)聯(lián),增加了業(yè)務(wù)統(tǒng)計(jì)、查詢的效率,缺點(diǎn)是需要額外的冗余數(shù)據(jù)存儲(chǔ)空間。
三、結(jié)束語(yǔ)
系統(tǒng)的建設(shè)應(yīng)當(dāng)是綜合設(shè)計(jì)的結(jié)果,不但要考慮系統(tǒng)的功能要求和非功能要求,還要從統(tǒng)計(jì)、查詢的效率,統(tǒng)計(jì)、分析的完整性,數(shù)據(jù)量估算、數(shù)據(jù)量增長(zhǎng)等角度設(shè)計(jì)系統(tǒng),當(dāng)從這些維度考慮系統(tǒng)設(shè)計(jì)問(wèn)題時(shí),很多時(shí)候會(huì)對(duì)數(shù)據(jù)庫(kù)設(shè)計(jì)產(chǎn)生重大的影響。例如當(dāng)考慮:為了保證業(yè)務(wù)的完整性,需要增加變更表記錄歷史變更信息;為了系統(tǒng)統(tǒng)計(jì)、分析的正確性,需要在業(yè)務(wù)表中冗余必要的屬性:為了統(tǒng)計(jì)、查詢的效率,需要關(guān)聯(lián)正確的數(shù)據(jù)表或者在業(yè)務(wù)表中冗余必要的屬性;考慮較快的數(shù)據(jù)增長(zhǎng)速度,而又不能通過(guò)分區(qū)解決的,可以適當(dāng)考慮數(shù)據(jù)冗余。
這些因素時(shí),必須在數(shù)據(jù)庫(kù)規(guī)范化設(shè)計(jì)和數(shù)據(jù)冗余兩個(gè)方面做出綜合平衡,或者通過(guò)犧牲存儲(chǔ)空間獲得較高的系統(tǒng)性能,或者降低系統(tǒng)性能的要求而滿足數(shù)據(jù)存儲(chǔ)的要求。
參考文獻(xiàn):
薩師煊 王 珊:數(shù)據(jù)庫(kù)系統(tǒng)概論[M].北京:高等教育出版社,1991
“本文中所涉及到的圖表、注解、公式等內(nèi)容請(qǐng)以PDF格式閱讀原文”