2011-02-16 44 views
1

我有一個數據庫,可以跟蹤當年和前幾年的員工數據。 在下面的示例中,我將使用日曆年(年份開始於一月,結束於十二月) - 情況並非總是如此,有些用戶的年份從七月至六月或四月至三月等。凍結往年數據

There有很多表格,通過一些繁重的計算,可以在此時查看員工的數據。

這一年的數據是用戶最關注的。但是前幾年的數據會影響今年(所以,2008年數據的變化將對2009年產生影響,然後到2010年以及今年到來)。

顯然,在查看報告時,這會對性能產生負面影響,因爲查看今年的數據將意味着前幾年都會徘徊 - 計算並創建視圖直到找到最終結果。隨着應用程序的老化,這個問題會變得越來越糟糕 - 比如說在2015年,任何使用該系統的人(2008年)都會等待很長時間才能獲得他們的數據。

我們計劃凍結前幾年的數據,而不是從2008年,2009年,2010年和今年的數據中獲取數據 - 我們將與前一年的數據(所有計算結果均爲前幾年)和今年的數據數據。

通過這種方式,我們將獲得所有前一年的最終結果數據,而且我們只需要添加到今年即可獲得最終結果。

顯然,我們必須防止用戶在前幾年輸入/更新數據。

我的問題是達到此目的的最佳方法是什麼?我認爲你需要一些等待到新的一年並進行一些計算的過程。

在此先感謝,

ViperMAN。

回答

1

一種方法我想工作如下:

  1. 創建包含往年的計算結果的表。
  2. 防止應用層對前幾年的所有添加/刪除/更新。
  3. 更改報告,以便查詢可以查詢此表而不是跋涉,每次計算所有內容。
  4. 有一個日常過程: 檢查今天是否是員工年的第一天 - 如果是,請獲取所有過去的年份數據並將它們添加到前幾年。

很明顯,這是一個模擬版本 - 但我認爲可以工作。

想法?

+0

聽起來像你有一個良好的步驟抓地力。 – 2011-02-17 20:00:16

1

您描述的方法通常被稱爲數據存檔,您可以在新年聚會後的第一個工作日每年手動運行一次DBA,以便計算出的數據已準備好並存儲。

此外,您的應用程序需要拒絕用戶修改前幾年的數據,如果我沒有錯誤的話。

+0

嗨達維德, 這並不是真正的阻礙效果 - 所有前幾年的數據相結合,使今年的數據。所以我們需要保留這些數據,而不是將其歸檔。舉一個簡單的例子:假設在2009年初,僱員的價值爲20美元。在整個2009年裏,這個數字有很多變化:從中拿走了2個,並且增加了1個。然後在2009年底這個數字是19.然後在2010年從這個數字中拿出5。在2011年,這個數字是14.我想要的是把前一年的數字作爲結果,而不是每次都計算出結果。 – 2011-02-16 14:40:17

0

如果您有不應編輯的數據,並且您可以定義該數據是什麼,那麼我將使用存儲過程和安全設置的組合來確保舊數據保持準確。

如果您使用存儲過程作爲過濾器,則可以在存儲過程中使用邏輯來檢查記錄與當前日期時間,並且只有在所有事情都符合要求時才允許更新。

+0

謝謝Justin,我認爲阻止用戶更新舊記錄將成爲問題的最簡單部分。對我而言,存在兩個主要問題:1.找到最好的方法來保留所有員工以前的數據計算和準備使用。 2.新年開始時,將最近過去的數據添加到混合中。 – 2011-02-17 09:18:00