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

    技术2025-01-20  22

    需求:

          广告位表 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.释放锁

     

    最新回复(0)