+ -
当前位置:首页 → 问答吧 → 数据库设计,逻辑处理指点

数据库设计,逻辑处理指点

时间:2011-11-10

来源:互联网

现有
用户表 tab_user (uId,uName,uAddress ..)
活动奖项表 Tab_Campaingn (campId,CampName ..)
参与活动表 Tab_CampaignJoin (campId,uId,中奖状态,参与时间)


现在业务需求 

获奖规则:
每天出24个奖,平均每小时出2个奖,也就是说每小时随机发放两个中奖名额给在这两个小时内参与抽奖的用户;

请问数据库怎么设计比较好?

现在刚开始开发,数据库设计还可以改动。 
想征求一下高手的建议和想法。谢谢

作者: lzid2008   发布时间: 2011-11-10

参与活动表应该有用户ID和参与时间,找出一段时间内所有的用户ID,随机获取编号就行了.至于活动奖项,也可以随机为获奖的两个用户进行抽取.

作者: qianjin036a   发布时间: 2011-11-10

SQL code
就你这个其实就可以查询了

select 
  distinct b.*
from
  tb a
cross apply
  (select top 2 * from tb where uid=a.uid order by newid())b

作者: fredrickhu   发布时间: 2011-11-10

上面的语句是根据参与活动表写出来的。

要与前面两个表关联的话自己去做下

作者: fredrickhu   发布时间: 2011-11-10

引用 1 楼 qianjin036a 的回复:
参与活动表应该有用户ID和参与时间,找出一段时间内所有的用户ID,随机获取编号就行了.至于活动奖项,也可以随机为获奖的两个用户进行抽取.


我现在设计是准备这样
用户表 tab_user (uId,uName,uAddress ..)
活动奖项表 Tab_Campaingn (CampId,活动名称,活动描述,参数资格)
参与活动表 Tab_CampaignJoin (campJoinId,campId用户Id,中奖状态,参与时间)

---------
需求是,用户抽奖后,即时看到抽奖的结果

可需求中说明是:
每小时随机发放两个中奖名额给在这两个小时内参与抽奖的用户
【具体这么设计,.net代码里怎么操作 会比较好】


作者: lzid2008   发布时间: 2011-11-10

引用 2 楼 fredrickhu 的回复:
SQL code
就你这个其实就可以查询了

select
distinct b.*
from
tb a
cross apply
(select top 2 * from tb where uid=a.uid order by newid())b


cross apply 什么意思
这里的 tb 指的是参与活动的表格是吧



 

作者: lzid2008   发布时间: 2011-11-10

引用 2 楼 fredrickhu 的回复:
SQL code
就你这个其实就可以查询了

select
distinct b.*
from
tb a
cross apply
(select top 2 * from tb where uid=a.uid order by newid())b


SQL code
啊哦 忘记限定时间了  1个小时之内。

select 
  distinct b.*
from
  tb a
cross apply
  (select top 2 * from tb where uid=a.uid  and datepart(hh,时间)=datepart(hh,t.时间)order by newid())b


--CROSS APPLY是2005+的新语法

作者: fredrickhu   发布时间: 2011-11-10

引用 6 楼 fredrickhu 的回复:
引用 2 楼 fredrickhu 的回复:
SQL code
就你这个其实就可以查询了

select
distinct b.*
from
tb a
cross apply
(select top 2 * from tb where uid=a.uid order by newid())b



SQL code
啊哦 忘记限定时间了 1个小时之内。

sele……


其实加入这个需求,是为了不让奖项一天之中太快发完

作者: lzid2008   发布时间: 2011-11-10