2012-01-20 60 views
2

我正在使用SQL Server 2005.如何計算並存儲網站的投票?

我有一個網站,人們可以在真棒摩托車上投票。每次用戶投票時,第一輛自行車和第二輛自行車都有一張投票。兩張選票存儲在數據庫中。投票表看起來像這樣:

VoteID VoteDate  BikeID Vote 
1  2012-01-12 123 1 
2  2012-01-12 125 0 
3  2012-01-12 126 0 
4  2012-01-12 129 1 

我想爲每輛自行車的票數相當頻繁地說,每小時說。我的想法是將理貨作爲自行車的一個屬性存儲在自行車牌桌上作爲比賽勝利與失去的比例。所以,如果一輛自行車贏得了10場比賽並且輸掉了20場比賽,他們的得分將達到33分。我會計算每日,每週和每月的分數。

BikeID BikeName DailyTally WeeklyTally MonthlyTally 
1  Big Dog 5   10   50 
2  Big Cat 3   15   40 
3  Small Dog 9   8   0 
4  Fish Face 19   21   0 

現在,每天大約有500張選票正在播出。我們預計在未來一個月左右,每天會有2500 - 5000個。

收集數據的最佳方法是什麼?最好的方法是什麼?是否應該在自己的桌子上?每次投票時,是否應該使用觸發器來運行新的計數器?是否應該每小時運行一次存儲過程以獲取所有記錄?

任何想法都會非常有幫助!

+0

什麼標識一個比賽?一個'VoteDate'? –

回答

4

將您的VoteDate作爲datetime的值存儲,而不僅僅是date

對於您的符合條件,您可以將其作爲視圖並在運行中進行計算。使用GROUP BYDATEPART函數應該很簡單。如果您需要準確的代碼以瞭解如何操作,請打開一個新問題。

對於低容量的行,只要您想要查看它們並計算最新的準確即時結果,就可以在表中存儲聚合時沒有任何意義。

+0

VoteDate絕對是一個日期時間。 (謝謝!)那麼,在開始聚合之前可能需要多少行呢? –

+0

只要你有合適的索引,你就可以幾乎無限期地即時聚合(即在你的視圖中)。我用數億行沒有問題做到這一點。 – JNK

+0

哇!我已經聽取了你的建議。在週末,我確實設置了幾個視圖來訪問我需要的信息,持續七天,最後三十天,最後九十天和所有時間。我可以很快訪問它們。感謝您的可靠建議。 –

2

我同意@JNK嘗試一個視圖或只是一個正常的存儲過程來計算輸出的動態。如果您發現數據增長太慢,我會調查其他路由(如在另一個表中緩存數據等)。可能值得保持簡單開始;如果您確實想要設置計劃任務,則可以稍後重新使用SP/VIEW中的邏輯。

編輯: 刪除索引視圖按@Damien_The_Unbeliever評論它的不確定性,我很愚蠢的:)

+0

如果視圖定義(如此處可能)使用* current *日期,則索引視圖將不起作用。 –

+0

對不起,你是對的,它必須是一個確定性的功能不是它。我編輯並刪除。我個人只會使用SP。 –

+0

VoteDate是一個日期時間字段。我不知道這是否會改變你的任何事情。 –