日期:2014-05-18  浏览次数:20433 次

小游戏比赛数据库的设计
一些flash小游戏,可以提交成绩的,网友进行游戏提交积分,定时对名称前列的玩家进行奖励网站虚拟货币(例如每天中午12点,对0-12点的提交成绩结算一次;晚上12点对12-24点的成绩结算一次)

记录提交成绩的表结构
CREATE TABLE [dbo].[Score] (
[Id] [int] IDENTITY (1, 1) NOT NULL ,
[UserId] [int] ,
[GameId] [int] ,
[Score] [numeric](20, 8) ,
[Date] [smalldatetime] ) ON [PRIMARY]
GO

结算是通过定时作业来执行的,每到12点,对Score表查询出这轮比赛的成绩列表,然后分配奖励

问题是分配奖励,会消耗比较长的时间,例如12:25分才执行完毕,

用户上午有提交一个成绩,然后在12:15分又提交了成绩,此成绩会覆盖上午提交的(上午这轮的奖励还在执行中,没有分配给这个用户)

怎样修改比较好,避免这种覆盖成绩的情况出现呢

------解决方案--------------------
建一个标记列,对奖励的置一个标记,没奖励的置为另外一个标记
------解决方案--------------------
好象还没说清楚
------解决方案--------------------
用户的游戏成绩应该是个流水表啊,有历史记录的,为什么要覆盖原来数据?

应该是用户表,成绩表 1对N关系建表啊
那么作业就可以统计,而且只是个TOP排序查询,应该会很快的