如何跟踪实时点的变化?

时间:2016-01-02 08:42:27

标签: sql-server real-time

我正在建立一个会员系统,允许会员赚取和使用积分。有些要点也有失效日期。

目前我的系统有3个数据库表。

1)会员表,其中包含个人详细信息以及用于存储会员总分的列。

2)存储点数的交易表和到期日(如果有)

3)点数使用表存储使用点数的记录,可能用于从我的网站购买商品(每行使用一次)

我很难确定哪些点在过期之前使用过,或者它刚刚过期。

所以我希望我能在这里得到一些建议或建议。或者我的db表设计有什么问题导致我这个问题吗?

更新: 一旦会员获得或使用积分,继续更新会员表中的总积分列是否好,这会使系统做额外的工作吗?

1 个答案:

答案 0 :(得分:0)

我不确定我到底知道你需要什么,但我想出了类似的东西:

create table UserPoints(

    Id int not null identity( 1, 1 ),
    UserId int not null,
    Points int not null,
    [Date] datetime2( 3 ) not null,
    ExpireDate datetime2( 3 ) null

)
Go

-- + for earning points
-- - for loosing points
Insert into UserPoints Values
( 1,10,getdate(), null ),
( 1,10,dateadd(hour,1,getdate()), null ),
( 1,100,dateadd(month,2,getdate()), '2016-04-02' ),
( 1,-15,dateadd(month,3,getdate()), null ),
( 1,30,dateadd(month,4,getdate()), null )
Go


select * from UserPoints  order by [date]

--declare @checkDate datetime2(3) = '2016-04-02'
--declare @checkDate datetime2(3) = '2016-04-02 10:00'
declare @checkDate datetime2(3) = '2016-04-03'

select
    sum( points ) as 'UserPointsAtSpecificDate'
from
    UserPoints
where
    ( UserId = 1 )
    and ( [date] <= @checkDate )
    and ( isnull( expireDate, '9999-12-31' ) >= @checkDate )