我正在使用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 :(得分:4)
将您的VoteDate
存储为datetime
值,而不仅仅是date
。
对于你的标签,你可以只是制作一个视图并动态计算。使用GROUP BY
和DATEPART
函数时,这应该非常简单。如果您需要确切的代码来解决此问题,请打开一个新问题。
对于那些少量的行,只要你想看到它们并且获得最新的准确和即时的结果,就可以在表格中存储聚合没有任何意义。
答案 1 :(得分:2)
我同意@JNK尝试一个视图或只是一个正常的存储过程来动态计算输出。如果你发现随着数据的增长它变得太慢,我会研究其他路线(比如在另一个表中缓存数据等)。可能值得开始时保持简单;如果您确实想要设置计划任务,可以随后从SP / VIEW中重新使用逻辑。
编辑: 根据@Damien_The_Unbeliever删除索引视图评论它不确定,我是愚蠢的:))