您的位置:首页 > 其它

关于广告位管理系统设计-广告位销售记录表的设计

2010-06-29 11:21 337 查看
需求:

      广告位表 P(编号,名称,目录,规格)

      广告位有三种状态,空闲,试用,已售

      一个广告位只能有一条当前有效销售记录(ETime>Now),不能在S表中添加开始时间不是当前时间使用记录,当然不能把以后的时间提前买给别的用户(预售)

  状态转换

     空闲--(启用)-->试用|已售

     试用--(转正)-->已售

     试用|已售--(中止)-->空闲

     试用|已售---(调整)-->试用|已售 注意,试用调整后依旧是试用,已售也一样

     试用|已售--(到期)--->空闲

     已售---(继费)-->已售

------------------------------------

    广告位的状态由销售表计算获得,需要能查看广告位的操作记录(状态转换前后记录)

   网站上有,有多用户并发的情况,需要启用事务--在状态转换时锁定销售记录表

 

   销售记录表S(编号,负责人,操作,开始时间,结束时间,广告位编号,状态,转换,IsCut,...)

  说明 S.BTime开始时间,S.ETime 结束时间

  IsCut=1表示为历史记录(可以考试使用历史表)不过直接标记成IsCut更便捷

  ------------------------------------

 查询空闲广告位

Select ... From(

  Select p.编号,Max(s.ETime)

   P Left S On P.编号=S.广告位编号

   s.IsCut=0

  Group by P.编号) as t inner join 其他关联表

Where t.ETime < getdate() or  (t.ETime is null) 

-------------------------------------------------

查询使用广告位(试用,已售)

Select ... From p inner join S On p.编号=S.广告位编号

Where s.IsCut=0 And s.Etime >=getdate()

 

 

 状态转换:

1.读取S表的广告位编号为xxx并且ETime>=getdate() And IsCut=0的记录

2.锁定S表,再次判断 IsCut=0是否成立

3.设置IsCut=1

4.插入状态改变后的新记录IsCut=0

5.释放锁

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐