專利名稱::維護有關(guān)活動的多個實例的信息的方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及監(jiān)測企業(yè)或其他組織機構(gòu)工作流程的方法和計算機系統(tǒng)。更具體地,本發(fā)明涉及用于查看有關(guān)一個活動的多個實例的信息并用于維護該信息的方法。(2)
背景技術(shù):
計算機——尤其是計算機數(shù)據(jù)庫應(yīng)用程序——被企業(yè)和其他機構(gòu)用來監(jiān)測和記錄有關(guān)組織活動信息。通常,機構(gòu)會有各式各樣必須執(zhí)行的處理過程和活動,并且這些過程和活動會經(jīng)常性的重現(xiàn)。確實,對一個組織來說,在任何特定時間有眾多處于不同完成階段的活動的實例是很普遍的現(xiàn)象。例如,一個企業(yè)可能會根據(jù)從客戶處收到的訂單來出售貨物。一個所關(guān)心的活動可能是完成那些顧客訂貨單;每個訂貨單代表該活動的一個單獨的實例。在某個特定的時間,該企業(yè)也許有多個處于不同完成階段的活動的實例(即,來自多個客戶的多個訂單)。在另一個例子中,一個金融機構(gòu)可能根據(jù)顧客的申請來貸放資金。一個所關(guān)心的活動可能是要把貸款申請?zhí)幚硗瓿?即,批準(zhǔn)或拒絕),每一個申請表示這種活動的一個獨立的實例。在任何特定的時間,可能會有多個處于不同處理階段的貸款申請實例。再如另外一個例子,一個負(fù)責(zé)發(fā)行許可證的政府部門,可能有多個處于不同處理階段的許可申請。為了監(jiān)控一個活動的眾多實例,很多組織把關(guān)于那些活動實例的信息存儲在一個數(shù)據(jù)庫程序中。特別地,可以針對每個活動實例創(chuàng)建一條記錄或其它數(shù)據(jù)對象。然后,記錄的一個單獨字段或其它部分將被建立,以便保存對每個實例都通用的某種信息類型的值。用前面的一個例子進行說明,賣方企業(yè)可以為每個客戶訂單分別創(chuàng)建一條數(shù)據(jù)庫記錄。在每條記錄中,獨立的字段可包括收到訂單的時間、收到訂單的地點、訂購的貨物、發(fā)貨時間等等。數(shù)據(jù)庫程序的這種用法常常概念化為表?;顒拥拿總€實例占用表的一行(或元組)。多個實例公共的每一信息類型被單獨賦予表中一列。通過在數(shù)據(jù)庫表中為某個活動的每個實例放置相關(guān)數(shù)據(jù),使利用不同途徑來分析這些數(shù)據(jù)成為可能。然而,隨著越來越多記錄的積累,數(shù)據(jù)庫的有用性會降低。對于一個大型企業(yè),譬如每天會收到幾十萬甚至數(shù)百萬份訂單的銷售方,記錄的數(shù)目會達(dá)到數(shù)十萬,甚至數(shù)百萬條。每次檢索數(shù)據(jù)庫時,就需要一定的時間去搜索磁盤驅(qū)動器或其他存儲驅(qū)動器。同樣的,當(dāng)新建記錄和更新現(xiàn)有記錄時,每新建或更新一條記錄都需要一些時間。隨著記錄數(shù)目的增長,尋找一條特定記錄所需的時間越來越長。在一個擁有成百(或成千)用戶和數(shù)十萬(或數(shù)百萬)條數(shù)據(jù)庫記錄的企業(yè)或組織機構(gòu)中,訪問數(shù)據(jù)庫系統(tǒng)的等待時間將會很長,而且系統(tǒng)磁盤空間可能會用完。圖1-3提供了這個問題的更詳細(xì)的說明,并且在首選實施例的詳細(xì)描述中,提供了一個相關(guān)的例子。圖1是一個流程圖,假設(shè)了一個批發(fā)企業(yè)處理客戶訂貨單的過程,這是一家依據(jù)客戶訂單來銷售貨物的企業(yè)。為了方便起見,從現(xiàn)在開始我們稱之為“A企業(yè)”。在方框1中,A企業(yè)收到一個訂貨單,然后創(chuàng)建了相應(yīng)的數(shù)據(jù)庫記錄;同時輸入收到這個訂單的時間。在方框2和3中,在產(chǎn)品訂貨數(shù)量和訂貨人所在城市的記錄字段中輸入更多的數(shù)據(jù)。在方框4中,判斷是否接受此訂貨單。如果不接受,則在方框5中填寫相應(yīng)的記錄字段,并記錄拒絕時間。如果接受此訂貨單,則結(jié)果會被記錄下來。如果此訂貨單被批準(zhǔn),則在方框6和7中將輸入更多的信息。在方框8中裝箱,則在另一個字段中記入裝箱時間。在方框9和10中將輸入更多的數(shù)據(jù),例如,集裝箱類型和貨運方式。發(fā)貨后,在方框11中將輸入發(fā)貨時間。圖2是一張數(shù)據(jù)庫表,它描述A企業(yè)中訂貨單實例數(shù)據(jù)庫的一部分。每個訂單在一個獨立的行中,并且每個列對應(yīng)一個訂單的一種數(shù)據(jù)。為了簡單起見,圖2僅僅顯示了流程圖1中所搜集的一部分信息對應(yīng)的列。在這個例子中,某些字段包含NULL值,表示一個特定事件的值未知,因為在相關(guān)的訂貨單中,這個值是未公布。此數(shù)據(jù)庫中一個典型的查詢可能是“上周提交的訂單中,金額在1000美元以上的尚未接受或拒絕的有哪些?”這樣的查詢可以通過對這個表進行SQL(結(jié)構(gòu)化查詢語言)查詢來實現(xiàn)。附錄A顯示了一段代碼創(chuàng)建圖2中的表的SQL代碼的實現(xiàn)(“createtablePO_InstanceData”),以及用于更新圖2的表中各行的存儲過程(“createprocedurePO_PrimaryImport”)。此存儲過程接受一個唯一地確定了與一個活動實例的一條記錄的PONum變元(在這個例子中,就是一個特定的訂貨單)和用于表中每一列的參數(shù)。在開始更新或插入記錄之前,存儲過程的多個參數(shù)可以將調(diào)用所需的名稱-值對累積在存儲器中(基于應(yīng)用程序收集數(shù)據(jù)時使用的事務(wù)邏輯)。由于鎖定和操作數(shù)據(jù)庫記錄的處理過程所需要的額外系統(tǒng)開銷,所以在一個命令中對記錄進行越多的更新(或插入)操作,效率就越高。存儲過程首先發(fā)出一條“update”語句,替換一條記錄中值不是NULL的那些列。這時它假定表中存在一些關(guān)于訂貨單(PO)的數(shù)據(jù)。要調(diào)用函數(shù)“coalesce”,以返回第一個非空(Non-NULL)變元。如果沒有任何記錄被更新(@@rowcount=0),這就是第一條關(guān)于此訂貨單的信息,會插入一條帶所有變元參數(shù)的記錄(即使它們的值為空(NULL))。當(dāng)相對較少的用戶或程序線程試圖寫入一個表,并且記錄也比較少時,諸如附錄A所示的存儲過程是令人滿意的。不幸的是,正如圖3中所示,隨著表中的記錄越來越多,性能會隨著時間不斷降低。實線表示寫入性能,或者說每秒能寫入的記錄數(shù)目,它快速下降到很低的水平。相反的,平均磁盤I/O隊列長度(虛線)很快增長到超出可接受的限度。這種性能的下降,應(yīng)歸因于表大小的增長。當(dāng)記錄數(shù)目較小時,性能受數(shù)據(jù)庫服務(wù)器處理事務(wù)的速度的限制,而這個速度又取決于服務(wù)器的中央處理單元的能力。隨著時間的增加,記錄數(shù)目也在增長(例如,越來越多的接收和處理過的訂貨單),性能迅速下降。例如,附錄A中,存儲過程中更新語句的第一次執(zhí)行,會導(dǎo)致從磁盤中將表的一部分(圖2)讀入RAM(或者其他內(nèi)存系統(tǒng))。只要記錄總數(shù)較小,服務(wù)器能夠在系統(tǒng)內(nèi)存中緩存所需的大部分或者全部數(shù)據(jù)。如果隨后的更新需要操作早已緩存在系統(tǒng)內(nèi)存中的記錄,則服務(wù)器不需要再去讀磁盤。然而,當(dāng)記錄的數(shù)目超過了內(nèi)存的容量,每個操作都可能請求一個讀磁盤的物理操作。根據(jù)所用的硬件,在磁盤被讀取的時候,其它對于這張表的查詢(或者更新)可能會被阻止。最終,對所有用戶來說,反應(yīng)時間慢到了不可接受的地步。如果要在這個表上執(zhí)行更多復(fù)雜的數(shù)據(jù)操作,這個問題將更加嚴(yán)重。這些操作包括,在線分析處理(OLAP)和OLAP方塊的建立。(3)
發(fā)明內(nèi)容本發(fā)明針對與維護一個活動的多個實例的信息有關(guān)的上述及其它難題。在本發(fā)明的一個方面,為對應(yīng)于一個組織多個活動的多個活躍實例的數(shù)據(jù)和對應(yīng)于非活躍的實例的數(shù)據(jù)獨立維護數(shù)據(jù)庫表。在另一方面,可以為對應(yīng)于一個活動的非活躍實例的數(shù)據(jù)維護多個數(shù)據(jù)庫表。在再一方面,處理從活躍實例的表中得到的數(shù)據(jù)以及從一個或多個非活躍實例的表中得到的數(shù)據(jù),以產(chǎn)生組合分析數(shù)據(jù)。在一個實施例中,本發(fā)明包含一個用于維護關(guān)于一項活動的多個實例的信息的方法。該活動的每個實例有一個活躍的狀態(tài)或者非活躍的狀態(tài),在活躍的狀態(tài)中實例信息將被修改,在非活躍的狀態(tài)中,實例信息將不被修改。該方法包括為處于活躍狀態(tài)的多個實例中每一個,在第一數(shù)據(jù)庫表中建立一條記錄;每條記錄為多種數(shù)據(jù)類型中的每一種包含一個字段,每一個活躍實例的一個或多個字段擁有一個指示活躍狀態(tài)的值。該方法還包括,對于非活躍狀態(tài)的多個實例的每個記錄,給這一個或多個字段賦于指示非活躍狀態(tài)的值。該方法還包括從第一表中刪除多個實例的記錄,這些記錄的一個或多個字段指示其處于非活躍狀態(tài);以及為從第一表中刪除的每個記錄在第二數(shù)據(jù)庫表中建立相應(yīng)的記錄。在另一實施例中,本發(fā)明的方法包括建立第三和后續(xù)的數(shù)據(jù)庫表,以及在后繼表創(chuàng)建后,終止在先前建立表中創(chuàng)建記錄。對于在建立了最近的表之后但在建立另一后續(xù)的表之前從第一表中刪除的每個記錄,都在最近的建立的一個表中建立相應(yīng)的記錄。在另外一個實施例中,本發(fā)明的方法包括為第一表中的記錄產(chǎn)生第一在線分析處理(OLAP)方塊,為第二表中的數(shù)據(jù)生成第二OLAP,并且將第一第二方塊組合成一個虛擬OLAP方塊。結(jié)合附圖閱讀以下較佳實施例的詳細(xì)說明,本發(fā)明的以上及其他特性和優(yōu)點會更清楚并容易完全理解。(4)圖1是假想的企業(yè)處理客戶訂貨單的流程圖。圖2是表示假想企業(yè)的數(shù)據(jù)庫一部分的表。圖3是顯示數(shù)據(jù)庫系統(tǒng)性能隨著時間而下降的圖。圖4是顯示依照發(fā)明的至少一個實施例用于活躍和已完成實例數(shù)據(jù)獨立表的方框圖。圖5是依照發(fā)明的至少一個實施例包含依然在處理過程中的活動的部分?jǐn)?shù)據(jù)庫表的例子實施例。圖6是依照發(fā)明的至少一個實施例包含已完成活動的部分?jǐn)?shù)據(jù)庫表的例子圖7是依照發(fā)明的另一個實施例顯示活動和已完成實例數(shù)據(jù)的獨立表的方框圖實施例。圖8是依照發(fā)明的至少一個實施例對活躍的和已完成的實例數(shù)據(jù)進行組合OLAP分析的數(shù)據(jù)處理流程圖實施例。(5)具體實施方式本發(fā)明可以方便地與美國專利申請序列號。10/157,968中描述的方法、設(shè)備和系統(tǒng)結(jié)合使用。該專利申請的發(fā)明名稱是“SupportforReal-TimeQueriesConcerningCurrentState,DataandHistoryofaProcess”,于2002年5月31日提交,其內(nèi)容通過引用包括于此。本發(fā)明的說明中將會參考到結(jié)構(gòu)化查詢語言(SQL)指令和其它數(shù)據(jù)分析特性,包括由華盛頓州雷蒙德的微軟公司所提供的SQLSERVERTM2000關(guān)系數(shù)據(jù)庫管理系統(tǒng)(RDBMS)軟件和相關(guān)的在線分析處理(OLAP)服務(wù)軟件中的。盡管在此描述的是在實現(xiàn)本發(fā)明中實施例時可以使用的SQL指令的一些方面,但是對于本領(lǐng)域技術(shù)人員而言,一旦閱讀了本發(fā)明提供的描述,則可用其他的指令、編程算法和過程實現(xiàn)本發(fā)明是顯而易見的。對SQLSERVERTM2000RDBMS軟件和相關(guān)的OLAP服務(wù)軟件的簡單說明可以從多種途徑得到,包括KarenDelaney(2001微軟出版社)的《InsideMicrosoftRSQLSERVERTM2000》,以及可以從http://www.microsoft.com/sql/techinfo/productdoc/2000/處得到的MicrosoftRSQLSERVERTM2000BooksOnline。本發(fā)明并非只限于使用SQLSERVERTM2000RDBMS軟件及相關(guān)的OLAP服務(wù)軟件來實現(xiàn),它可以使用其它種類的RDBMS和OLAP軟件來實現(xiàn)。本發(fā)明說明中也將參考運行于服務(wù)器并且由一個或多個客戶端訪問的RDBMS軟件(例如前述的SQLSERVERTM2000軟件)。這種配置是人們熟知的,例如在先前引入的美國專利申請10/157,968中有描述。然而,客戶機/服務(wù)器配置只是實現(xiàn)本發(fā)明的方式中的一個例子。本發(fā)明也可以在其他物理系統(tǒng)配置中實現(xiàn)。通過維護不同的表對應(yīng)于組織活動中的活躍實例數(shù)據(jù)的表、以及有限數(shù)目的非活躍實例的表,本發(fā)明可以解決上文所討論的很多問題。例如,在很多組織機構(gòu)中,最重要的活動是那些當(dāng)前懸而未決的,或者最近剛剛完成的。據(jù)聯(lián)系圖1-3討論的假想的A企業(yè)的例子,A企業(yè)的經(jīng)理們最感興趣的是依然在處理中的訂貨單,也就是那些仍然沒有被送出去的貨物。那些經(jīng)理們同樣感興趣的是那些在相對較近時期里已完成的訂貨單(即,在最近幾個月中貨物已交貨的訂貨單)。雖然A企業(yè)是為了描述本發(fā)明而建立的一個假想例子,但是在真實的企業(yè)中,仍在處理的實例或最近已完成實例是很常見的。例如,在很多企業(yè)中,大部分的送貨投訴和大部分的費用收取問題都是在發(fā)貨之后短時期內(nèi)發(fā)生的。盡管出于某些目的也許需要更早些填具的訂單數(shù)據(jù),但是這些需要相對來說很少。類似地,很多其他類型的企業(yè)和組織最關(guān)心的是依然沒有完成的活動的實例,以及一定數(shù)量的最近完成的活動實例。因此,A企業(yè)在不同的數(shù)據(jù)庫表中維護活躍的和最近已完成的訂單數(shù)據(jù)。通過將表的內(nèi)容限制在活躍的訂單和最近才完成的訂單,能保持較小的數(shù)據(jù)量。這樣一來,當(dāng)更新或以其它方式存取活躍實例數(shù)據(jù)表時,系統(tǒng)性能不會像圖3中那樣下降,而且存取已完成實例表時性能也不會下降,因為在此表中只插入記錄,不會更新記錄。和圖3中的例子不同,整體性能隨著時間的流逝也保持穩(wěn)定。圖4的方框圖舉例說明了這個概念。表10保存了涉及活躍訂貨單的數(shù)據(jù)記錄。在這個例子中,如果訂貨單的貨物依然沒有送達(dá)客戶,則此訂貨單是活躍的。組織的活躍活動實例在其它上下文環(huán)境下會有不同的定義。一旦一個訂貨單完成,該訂貨單的數(shù)據(jù)將被移動到表12。在此例中,當(dāng)定購貨物被送達(dá)客戶時,該訂貨單被完成。如同活躍實例一樣,一個組織的已完成實例在其它上下文環(huán)境下可有不同的定義。每收到一個新訂單,就在表10中建立一條記錄。表10在圖4中用方框形式表示,圖5更詳細(xì)地顯示了表10中的一部分內(nèi)容。與圖2中的表類似,表10中一個記錄(例如,行)對應(yīng)一個訂貨單,每個字段(列)中的數(shù)據(jù)類型各不相同。在這個例子中,“PONum”是訂貨單編號,“City”是發(fā)出訂貨單的客戶所在城市,“Quantity”是定購的貨物數(shù)量。“ShipTime”是所定購的貨物裝運日期和時間?!癉eliveryTime”是交貨日期和時間。尚未裝運的訂單的ShipTime字段中是一個<NULL>條目。圖5中的一些記錄,顯示了還未裝箱的貨物的訂單(PONum8680和8685-87)。當(dāng)這些訂貨單的貨物裝運后,“ShipTime”字段將被更新。與圖2中的表不同,表10中僅限于記錄那些當(dāng)前活躍的訂貨單數(shù)據(jù),也就是那些貨物尚未發(fā)出的訂單。因此,每條記錄的“DeliveryTime”字段是一個NULL條目。表10還有個“IsCompleted”標(biāo)志的字段。IsCompleted的值為0時,表示對應(yīng)的訂貨單還沒有完成。在一些實施例中,IsCompleted是一個“system”標(biāo)志,不顯示給查詢此表的用戶。當(dāng)一個訂貨單完成后,該訂貨單記錄被從活躍實例數(shù)據(jù)表10中刪除,并且在已完成實例表12中為該訂貨單建立一條新的記錄(圖4)。這個新的記錄是表10中所刪除記錄的復(fù)本,但是會用新數(shù)據(jù)覆蓋DeliveryTime字段的NULL值,并且沒有IsCompleted字段。圖6詳細(xì)的顯示了表12的其中一部分。與圖2和圖5中的表類似,表12中一個記錄對應(yīng)一個已完成的訂貨單,不相同數(shù)據(jù)類型各有一個字段,包括前面提到的訂貨單號PONum、收到時間RecvTime、城市City、數(shù)量Quantity、發(fā)運時間ShipTime和交貨時間DeliveryTime。在這個例子中我們定義在定購的貨物發(fā)貨時訂貨單完成,所以表12中DeliveryTime字段在每一條記錄上都是非NULL的值。表12還有一個字段記錄號“RecordID”。如下面將詳細(xì)介紹的,表12中每增加一條已完成訂貨單的記錄,就動態(tài)遞增生成這個值。通過與圖6中的PONum和RecordID字段進行比較可以看出,訂貨單完成的順序,不一定會完全按照分配的訂貨單編號的順序。因此,RecordID字段提供了一種機制,可以按照創(chuàng)建表12中的記錄的次序生成索引。這確保了表的大小不會影響插入的性能,從而避免了隨時間推移性能下降的問題。因為表10中僅包括當(dāng)前活躍的訂貨單的數(shù)據(jù),所以表的大小始終比較小。盡管隨著業(yè)務(wù)量的波動表的大小可能會有所起伏,但是不會無限增大。隨著更多的訂貨單從活躍/未完成狀態(tài)成轉(zhuǎn)變成非活躍/已完成狀態(tài),已完成實例數(shù)據(jù)表12將會變大。但是,已完成實例數(shù)據(jù)表12的增長,比起包含了所有活躍和非活躍實例的單個數(shù)據(jù)表(如圖2中的表)的增長,簡直是不足掛懷。因為記錄只是被插入表12,之后并不更新。所以不需要在每次存取表12時,搜索某一條記錄。換言之,因為記錄不用被更新,所以,表12中插入一條記錄之前,不必尋找特定的記錄。附錄B和C包含了一段用于創(chuàng)建和更新圖4-6中的表的SQL代碼的示例。附錄B的第一條語句(“createtablePO_Active_InstanceData”)創(chuàng)建了用于活躍實例的表10,并且建立PONum、RecvTime、City、Quantity、ShipTime、DeliveryTime和IsCompleted列。將PONum指定為主鍵。換句話說,表10中的每行都是由訂貨單標(biāo)號即PONum來唯一地標(biāo)識。類似地,下一條語句(“createtablePO_Completed_InstanceData”)創(chuàng)建了用于已完成實例的表12,并且建立PONum、RecvTime、City、Quantity、ShipTime、DeliveryTime和RecordID列。不過在表12中,RecordID被作為主鍵,它的值通過SQL“identity”屬性自動遞增獲得。換句話說,隨著向名為PO_Completed_InstanceData的表12中每增加一條新的記錄,數(shù)據(jù)庫服務(wù)器自動將前一個RecordID的值加1,然后將得到的值插入新增記錄中。下一條語句(“createprocedurePO_PrimaryImport”)創(chuàng)建一個名為PO_PrimaryImport的存儲過程,它被用于在表10中創(chuàng)建新記錄或者更新現(xiàn)有的記錄。存儲過程PO_PrimaryImport有5個變元,對應(yīng)于表10中一行上的列。例如,如果收到圖5中的訂貨單8680,客戶機將向數(shù)據(jù)庫服務(wù)器發(fā)出下面的存儲過程調(diào)用PO_PrimaryImport(8680,08/25/2003,17:19,Redmond,270,,,)如果之前訂貨單8681的PONum、RecvTime、City和Qunantity的數(shù)據(jù)已經(jīng)輸入,下面的存儲過程調(diào)用將把裝運時間(ShipTime)更新成08/26/20030910PO_PrimaryImport(8681,,,,08/26/20030910,,)為了更新訂貨單8682的記錄以反映發(fā)貨時間(DeliveyTime)為08/26/2003晚上12點整,并將訂貨單標(biāo)記為已完成狀態(tài)(IsCompleted=1),可發(fā)出下面的調(diào)用PO_PrimaryImport(8682,,,,08/26/20031200,1)需要指出,操作人員將上述任何信息輸入客戶機時,不一定通過鍵入一個上述命令來完成。例如,用戶可以通過一個圖形用戶界面來輸入信息,在客戶機/服務(wù)器上運行的一層或多層中間軟件可以用正確的語法生成這個存儲過程調(diào)用。再如,訂單可能通過因特網(wǎng)自動接收,然后web服務(wù)器軟件能生成必要的SQL命令。存儲過程PO_PrimaryImport接收這個存儲過程調(diào)用中傳遞的值,然后把這些值分別賦給一個或多個本地變量@PONum、@RecvTime、@City、@Quantity、@ShipTime、@DeliveryTime和@IsCompleted。接著,存儲過程試圖通過“insert”語句將那些本地變量的值插入表PO_Active_InstanceData(表10)。然而,并不是將那些本地變量作為新記錄插入表10,而是觸發(fā)附錄C中的觸發(fā)器(“PO_CompletedTrigger”)。參考附錄C,在聲明了本地變量@PONum和@IsCompleted之后,觸發(fā)器把從“插入的”系統(tǒng)表中得到的值賦給這些變量。插入表是數(shù)據(jù)庫服務(wù)器自動生成,并在RAM或其它系統(tǒng)存儲器中臨時存儲那些在前面執(zhí)行存儲過程PO_PrimaryImport的“insert”語句時受到影響的行的副本。在這種情況下,插入表包含存儲過程PO_PrimaryImport傳遞的變元的副本。換句話說,其中包含了用戶當(dāng)前試圖插入或更新到表10中的值。觸發(fā)器首先查看被傳遞的IsCompleted位的值是否等于1,根據(jù)IsCompleted位可以判斷,所傳遞的PONum值所對應(yīng)的記錄是完成的。如果IsCompleted位等于1,觸發(fā)器就把已完成訂貨單記錄的所有值插入到表12PO_Completed_InstanceData的新記錄中。表12中新記錄的PONum值是從插入表(“selectinserted.PONum”)中得到的。函數(shù)“coalesce”用于獲取表12中新記錄的RecvTime、City、Quantity、ShipTime和DeliveryTime的值。特別地,(聚結(jié))coalesce函數(shù)將從它的變元中返回第一個非NULL表達(dá)式。例如,“coalesce(inserted.RecvTime,po.RecvTime)”提供了表12中新記錄的RecvTime字段的值。觸發(fā)器首先去驗查插入表中RecvTime值是否為非NULL。如果是,這個值就成為表12中新記錄的RecvTime值。如果插入表中RecvTime值是NULL,那么觸發(fā)器就從表10的某個記錄中獲取RecvTime的值,用戶試圖使用對存儲過程PO_PrimaryImport的調(diào)用來插入或更新這個記錄。代碼“frominsertedleftjoinPO_Active_InstanceDatapooninserted.PONum=po.PONum”可以保證coalesce函數(shù)有一個變元是Non-NULL(非空的)。準(zhǔn)確地說,觸發(fā)器的這部分代碼載明,每個coalesce函數(shù)調(diào)用的變元值將從下面的集合中得到這個集合包含(插入)“inserted”表中的所有行,外加O_Active_InstanceData表(表10)中的所有行,這兩個表中PONum值是相同的。例如,如果調(diào)用存儲過程PO_PrimaryImport來傳遞其所有變元的非NULL值(即,當(dāng)訂貨單被第一次輸入系統(tǒng)的時候,此訂貨單的貨物已經(jīng)發(fā)貨),則表12中新記錄的RecvTime值將從插入表中得到。但是,如果調(diào)用此存儲過程PO_PrimaryImport是為了更新表10中已經(jīng)存在的記錄,并且此記錄中已經(jīng)存在RecvTime值(即,在PO_PrimaryImport存儲過程調(diào)用中不傳遞RecvTime值),那么表12中新記錄的值將從表10的現(xiàn)存記錄中得到。在獲得RecvTime的值之后,觸發(fā)器用類似的方法獲得表12中新記錄的City、Quantity、ShipTime和DeliveryTime字段的值。正如前面所討論的,服務(wù)器自動生成RecordID字段的值。然后,觸發(fā)器刪除表10中已完成的訂貨單記錄(“deletefromPO_Active_InstanceDatawherePONum=@PONum”)。此時,該觸發(fā)器終止(“return”)。如果在對觸發(fā)了觸發(fā)器的PO_PrimaryImport存儲過程的調(diào)用中傳遞的IsCompleted值是0,那么觸發(fā)器不在表12中建立新記錄,而是設(shè)法更新由PO_PrimaryImport存儲過程調(diào)用中所指定的表10中的記錄(“updatePO_Active_InstanceData”)。正如在表12中新建記錄的觸發(fā)器一樣,coalesce函數(shù)被用來為表10中所更新的記錄提供一個值,這個值可從插入表,或者表10現(xiàn)存記錄中得到。但是,在這種情況下,coalesce函數(shù)的變元值由代碼“fromPO_Active_InstanceDatapojoininsertedonpo.PONum=inserted.PONum”提供。準(zhǔn)確地說,觸發(fā)器的這部分代碼指明,每個coalesce函數(shù)調(diào)用的變元值,將從下面的集合中得到這個集合包含PO_Active_InstanceData表(表10)和插入表中的所有行,這些行應(yīng)具有相同的PONum值。如果存儲過程PO_PrimaryImport(附錄B)被調(diào)用以在表10中增加一個未完成的新記錄(也就是,插入一條尚未發(fā)貨的訂貨單的新記錄),則觸發(fā)器中的“updatePO_Active_InstanceData”代碼,并沒有更新什么值。在此情況下,在表10中不存在PONum值和插入表的PONum值相等的記錄,從而在表10中沒有記錄需要更新。如果表10中沒有記錄要更新,或者沒有記錄要插入表12,那么觸發(fā)器將通過系統(tǒng)函數(shù)@@rowcount來檢測。準(zhǔn)確的說,如果前面的update語句沒有影響到任何行,那么函數(shù)@@rowcount返回0值。如果函數(shù)@@rowcount返回0,那么觸發(fā)器的一部分代碼“insertPO_Active_InstanceDataselect*frominserted”將用根據(jù)(插入)“inserted”表中得到的值在表10中插入一條新記錄。在本發(fā)明的另一個實施例中,已完成實例數(shù)據(jù)表的數(shù)據(jù)量是有限的。如上所示,該表(圖4中的表12)的增長不及表2這樣的表那么在意。然而表4也會隨著時間不斷增長。即使表中沒有記錄被更新(也就是,記錄只是被插入),該表也會最終變得太大,以至于超過系統(tǒng)磁盤容量,或者對于此表中數(shù)據(jù)的查詢,所需要的時間長到無法接受。如前所示,A企業(yè)的經(jīng)理已經(jīng)確定,只有對近期內(nèi)完成的訂貨單才需要已完成訂貨數(shù)據(jù)。但是,刪除表12中的記錄可能很耗時。在很多軟件環(huán)境中,必須逐行刪除;在每個記錄上必須獲得行鎖,然后行被標(biāo)識成已刪除。實際上,刪除一行和插入或更新一行所需的時間完全一樣。因此,如圖7所示,為已完成實例數(shù)據(jù)建立了多個表。在此實施例中,附錄B和附錄C中的代碼像前述那樣操作,它從表10中刪除已完成訂貨單記錄,并在表12中建立相應(yīng)的新記錄。然而,不允許表12無限制的增長。在一定時間后(例如,一個月),表12將被重命名為唯一的分區(qū)名,且不會再有更多的記錄被添加到這個已改名的表中。此后,會新建一個空的表12,它使用已改名的表從前的名稱,即PO_Complete_InstanceData。從這時起,觸發(fā)器在該新表中插入記錄。又過了一個月(或者其它預(yù)先指定的時間間隔)之后,這個表也被重命名,然后再創(chuàng)建一個表12。當(dāng)一個已改名的表被保留了指定的時間段之后(例如,六個月),整個表被刪除。與刪除單個記錄不同,刪除整個表非???。在一個實施例中,使用SQL命令“droptable”去刪除表。當(dāng)刪除一個已完成的實例數(shù)據(jù)表時,該表中的數(shù)據(jù)不一定會丟失。例如,在調(diào)用刪除表“droptable”的函數(shù)之前,將表中數(shù)據(jù)傳輸?shù)酱艓Щ蚱渌愋偷拇鎯γ襟w中存檔。在其它的實施例中,不是在固定的間隔后建立新的表12,而是在表12達(dá)到一定的大小時,建立新的表12。因此,活躍實例和已完成實例表中的所有數(shù)據(jù),都可以方便的查看和查詢(也就是,單次查詢不一定會涉及到每個獨立的表)?;钴S和已完成實例表(或者所需要的部分表的小組)能被組合成一個分區(qū)視圖。在至少一個實施例中,可以使用SQL語句“unionallselect*...”將多個表組合起來。每次在刪除一個已完成實例數(shù)據(jù)表(或者,每創(chuàng)建一個新的已完成實例數(shù)據(jù)表時)時,都可以重新創(chuàng)建這個由表組合而成的視圖。在本發(fā)明的另一方面,活躍的和已完成的實例的表中的數(shù)據(jù)被進一步處理,以便提供更多的分析數(shù)據(jù)。舉例來說,A企業(yè)可能希望對當(dāng)前活躍的訂貨單數(shù)據(jù)以及當(dāng)前已完成訂貨單數(shù)據(jù)作聯(lián)合分析。例如,A企業(yè)希望為這些組合的數(shù)據(jù)生成一個或多個OLAP方塊。此外,盡管A企業(yè)是為了說明本發(fā)明而假想的企業(yè),但是真實的組織也需要生成反映該組織活動中活躍的和已完成的實例的OLAP方塊。從圖8可以看出,在至少一個實施例中的一個數(shù)據(jù)處理流程。它是對活躍和已完成實例數(shù)據(jù)的組合OLAP分析的處理。定期地執(zhí)行存儲過程(“BeginDataProcessing”)(例如,每天晚上)。該過程首先建立活躍實例數(shù)據(jù)表(表10)的一個副本。因為此表比較小,所以該副本能很快建立。然后該副本中的數(shù)據(jù)被傳送到數(shù)據(jù)轉(zhuǎn)化服務(wù)器(DTS)(未示出),以便被放置到一個星型模式中,然后把這些活躍實例數(shù)據(jù)完全處理成OLAP方塊30。存儲過程BeginDataProcessing也從一個遞增窗口中獲取一部分已完成實例數(shù)據(jù)。特別的,存儲過程BeginDataProcessing每次獲取已完成實例數(shù)據(jù)時,數(shù)據(jù)庫服務(wù)器將保存最后獲取的記錄的RecordID值。如前所述,這個值是在創(chuàng)建記錄時,由服務(wù)器以遞增的方式賦值的。通過參照以前運行過程BeginDataProcessing的時候存儲的最后獲取的活躍實例數(shù)據(jù)記錄的RecordID值,此次運行存儲過程時,僅獲取上次運行之后建立的記錄。這個遞增的窗口作為一個特殊視圖來實現(xiàn),該視圖建立在分區(qū)視圖之上,這個分區(qū)視圖包含多個用于活躍和已完成實例數(shù)據(jù)的表/分區(qū)塊。這樣一來,該遞增窗口能包含多個分區(qū)的數(shù)據(jù)。例如,如果過程BeginDataProcessing每周執(zhí)行一次,那么在上次執(zhí)行存儲過程BeginDataProcessing后可能有新的已完成實例數(shù)據(jù)表建立,而且可能需要處理多個已完成實例數(shù)據(jù)表的數(shù)據(jù)。在至少一個實施例中,存儲過程BeginDataProcessing同時獲得活躍實例數(shù)據(jù)表的副本和已完成實例數(shù)據(jù)表的記錄的副本。否則,在過程BeginDataProcessing復(fù)制之后,但在獲取已完成實例數(shù)據(jù)表記錄之前,訂貨單可能被從活躍實例數(shù)據(jù)表中移除。如果發(fā)生這種情況,那么相同的的訂貨單將會被處理兩次,從而破壞了數(shù)據(jù)分析的準(zhǔn)確性。存儲過程BeginDataProcessing把自前次BeginDataProcessing執(zhí)行之后建立的增量已完成實例數(shù)據(jù)記錄傳送給DTS。然后DTS將該遞增數(shù)據(jù)放入一個已包含了從上一次已完成實例數(shù)據(jù)處理來的數(shù)據(jù)的星型模式。然后,已完成實例數(shù)據(jù)的星型模式(它現(xiàn)在包含最近的已完成實例數(shù)據(jù)記錄的遞增數(shù)據(jù))被用于更新已完成實例OLAP方塊32。類似于已完成實例星型模式,OLAP方塊32包含了前面幾次會話中處理過的記錄的信息。然后OLAP方塊30和OLAP方塊32被組合成一個虛擬OLAP方塊34。隨著時間的推移,與OLAP方塊32中包含其信息的已完成記錄數(shù)會變得越來越大。然而,通過遞增地處理已完成實例數(shù)據(jù),并且將處理結(jié)果與之前處理過的已完成實例數(shù)據(jù)進行組合,能在相當(dāng)短的時間內(nèi)生成OLAP方塊32(以及虛擬OLAP方塊34)。換言之,可以避免重復(fù)處理已完成實例數(shù)據(jù)。虛擬OLAP方塊34向用戶提供了一個業(yè)務(wù)的“快照”,它包含了歷史的和進行中的(即,活躍的)的訂貨單的信息??梢园才旁谕砩匣蚱渌^閑的時間內(nèi)運行處理方塊30-34的數(shù)據(jù)轉(zhuǎn)換服務(wù)(DTS)軟件包。盡管本發(fā)明的說明使用的是一個假想的企業(yè),但是應(yīng)注意,該發(fā)明并不局限于某一特定類型的企業(yè)、組織或活動。事實上,本發(fā)明并不限于以已完成實例數(shù)據(jù)的使用時間為依據(jù)來保留已完成實例數(shù)據(jù)的實現(xiàn),別的組織為了能快速存取非活躍實例數(shù)據(jù),可能使用一些其它標(biāo)準(zhǔn),而不是維護最近月份所完成的訂貨單的數(shù)據(jù)。僅僅作為一個例子,一個調(diào)查公司可能希望快速地操作若干批次數(shù)據(jù),但是可能很少操作其它批次的數(shù)據(jù)。因此,雖然介紹了運用該發(fā)明的具體例子,但是本領(lǐng)域技術(shù)人員將明白,上述系統(tǒng)和技術(shù)的很多變化形式、排列將落入所附權(quán)利要求書中闡明的本發(fā)明的精神和范圍。這些和其它改變屬于所附屬權(quán)利要求所定義的本發(fā)明的范圍。附錄A<prelisting-type="program-listing">createtablePO_InstanceData(PONumintprimarykey,RecvTimedatetimenull,Citynvarchar(50)null,Quantityintnull,ShipTimedatetimenull,DeliveryTimedatetimenull)gocreateprocedurePO_PrimaryImport(@PONumint,@RecvTimedatetime=null,@Citynvarchar(50)=null,@Quantityint=null,@ShipTimedatetime=null,@DeliveryTimedatetime=null)asbeginupdatePO_InstanceDatasetRecvTime=coalesce(@RecvTime,RecvTime),City=coalesce(@City,City),Quantity=coalesce(@Quantity,Quantity),ShipTime=coalesce(@ShipTime,ShipTime),DeliveryTime=coalesce(@DeliveryTime,DeliveryTime)wherePONum=@PONumif@@rowcount=0insertPO_InstanceDatavalues(@PONum,@RecvTime,@City,@Quantity,@ShipTime,@DeliveryTime)end</pre>附錄B<prelisting-type="program-listing">createtablePO_Active_InstanceData(PONumintprimarykey,RecvTimedatetimenull,Citynvarchar(50)null,Quantityintnull,ShipTimedatetimenull,DeliveryTimedatetimenull,IsCompletedbit)createtablePO_Completed_InstanceData(RecordIDintprimarykeyidentity,PONumint,RecvTimedatetimenull,Citynvarchar(50)null,Quantityintnull,ShipTimedatetimenull,DeliveryTimedatetimenull)gocreateprocedurePO_PrimaryImport(@PONumint,@RecvTimedatetime=null,@Citynvarchar(50)=null,@Quantityint=null,@ShipTimedatetime=null,@DeliveryTimedatetime=null,@IsCompletedbit=0)asinsertPO_Active_InstanceDatavalues(@PONum,@RecvTime,@City,@Quantity,@ShipTime,@DeliveryTime,@IsCompleted)go</pre>附錄C<prelisting-type="program-listing">createtriggerPO_CompletedTriggeronPO_Active_InstanceDatainsteadofinsertasbegindeclare@PONumintdeclare@IsCompletedbitselect@PONum=PONum,@IsCompleted=IsCompletedfrominsertedif(@IsCompleted=1)begininsertPO_Completed_InstanceData(PONum,RecvTime,City,Quantity,ShipTime,DeliveryTime)selectinserted.PONum,coalesce(inserted.RecvTime,po.RecvTime),coalesce(inserted.City,po.City),coalesce(inserted.Quantity,po.Quantity),coalesce(inserted.ShipTime,po.ShipTime),coalesce(inserted.DeliveryTime,po.DeliveryTime)frominsertedleftjoinPO_Active_InstanceDatapooninserted.PONum=po.PONumdeletefromPO_Active_InstanceDatawherePONum=@PONumreturnendupdatePO_Active_InstanceDatasetRecvTime=coalesce(inserted.RecvTime,po.RecvTime),City=coalesce(inserted.City,po.City),Quantity=coalesce(inserted.Quantity,po.Quantity),ShipTime=coalesce(inserted.ShipTime,po.ShipTime),DeliveryTime=coalesce(inserted.DeliveryTime,po.DeliveryTime)fromPO_Active_InstanceDatapojoininsertedonpo.PONum=inserted.PONumif@@rowcount=0insertPO_Active_InstanceDataselect*frominsertedendgo</pre>權(quán)利要求1.一種維護有關(guān)一個活動的多個實例的信息的方法,每個實例有一個活躍狀態(tài)或一個非活躍狀態(tài),在活躍狀態(tài)中有關(guān)該實例的信息將被修改,在非活躍狀態(tài)中有關(guān)該實例的信息將不會被修改,其特征在于,所述方法包括為處于活躍狀態(tài)的多個實例中的每一個在第一數(shù)據(jù)庫表中創(chuàng)建一條記錄,每條記錄包含針對多個數(shù)據(jù)類型中的每一個的字段,在每個活躍實例記錄的一個或多個字段中,有用來指示活躍狀態(tài)的值;對于處于非活躍狀態(tài)的多個實例的記錄,給所述一個或多個字段賦值指示處于非活躍狀態(tài);從所述第一表中刪除其在所述一個或多個字段中有指示其處于非活躍狀態(tài)的值的實例的記錄;以及為從第一表中刪除的記錄在第二數(shù)據(jù)庫表中創(chuàng)建一個相應(yīng)的記錄。2.如權(quán)利要求1所述的方法,其特征在于,所述第二表的記錄被創(chuàng)建后不做更新。3.如權(quán)利要求1所述的方法,其特征在于,所述非活躍狀態(tài)對應(yīng)于活動已完成的一個實例。4.如權(quán)利要求1所述的方法,其特征在于,第一表記錄中的數(shù)據(jù)在刪除時被復(fù)制到對應(yīng)的第二表記錄中。5.如權(quán)利要求1所述的方法,其特征在于,第一表記錄中的全部數(shù)據(jù)在刪除時實質(zhì)上被完全復(fù)制到對應(yīng)的第二表記錄中。6.如權(quán)利要求1所述的方法,其特征在于,所述第一表中只包含處于活躍狀態(tài)的實例的記錄。7.如權(quán)利要求1所述的方法,其特征在于,所述一個或多個字段包括一個標(biāo)志,如果實例是活躍的,則該標(biāo)志取第一值,如果實例是非活躍的,則該標(biāo)志取第二值。8.如權(quán)利要求1所述的方法,其特征在于,所述一個或多個字段包括一個包含非活躍實例記錄的實例完成時間的字段。9.如權(quán)利要求1所述的方法,其特征在于,還包括創(chuàng)建包括所述第一表和第二表的視圖。10.如權(quán)利要求1所述的方法,其特征在于,還包括創(chuàng)建第三數(shù)據(jù)庫表;停止在所述第二表中創(chuàng)建記錄;以及對于每個在創(chuàng)建第三表后從第一表中刪除的記錄,在第三表中創(chuàng)建相應(yīng)的記錄。11.如權(quán)利要求10所述的方法,其特征在于,所述創(chuàng)建第三數(shù)據(jù)庫表包括在預(yù)設(shè)時間段過后創(chuàng)建第三數(shù)據(jù)庫表。12.如權(quán)利要求10所述的方法,其特征在于,還包括刪除所述第二數(shù)據(jù)庫表。13.如權(quán)利要求10所述的方法,其特征在于,還包括重命名所述第二數(shù)據(jù)庫表。14.如權(quán)利要求10所述的方法,其特征在于,還包括創(chuàng)建后續(xù)數(shù)據(jù)庫表;在后續(xù)表創(chuàng)建后,終止在之前創(chuàng)建的表中創(chuàng)建記錄;以及對于在創(chuàng)建最近一個表之后但在創(chuàng)建另一后續(xù)表之前從第一表中刪除的每一個記錄,為其在所述最近創(chuàng)建的表中創(chuàng)建相應(yīng)的記錄。15.如權(quán)利要求14所述的方法,其特征在于,還包括在表的數(shù)目達(dá)到預(yù)定數(shù)值時,對于每個新創(chuàng)建的表,都刪除一個后續(xù)創(chuàng)建的表。16.如權(quán)利要求15所述的方法,其特征在于,還包括在刪除之前,歸檔一份表的副本。17.如權(quán)利要求14所述的方法,其特征在于,還包括創(chuàng)建包括未刪除表的視圖。18.如權(quán)利要求14所述的方法,其特征在于,所述創(chuàng)建一個后續(xù)的數(shù)據(jù)庫表包括將先前創(chuàng)建的表重命名。19.如權(quán)利要求1所述的方法,其特征在于,還包括根據(jù)所述第一表和第二表中的數(shù)據(jù)生成分析數(shù)據(jù)。20.如權(quán)利要求19所述的方法,其特征在于,所述生成分析數(shù)據(jù)還包括為第一表中的記錄生成第一在線分析處理(OLAP)方塊,為第二表中的記錄生成第二OLAP方塊,將所述第一方塊和所述第二方塊組合成虛擬OLAP方塊。21.如權(quán)利要求20所述的方法,其特征在于,所述生成第二OLAP方塊包括從所述第二表中獲取記錄,還包括對于第二表中的每個記錄賦予一個唯一的遞增的標(biāo)識符值;存儲被獲取以生成所述第二OLAP方塊的最后一個記錄的遞增標(biāo)識符值;隨后從第二表中獲取其它的記錄,所述其它記錄不被處理來生成第二OLAP方塊;以及基于所述其它記錄更新第二OLAP方塊。22.如權(quán)利要求21所述的方法,其特征在于所述生成第二OLAP方塊包括將第二表記錄的數(shù)據(jù)輸入到一個星型模式中、并且在生成所述第二OLAP方塊之后保存上述星型模式;以及所述更新第二OLAP方塊包括修改所述已保存的星型模式、使用來自所述其它第二表記錄的數(shù)據(jù)、并根據(jù)修改后的星型模式重新生成第二OLAP方塊。23.一種其上存儲表示指令序列的數(shù)據(jù)的計算機可讀媒質(zhì),當(dāng)該指令被處理器執(zhí)行時,促使處理器執(zhí)行以下步驟對于一個活動的多個實例中的每個實例,在第一表中為其創(chuàng)建一條記錄,其中每個實例具有一個處于其中時有關(guān)該實例的信息將被修改的活躍狀態(tài),或者一個處于其中時有關(guān)該實例的信息將不被修改的非活躍狀態(tài),所述第一表中的記錄為處于活躍狀態(tài)的實例創(chuàng)建,且所述第一表中的每條記錄包含針對多個數(shù)據(jù)數(shù)據(jù)類型中的每一個的字段,每個活躍實例記錄中的一個或多個字段具有指示活躍狀態(tài)的值;對于處于非活躍狀態(tài)的多個實例的記錄,給所述一個或多個字段賦于指示非活躍狀態(tài)的值;從第一表中刪除多個在其一個或多個字段中的值指示其處于非活躍狀態(tài)的實例的記錄;以及對于從第一表中刪除的記錄,在第二數(shù)據(jù)庫表中創(chuàng)建相應(yīng)的記錄。24.如權(quán)利要求23所述的計算機可讀媒質(zhì),其特征在于,所述第二表中的記錄被創(chuàng)建后不被更新。25.如權(quán)利要求23所述的計算機可讀媒質(zhì),其特征在于,所述非活躍狀態(tài)對應(yīng)于活動已完成的一個實例。26.如權(quán)利要求23所述的計算機可讀媒質(zhì),其特征在于,第一表記錄中的數(shù)據(jù)在其被刪除時被復(fù)制到對應(yīng)的第二表記錄中。27.如權(quán)利要求23所述的計算機可讀媒質(zhì),其特征在于,第一張表中記錄的實質(zhì)上全部數(shù)據(jù)在被刪除時被完全復(fù)制到對應(yīng)的第二表記錄中。28.如權(quán)利要求23所述的計算機可讀媒質(zhì),其特征在于,所述第一表只包含處于活躍狀態(tài)的實例的記錄。29.如權(quán)利要求23所述的計算機可讀媒質(zhì),其特征在于,所述一個或多個字段包括一個標(biāo)志,如果實例是活躍的,則該標(biāo)志取第一值,如果實例是非活躍的,則該標(biāo)志取第二值。30.如權(quán)利要求23所述的計算機可讀媒質(zhì),其特征在于,所述一個或多個字段包括一個包含非活躍實例記錄的實例完成時間的字段。31.如權(quán)利要求23所述的計算機可讀媒質(zhì),其特征在于,還包括執(zhí)行以下步驟的指令創(chuàng)建包括所述第一表和第二表的視圖。32.如權(quán)利要求23所述的計算機可讀媒質(zhì),其特征在于,還包括執(zhí)行以下步驟的指令創(chuàng)建第三數(shù)據(jù)庫表;終止在第二表中創(chuàng)建記錄;以及對于在創(chuàng)建第三表后從第一表中刪除的每個記錄,在第三表中為創(chuàng)建相應(yīng)的記錄。33.如權(quán)利要求32所述的計算機可讀媒質(zhì),其特征在于,所述創(chuàng)建第三數(shù)據(jù)庫表包括在預(yù)設(shè)的時間段過后創(chuàng)建第三數(shù)據(jù)庫表。34.如權(quán)利要求32所述的計算機可讀媒質(zhì),其特征在于,還包括執(zhí)行以下步驟的指令刪除第二數(shù)據(jù)庫表。35.如權(quán)利要求32所述的計算機可讀媒質(zhì),其特征在于,還包括執(zhí)行以下步驟的指令將第二數(shù)據(jù)庫表重命名。36.如權(quán)利要求32所述的計算機可讀媒質(zhì),其特征在于,還包括執(zhí)行以下步驟的指令創(chuàng)建后續(xù)數(shù)據(jù)庫表;在后續(xù)表創(chuàng)建后,終止在之前創(chuàng)建的表中創(chuàng)建記錄;以及對于在創(chuàng)建最近一個表之后但在創(chuàng)建另一后續(xù)表之前從第一表中刪除的每個記錄,為其在所述最近創(chuàng)建的表中創(chuàng)建一個相應(yīng)的記錄。37.如權(quán)利要求36所述的計算機可讀媒質(zhì),其特征在于,還包括執(zhí)行以下步驟的指令在表的數(shù)目達(dá)到一個預(yù)定的數(shù)值時,對于每個新創(chuàng)建的表,刪除一后續(xù)創(chuàng)建的表。38.如權(quán)利要求37所述的計算機可讀媒質(zhì),其特征在于,還包括執(zhí)行以下步驟的指令在刪除之前,歸檔一份表的副本。39.如權(quán)利要求36所述的計算機可讀媒質(zhì),其特征在于,還包括執(zhí)行以下步驟的指令創(chuàng)建一個包括未刪除表的視圖。40.如權(quán)利要求36所述的計算機可讀媒質(zhì),其特征在于,所述創(chuàng)建后續(xù)數(shù)據(jù)庫表包括將先前創(chuàng)建的表重命名。41.如權(quán)利要求23所述的計算機可讀媒質(zhì),其特征在于,還包括執(zhí)行以下步驟的指令基于第一和第二表中的數(shù)據(jù)生成分析數(shù)據(jù)。42.如權(quán)利要求41所述的計算機可讀媒質(zhì),其特征在于,所述生成分析數(shù)據(jù)還包括為第一表中的記錄生成第一在線分析處理(OLAP)方塊,為第二表中的記錄生成第二OLAP方塊,將所述第一第二方塊組合成虛擬OLAP方塊。43.如權(quán)利要求42的計算機可讀媒質(zhì),其特征在于,所述生成第二個OLAP方塊包括從第二表中獲取記錄,還包括進一步的指令,以執(zhí)行下列步驟對于第二表中的每個記錄賦予一個唯一的遞增的標(biāo)識符值;存儲被獲取以生成所述第二OLAP方塊的最后一個記錄的遞增標(biāo)識符值;隨后從第二表中獲取其它的記錄,所述其它記錄不被處理來生成第二OLAP方塊;以及基于所述其它記錄更新第二OLAP方塊。44.如權(quán)利要求43所述的計算機可讀媒質(zhì),其特征在于所述生成第二OLAP方塊包括將第二表的記錄數(shù)據(jù)輸入一個星型模式中、并且在生成該第二OLAP方塊之后保存所述星型模式,以及所述更新第二OLAP方塊包括修改已存儲的星型模式、使用來自所述其它第二表記錄的數(shù)據(jù)、及基于所修改的星型模式重新生成第二OLAP方塊。45.一種用于維護有關(guān)一個活動的多個實例的信息的數(shù)據(jù)處理裝置,每個實例具有活躍狀態(tài)或非活躍狀態(tài),處于活躍狀態(tài)時,有關(guān)該實例的信息將被修改,處于非活躍狀態(tài)時,有關(guān)該實例的信息將不被修改,所述裝置包括至少一個數(shù)據(jù)存儲器件;至少一個用戶輸入設(shè)備;以及處理器,它可操作地連接到所述存儲器件和用戶輸入設(shè)備,其中所述至少一個存儲器件在其上儲存了一組指令,當(dāng)該指令被執(zhí)行時,將配置所述處理器以對于多個處于活躍狀態(tài)的實例中的每一個,為其在第一數(shù)據(jù)庫表中創(chuàng)建一個記錄,每條記錄包含針對多個數(shù)據(jù)類型中的每一個的字段,在每個活躍實例的記錄中的一個或多個字段具有指示活躍狀態(tài)的值,對所述處于非活躍狀態(tài)的多個實例的記錄,給所述一個或多個字段賦于指示非活躍狀態(tài)的值;從第一表中刪除在所述一個或多個字段中具有指示其處于非活躍狀態(tài)的實例的記錄;以及對于從第一表中刪除的記錄,在第二數(shù)據(jù)庫表中創(chuàng)建一個相應(yīng)的記錄。46.如權(quán)利要求45所述的數(shù)據(jù)處理裝置,其特征在于,所述一組指令包括包括附加的指令,當(dāng)這些指令被執(zhí)行時,將配置所述處理器以為第一表中的記錄生成第一在線分析處理(OLAP)方塊,為第二表中的記錄生成第二OLAP方塊,將所述第一和第二方塊組合成虛擬OLAP方塊。47.一種用于遞增地生成活動實例的分析數(shù)據(jù)的方法,每個實例具有一個處于其中時有關(guān)該實例的信息將被修改的活躍狀態(tài),或者一個處于其中時有關(guān)該實例的信息將不被修改的非活躍狀態(tài),所述方法包括通過處理與處于活躍狀態(tài)的實例相關(guān)的最初的數(shù)據(jù)庫記錄集,生成第一在線分析處理(OLAP)方塊;通過處理與處于非活躍狀態(tài)的實例相關(guān)的最初的數(shù)據(jù)庫記錄集,生成第二(OLAP)方塊;以及將所述第一和第二方塊組合成虛擬OLAP方塊。48.如權(quán)利要求47所述的方法,其特征在于,還包括確定一后續(xù)的未被處理以形成第二OLAP方塊的非活躍實例記錄集;以及基于所述后續(xù)的集,更新第二OLAP方塊。49.如權(quán)利要求48所述的方法,其特征在于,還包括針對活躍實例數(shù)據(jù)記錄的后續(xù)集,生成后續(xù)的第一OLAP方塊;以及將所述后續(xù)的第一OLAP方塊和已更新的第二OLAP方塊組合成后續(xù)虛擬OLAP方塊,其中所述活躍實例數(shù)據(jù)庫記錄的后續(xù)集包括未被處理以生成第一OLAP方塊的活躍實例記錄,且所述非活躍實例數(shù)據(jù)庫記錄的后續(xù)集包括這樣一些記錄,這些記錄與在所述第一OLAP方塊被生成時處于活躍狀態(tài)的實例相關(guān),而相關(guān)的活躍實例記錄已被處理用以生成所述第一OLAP方塊。全文摘要解決了與維護有關(guān)活動的多個實例的信息的問題。為對應(yīng)于一個組織機構(gòu)活動的活躍實例的數(shù)據(jù)和對應(yīng)于其活動的非活躍實例的數(shù)據(jù)分別維護數(shù)據(jù)庫表。可以為對應(yīng)于活動的非活躍實例的數(shù)據(jù)維護多個數(shù)據(jù)庫表。在另一方面,處理來自活躍實例表以及一個或多個非活躍實例表的數(shù)據(jù)以生成組合分析數(shù)據(jù)。文檔編號G06Q30/00GK1601527SQ20041005891公開日2005年3月30日申請日期2004年7月19日優(yōu)先權(quán)日2003年9月26日發(fā)明者G·B·齊考德羅夫,R·Z·杰森,E·A·里爾申請人:微軟公司