余肖生 汪宏舟
[摘要]電子報(bào)表在管理控制中發(fā)揮著越來(lái)越重要的作用。選擇一種最適合于信息系統(tǒng)功能需求的報(bào)表呈現(xiàn)方式,在一定程度上成了信息系統(tǒng)開(kāi)發(fā)的關(guān)鍵。本文中筆者比較了三種常用的報(bào)表存取模式,認(rèn)為表格類(lèi)報(bào)表是信息系統(tǒng)報(bào)表呈現(xiàn)的主要形式,并詳細(xì)分析了表格類(lèi)報(bào)表的設(shè)計(jì)方法、性能優(yōu)化等問(wèn)題。最后,以一個(gè)數(shù)據(jù)統(tǒng)計(jì)系統(tǒng)——五人制足球信息統(tǒng)計(jì)系統(tǒng)為例,討論了表格類(lèi)報(bào)表的應(yīng)用。
[關(guān)鍵詞]管理信息系統(tǒng);報(bào)表存取模式;報(bào)表呈現(xiàn)
[中圖分類(lèi)號(hào)]TP311
[文獻(xiàn)標(biāo)識(shí)碼]A
[文章編號(hào)]1008-0821(2015)02-0053-04
隨著信息爆炸時(shí)代的到來(lái),各行各業(yè)傳統(tǒng)的辦公模式面臨嚴(yán)峻的挑戰(zhàn),產(chǎn)生了“無(wú)紙化辦公”、“網(wǎng)絡(luò)查詢(xún)”的要求,而電子報(bào)表作為現(xiàn)代技術(shù)的出現(xiàn),在管理控制中發(fā)揮重要作用,尤其在財(cái)務(wù)報(bào)告及分析評(píng)價(jià)方面。因此在信息系統(tǒng)開(kāi)發(fā)的過(guò)程中,除了常規(guī)事務(wù),還更應(yīng)關(guān)注報(bào)表的設(shè)計(jì)。報(bào)表設(shè)計(jì)主要包括兩方面內(nèi)容:一方面是報(bào)表旱現(xiàn)形式。在信息系統(tǒng)中報(bào)表呈現(xiàn)形式主要有文字、圖形和表格等。文字類(lèi)報(bào)表作為總結(jié)性報(bào)表之一,易受主觀(guān)意識(shí)影響,有遺漏潛在信息的可能;圖形類(lèi)報(bào)表的報(bào)表內(nèi)容客觀(guān),但也易受到圖形的局限性而影響分析結(jié)果的評(píng)估;而表格類(lèi)報(bào)表作為報(bào)表呈現(xiàn)的基本形式,在關(guān)系數(shù)據(jù)庫(kù)數(shù)據(jù)呈現(xiàn)中發(fā)揮著越來(lái)越重要的作用。另一方面是報(bào)表數(shù)據(jù)存取方式的選擇,這涉及報(bào)表存取模式。本文認(rèn)為表格類(lèi)報(bào)表是信息系統(tǒng)報(bào)表呈現(xiàn)的主要形式,并著重比較了3種常用的報(bào)表存取模式,接著詳細(xì)分析了表格類(lèi)報(bào)表的設(shè)計(jì)方法、性能優(yōu)化等問(wèn)題,最后,以一個(gè)數(shù)據(jù)統(tǒng)計(jì)系統(tǒng)——五人制足球信息統(tǒng)計(jì)系統(tǒng)為例,討論了表格類(lèi)報(bào)表的應(yīng)用。
1 報(bào)表存取模式的比較
數(shù)據(jù)存取是指數(shù)據(jù)庫(kù)數(shù)據(jù)存儲(chǔ)組織和存貯路徑的實(shí)現(xiàn)和維護(hù),而所謂報(bào)表存取模式是指報(bào)表的數(shù)據(jù)來(lái)源及其數(shù)據(jù)存儲(chǔ)組織的方式。在報(bào)表開(kāi)發(fā)中,報(bào)表呈現(xiàn)的數(shù)據(jù)來(lái)源通常有三種,分別是視圖(View)、存儲(chǔ)表(Table)、數(shù)據(jù)倉(cāng)庫(kù)(Data warehouse)。第一種是在數(shù)據(jù)庫(kù)中通過(guò)創(chuàng)建視圖,基于視圖做過(guò)濾查詢(xún)后,為前端應(yīng)用程序提供數(shù)據(jù)源,輸出報(bào)表;第二種是在業(yè)務(wù)數(shù)據(jù)庫(kù)中創(chuàng)建存儲(chǔ)表,專(zhuān)門(mén)存儲(chǔ)報(bào)表數(shù)據(jù),并在前端應(yīng)用程序輸出報(bào)表;第三種是從數(shù)據(jù)源提取數(shù)據(jù),存儲(chǔ)在數(shù)據(jù)倉(cāng)庫(kù)中,利用即席查詢(xún)、OLAP分析、數(shù)據(jù)挖掘等訪(fǎng)問(wèn)工具輸出報(bào)表。
在進(jìn)一步討論報(bào)表存取模式之前,需要了解普通視圖和表的區(qū)別及執(zhí)行效率問(wèn)題。視圖是從一個(gè)或幾個(gè)基本表(或視圖)導(dǎo)出的表。它與基本表不同,是個(gè)虛表。數(shù)據(jù)庫(kù)中只存放視圖的定義,而不存放視圖對(duì)應(yīng)的數(shù)據(jù),這些數(shù)據(jù)仍存放在原來(lái)的基本表中。因此普通視圖實(shí)際就是多表查詢(xún),顯然比單表查詢(xún)的效率要低些,這是視圖和表的區(qū)別。
下面討論常見(jiàn)的三種報(bào)表存取模式以及它們的優(yōu)點(diǎn)與缺點(diǎn),如表1所示。
通過(guò)創(chuàng)建視圖(View)來(lái)呈現(xiàn)報(bào)表是一種最基本的開(kāi)發(fā)模式。通常,這一開(kāi)發(fā)模式僅適合于只有少數(shù)幾個(gè)表的連接查詢(xún)或簡(jiǎn)單計(jì)算的情形。Crystal Reports報(bào)表軟件是這種報(bào)表存取模式的典型代表。其主要特點(diǎn)是形式多樣的內(nèi)容創(chuàng)建、支持多數(shù)據(jù)源、提供分析工具以及支持Web應(yīng)用,可集成到開(kāi)發(fā)者的開(kāi)發(fā)環(huán)境中,如Visual Studio,.Net平臺(tái)等。這種報(bào)表開(kāi)發(fā)方法直觀(guān),數(shù)據(jù)基本不存在冗余,幫助開(kāi)發(fā)者做出了大量報(bào)表。如果報(bào)表數(shù)據(jù)很復(fù)雜時(shí),比如報(bào)表需要從復(fù)雜的數(shù)據(jù)源或者多個(gè)不同類(lèi)型的數(shù)據(jù)源中獲取數(shù)據(jù),獲取的數(shù)據(jù)可能還需要統(tǒng)計(jì)、格式轉(zhuǎn)換或其他處理。這樣的報(bào)表視圖查詢(xún)語(yǔ)句復(fù)雜,實(shí)現(xiàn)難度大。通過(guò)這類(lèi)報(bào)表軟件制作復(fù)雜報(bào)表時(shí),會(huì)因?yàn)樵谝晥D中進(jìn)行多次復(fù)雜的關(guān)系代數(shù)運(yùn)算使得運(yùn)行效率很低,無(wú)法高效地將數(shù)據(jù)庫(kù)中的數(shù)據(jù)加載到報(bào)表中。而用戶(hù)請(qǐng)求以最少的響應(yīng)時(shí)延傳送Web頁(yè)面被公認(rèn)為Web頁(yè)面最重要的設(shè)計(jì)準(zhǔn)則,因此這種方法僅適用于業(yè)務(wù)規(guī)則簡(jiǎn)單的報(bào)表。
物化視圖(Materialized View)是視圖的一種延伸。物化視圖把視圖結(jié)果存放在數(shù)據(jù)庫(kù)中,創(chuàng)建一個(gè)包含視圖數(shù)據(jù)的臨時(shí)表,基于這個(gè)臨時(shí)表再執(zhí)行查詢(xún)。這種處理能夠在一定程度上提高報(bào)表查詢(xún)的效率。但開(kāi)發(fā)者還是需要一口氣編寫(xiě)復(fù)雜的視圖,難度大,也不便于開(kāi)發(fā)者維護(hù)代碼。
相反若以存儲(chǔ)表(Table)的方式存取報(bào)表數(shù)據(jù)并輸出,其好處是報(bào)表查詢(xún)效率高。開(kāi)發(fā)者只需要在業(yè)務(wù)系統(tǒng)中編寫(xiě)少量程序,控制數(shù)據(jù)流的提取、轉(zhuǎn)換,保證數(shù)據(jù)的一致性,并將報(bào)表數(shù)據(jù)源存儲(chǔ)到存儲(chǔ)表中。這種方法在處理復(fù)雜數(shù)據(jù)源時(shí),實(shí)現(xiàn)難度比視圖小。當(dāng)然用存儲(chǔ)表的方式也會(huì)導(dǎo)致一些問(wèn)題:①因需要在業(yè)務(wù)系統(tǒng)中自動(dòng)提取轉(zhuǎn)換原始數(shù)據(jù),從而拖累業(yè)務(wù)系統(tǒng),導(dǎo)致業(yè)務(wù)系統(tǒng)運(yùn)行效率相對(duì)低一點(diǎn);②存在一定的數(shù)據(jù)冗余,這就需要開(kāi)發(fā)人員確保數(shù)據(jù)的高度一致性。這種方法適用于業(yè)務(wù)規(guī)則復(fù)雜的報(bào)表。
以數(shù)據(jù)倉(cāng)庫(kù)(Data warehouse)的方式開(kāi)發(fā)報(bào)表,除數(shù)據(jù)倉(cāng)庫(kù)數(shù)據(jù)庫(kù)服務(wù)器外,還需要?jiǎng)?chuàng)建分析服務(wù)器(Analysis Services),建立專(zhuān)門(mén)的多維數(shù)據(jù)庫(kù),不僅在服務(wù)器資源上增加了額外的開(kāi)銷(xiāo),而且開(kāi)發(fā)的成本要高很多,這種報(bào)表存取模式適用于企業(yè)級(jí)管理信息系統(tǒng)。
在實(shí)際開(kāi)發(fā)中,對(duì)于小型常規(guī)的業(yè)務(wù)系統(tǒng),多采用視圖或存儲(chǔ)表的設(shè)計(jì)方法;對(duì)于企業(yè)級(jí)管理信息系統(tǒng),則更多采用創(chuàng)建數(shù)據(jù)倉(cāng)庫(kù)的方式開(kāi)發(fā)報(bào)表。
2 報(bào)表呈現(xiàn)過(guò)程的分析與設(shè)計(jì)
2.1報(bào)表呈現(xiàn)過(guò)程的數(shù)據(jù)流分析
在傳統(tǒng)的報(bào)表軟件中,報(bào)表統(tǒng)計(jì)處理單元從數(shù)據(jù)源中提取、轉(zhuǎn)換、加載數(shù)據(jù),輸出報(bào)表呈現(xiàn)給用戶(hù)。如圖1所示,數(shù)據(jù)源直接把原始數(shù)據(jù)交給報(bào)表統(tǒng)計(jì)處理單元處理。當(dāng)原始數(shù)據(jù)復(fù)雜時(shí),一方面,實(shí)現(xiàn)難度增大;另一方面,增加了報(bào)表統(tǒng)計(jì)處理單元的負(fù)載,使查詢(xún)效率降低。
在這個(gè)過(guò)程中,如果能夠把數(shù)據(jù)的提取、轉(zhuǎn)換交給數(shù)據(jù)源來(lái)完成或者增加一個(gè)數(shù)據(jù)源加載處理單元來(lái)完成這部分的數(shù)據(jù)處理,會(huì)減輕報(bào)表統(tǒng)計(jì)處理單元的負(fù)載,如圖2所示。當(dāng)數(shù)據(jù)源加載處理單元能夠在業(yè)務(wù)系統(tǒng)中運(yùn)行,不在報(bào)表系統(tǒng)中運(yùn)行,雖然會(huì)影響業(yè)務(wù)系統(tǒng)的運(yùn)行效率,但有些情況下是值得的。endprint
三種報(bào)表存取模式中,存儲(chǔ)表和數(shù)據(jù)倉(cāng)庫(kù)結(jié)構(gòu)的報(bào)表存取模式,正是通過(guò)增加一個(gè)數(shù)據(jù)源加載處理單元來(lái)提取、轉(zhuǎn)換數(shù)據(jù),使得報(bào)表統(tǒng)計(jì)處理單元的實(shí)現(xiàn)難度降低、查詢(xún)效率提高。
2.2報(bào)表呈現(xiàn)過(guò)程的設(shè)計(jì)
在報(bào)表呈現(xiàn)過(guò)程的設(shè)計(jì)階段,需要進(jìn)行功能模塊設(shè)計(jì)和數(shù)據(jù)庫(kù)設(shè)計(jì)。本文以存儲(chǔ)表結(jié)構(gòu)的報(bào)表存取模式為例,討論其實(shí)施步驟。
2.2.1功能模塊設(shè)計(jì)
根據(jù)需求分析、數(shù)據(jù)流程以及模塊劃分標(biāo)準(zhǔn)設(shè)計(jì)模塊并給出具體功能。從模塊聚合性方面考慮,報(bào)表呈現(xiàn)過(guò)程的數(shù)據(jù)流是先提取、轉(zhuǎn)換業(yè)務(wù)系統(tǒng)中的原始數(shù)據(jù)并存儲(chǔ)在存儲(chǔ)表中,之后再加載存儲(chǔ)表數(shù)據(jù),生成報(bào)表。因此整個(gè)數(shù)據(jù)流可分為原始數(shù)據(jù)的提取、轉(zhuǎn)換和數(shù)據(jù)加載兩個(gè)不同時(shí)間段進(jìn)行。從模塊耦合性方面考慮,原始數(shù)據(jù)的提取、轉(zhuǎn)換和數(shù)據(jù)的加載只是通過(guò)數(shù)據(jù)交換實(shí)現(xiàn),并且控制信息的傳遞。
因此報(bào)表呈現(xiàn)過(guò)程中包括兩個(gè)功能模塊,分別是報(bào)表統(tǒng)計(jì)模塊和數(shù)據(jù)源加載模塊。報(bào)表統(tǒng)計(jì)模塊用于報(bào)表輸出和數(shù)據(jù)加載,即設(shè)計(jì)出符合客戶(hù)要求的報(bào)表樣式,并設(shè)計(jì)好數(shù)據(jù)加載接口。數(shù)據(jù)源加載模塊用于數(shù)據(jù)的提取、轉(zhuǎn)換及存儲(chǔ),即在業(yè)務(wù)系統(tǒng)的業(yè)務(wù)流中選擇適當(dāng)位置設(shè)計(jì)數(shù)據(jù)源加載模塊,獲取流經(jīng)該業(yè)務(wù)的原始數(shù)據(jù),轉(zhuǎn)換后存儲(chǔ)在存儲(chǔ)表中,并保持?jǐn)?shù)據(jù)的一致性。
2.2.2數(shù)據(jù)庫(kù)設(shè)計(jì)
報(bào)表呈現(xiàn)過(guò)程中,數(shù)據(jù)庫(kù)設(shè)計(jì)也尤為重要,這里的數(shù)據(jù)庫(kù)主要是指存儲(chǔ)表。存儲(chǔ)表可以違背完整性約束以及范式,比如不設(shè)置主鍵或者設(shè)置自增長(zhǎng)ID作為惟一標(biāo)識(shí);允許數(shù)據(jù)存在冗余,用業(yè)務(wù)表的有關(guān)非主屬性替代之間的關(guān)系或外鍵,其目的是達(dá)到所存儲(chǔ)的數(shù)據(jù)跟視圖基本一樣。對(duì)于需要復(fù)雜計(jì)算的派生列數(shù)據(jù)項(xiàng)要留有對(duì)應(yīng)的列接收數(shù)據(jù)。
3 實(shí)例研究
筆者以五人制足球信息統(tǒng)計(jì)系統(tǒng)中的報(bào)表設(shè)計(jì)為例,對(duì)視圖和存儲(chǔ)表兩種報(bào)表存取模式及報(bào)表呈現(xiàn)過(guò)程的分析設(shè)計(jì)思想進(jìn)一步分析與討論。本系統(tǒng)開(kāi)發(fā)平臺(tái)為ASP.NET和SQL Server,主要完成系統(tǒng)管理、賽前管理、賽后管理和比賽報(bào)告等四大功能模塊。系統(tǒng)業(yè)務(wù)中涉及的用戶(hù)主要有裁判員、比賽監(jiān)督員、賽區(qū)工作人員、體協(xié)管理員。主要業(yè)務(wù)描述如下:①裁判員在賽后登記裁判報(bào)告;②比賽監(jiān)督員在賽后登記比賽監(jiān)督報(bào)告;③賽區(qū)工作人員在賽后登記賽區(qū)工作報(bào)告;④體協(xié)管理員審核報(bào)告并做出停賽處理以及扣分罰款處理。
比賽報(bào)告模塊作為本系統(tǒng)的核心模塊,其包括裁判報(bào)告、比賽監(jiān)督報(bào)告、賽區(qū)工作報(bào)告、積分榜、射手榜、停賽公告、扣分罰款統(tǒng)計(jì)等7張報(bào)表。在分析每張報(bào)表的數(shù)據(jù)來(lái)源時(shí),發(fā)現(xiàn)裁判報(bào)告、比賽監(jiān)督報(bào)告、賽區(qū)工作報(bào)告以及射手榜、積分榜的業(yè)務(wù)規(guī)則較簡(jiǎn)單,其數(shù)據(jù)源大多來(lái)自一兩張表并且不需要對(duì)原始數(shù)據(jù)后續(xù)處理,容易創(chuàng)建視圖,得出符合要求的報(bào)表。射手榜報(bào)表數(shù)據(jù)源的創(chuàng)建視圖代碼如圖3所示。
從代碼量我們可看出代碼量極少,最終報(bào)表呈現(xiàn)的效果如圖4所示。這類(lèi)業(yè)務(wù)規(guī)則簡(jiǎn)單的報(bào)表,視圖方式顯然是更優(yōu)的選擇。
而停賽公告和扣分罰款統(tǒng)計(jì)的業(yè)務(wù)規(guī)則比較復(fù)雜。以停賽公告為例,其業(yè)務(wù)規(guī)則如下:當(dāng)1名隊(duì)員比賽時(shí)得到1張紅牌或者黃牌累計(jì)達(dá)到3張時(shí),要求停賽1次;停賽場(chǎng)序由體協(xié)管理員審核完賽事報(bào)告后,繼續(xù)處理;如需要額外停賽,由體系管理員后續(xù)處理。報(bào)表輸出還要求同一隊(duì)員累加停賽場(chǎng)數(shù),最終輸出1張信息自上而下累加的停賽公告報(bào)表。若以創(chuàng)建視圖的方式,查詢(xún)語(yǔ)句極其復(fù)雜,因此存儲(chǔ)表的存取模式是最佳的選擇。
在數(shù)據(jù)庫(kù)設(shè)計(jì)方面,停賽公告存儲(chǔ)表的關(guān)系模式是停賽公告表(編號(hào),賽事年度,賽事輪數(shù),賽事場(chǎng)序,球隊(duì)名稱(chēng),隊(duì)員名稱(chēng),隊(duì)員號(hào)碼,停賽場(chǎng)序,累積黃牌,累計(jì)紅牌,累計(jì)停賽,停賽原因,處理狀態(tài))。停賽公告存儲(chǔ)表的關(guān)系模式顯然不滿(mǎn)足完整性約束和范式,更接近報(bào)表的數(shù)據(jù)源。
在功能模塊設(shè)計(jì)方面,賽事審核時(shí),設(shè)計(jì)數(shù)據(jù)源加載模塊,獲取紅黃牌數(shù)據(jù),轉(zhuǎn)換為停賽數(shù)據(jù),控制信息的傳遞,保證數(shù)據(jù)一致性,并更新停賽存儲(chǔ)表,供用戶(hù)后續(xù)處理后輸出報(bào)表。處理代碼如圖5所示。
報(bào)表統(tǒng)計(jì)模塊的設(shè)計(jì)相對(duì)容易,從存儲(chǔ)表中加載數(shù)據(jù),綁定到報(bào)表中,并輸出報(bào)表。停賽公告報(bào)表呈現(xiàn)的效果如圖6所示。
4 結(jié)語(yǔ)
筆者通過(guò)比較三種報(bào)表存取模式的差別及分析表格類(lèi)報(bào)表的設(shè)計(jì)方法,就報(bào)表呈現(xiàn)過(guò)程中如何降低報(bào)表的實(shí)現(xiàn)難度和如何優(yōu)化報(bào)表的查詢(xún)性能等問(wèn)題,提出解決方案,并給出實(shí)例。在設(shè)計(jì)報(bào)表呈現(xiàn)過(guò)程時(shí),如果業(yè)務(wù)規(guī)則較簡(jiǎn)單,選擇視圖作為報(bào)表的數(shù)據(jù)來(lái)源比較合適;如果業(yè)務(wù)規(guī)則復(fù)雜且報(bào)表有特殊要求,選擇存儲(chǔ)表或數(shù)據(jù)倉(cāng)庫(kù)作為數(shù)據(jù)來(lái)源更合適。然而存儲(chǔ)表這種報(bào)表存取模式實(shí)際上可以理解為一種小型的數(shù)據(jù)倉(cāng)庫(kù)。筆者并沒(méi)有提出一種介于數(shù)據(jù)倉(cāng)庫(kù)和視圖之間的新模式替代存儲(chǔ)表。這是本文存在的不足,也有待進(jìn)一步研究探討。
(本文責(zé)任編輯:孫國(guó)雷)endprint