抛块砖:调度定义表:
调度定义ID  int   主键
广告ID      int   不说明了
开始时刻    int   从0点开始的分钟数
结束时刻    int   从0点开始的分钟数
显示次数    int
点击数      int
开始日期    datetime   
结束日期    datetime
Type        int   -1--仅开始日期这一天
                  -2--第4点,(还没好好理解)
间隔时间    int   分钟数,(是否需要?)
第5点已有方案,这里没有考虑

解决方案 »

  1.   

    Type        int   -1--仅开始日期这一天
                      -2--第4点,(还没好好理解)
                       1以上,间隔的天数,如1-每天,2-每两天,7-每周,30-每月等等
      

  2.   

    谢谢CCEO,间隔时间是一个非常好的题意,不过这里每周和七天还是有区别的,如果是星期一,那么应该是2天.我现在对2的初步想法Schedules
    ID,Type(0=Between BeginDateTime and EndDateTime; 1=Is Daily ;2=Is Weekly ;3=Is Monthly),MaxViewCount,MaxClickCount,BeginTime,EndTime,BeginDate,EndDateADSchedules
    ID,ADID,ScheduleID
    需另外增加一个计数表,
    DaliyCount
    ID,ADID,DATE,ViewCount,ClickCount  (已经显示或点击的次数)
    1,123,20004/04/10,10,2
    2,100,20004/04/10,1000,15
    ....只是这样检索当前有效的ADID还是比较复杂.
      

  3.   

    增加时间间隔:修改:
    DaliyCount
    ID,ADID,DATE,ViewCount,ClickCount,LastViewDateTime,LastClickDateTime  (已经显示或点击的次数)
    1,123,20004/04/10,10,2
    2,100,20004/04/10,1000,15
    ....这样时间间隔值不能放在Schedules表中,应该是某一个广告的属性.
      

  4.   

    sql的调度表:
    CREATE TABLE [sysjobschedules] (
    [schedule_id] [int] IDENTITY (1, 1) NOT NULL ,
    [job_id] [uniqueidentifier] NOT NULL ,
    [name] [nvarchar] (128) NOT NULL ,
    [enabled] [int] NOT NULL ,
    [freq_type] [int] NOT NULL ,
    [freq_interval] [int] NOT NULL ,
    [freq_subday_type] [int] NOT NULL ,
    [freq_subday_interval] [int] NOT NULL ,
    [freq_relative_interval] [int] NOT NULL ,
    [freq_recurrence_factor] [int] NOT NULL ,
    [active_start_date] [int] NOT NULL ,
    [active_end_date] [int] NOT NULL ,
    [active_start_time] [int] NOT NULL ,
    [active_end_time] [int] NOT NULL ,
    [next_run_date] [int] NOT NULL ,
    [next_run_time] [int] NOT NULL ,
    [date_created] [datetime] NOT NULL 
    )
    GO
      

  5.   

    各列意义你可以看联机帮助:
    我拷贝在这里,可能会比较乱列名 数据类型 描述 
    schedule_id int 调度 ID。 
    job_id uniqueidentifier 作业 ID。 
    name sysname 调度的名称。 
    enabled int 调度的启用状态。 
    freq_type int 调度执行的频率: 
    1 = 一次
    4 = 每天
    8 = 每周
    16 = 每月
    32 = 每月相对信息
    64 = 在 SQL Server
    代理程序启动时执行
     
    freq_interval int 表示调度运行日期的值。 
    如果 freq_type 是 4(每天),则该值是每隔 freq_interval 天。如果 freq_type 是 8(每周),则该值是表示周调度运行日期的位掩码。freq_interval 值是:1 = 星期日
    2 = 星期一
    4 = 星期二
    8 = 星期三
    16 = 星期四
    32 = 星期五
    64 = 星期六如果 freq_type 是 16(每月),则该值是月中的 freq_interval 天。如果 freq_type 是 32(每月相对信息),则 freq_interval 可以是下列值之一:1 = 星期日
    2 = 星期一
    3 = 星期二
    4 = 星期三 
    5 = 星期四 
    6 = 星期五 
    7 = 星期六 
    8 = 日 
    9 = 工作日
    10 = 周末
     
    freq_subday_type int freq_subday_interval 的单位: 
    1 = 以指定的时间
    2 = 秒
    4 = 分钟
    8 = 小时
     
    freq_subday_interval int 在每个已调度作业执行之间发生的 freq_subday_type 周期数。 
    freq_relative_
    interval int 当 freq_type 是 32(每月相对信息)时,每月已调度作业的 freq_interval 发生:
    1 = 第一个
    2 = 第二个
    4 = 第三个
    8 = 第四个
    16 = 最后一个 
    freq_recurrence_
    factor int 在已调度作业执行之间的星期数或月份数。 
    active_start_date int 开始执行作业的日期。 
    active_end_date int 停止执行作业的日期。 
    active_start_time int 开始执行作业的时间。 
    active_end_time int 停止执行作业的时间。 
    next_run_date int 下一次执行作业的日期。 
    next_run_time int 下一次执行作业的时间。 
    date_created datetime 已调度作业项的创建日期。  
      

  6.   

    sql的设计里很多按位操作的,比较节省空间
      

  7.   

    如果参考sql的设计可以实现:
    每周一11点
    每周一、三、五11点
    每周一11到15点每5分钟一次
    每月12号等等
    比较灵活
      

  8.   

    有 & 和 | 操作
      

  9.   

    上面复选的情况只要按位OR运算就可以得到,取出时只要和某个类别做AND运算,就能得到是不是有这个类型,真是方便.....我主要考虑时间间隔应该是针对某一个广告来说的,如果是针对调度当然也可以,但是这样在没有使用调度的广告就没有时间间隔设置了,我觉得放在广告中更加灵活一点..其实广告和这个调度还是有点区别的,JOB的调度没有外在因素影响,但这里有已经显示的次数影响,所以在取出时我觉得这样的效率不太理想,所以想找更优化的设计.
      

  10.   

    问题是,你需要取Schedules表的MaxViewCount,MaxClickCount来比较,放在广告里还需要连接广告表。间隔时间实现起来会比较麻烦,需要比较最后显示的时间,而且要考虑已经到MaxViewCount,MaxClickCount的情况又不显示。
    你有MaxViewCount,MaxClickCount来控制可以不考虑间隔时间。
    Schedules需要增加对type更深定义的字段,比如周一还是周二
      

  11.   

    这个时间间隔肯定是我们在理解上有点误差,我想的是这样的,比如我打开一个网页会显示一个广告,在一定的时间里我打开网页就不再显示这个广告只可以显示其它广告,现在看来我的想法是不太可能实现,要这样还得记录访问者的IP,这样数据量太大了,如果不记录IP,那样反而不好,那么这个时间间隔也就没有什么意义了,不过可以用Session来保存用户最后显示的广告ID,这样至少可以保证不连续重复的显示某一个广告,但作用也不是很大,广告本来就是随机取的,量大后重复的机率本来就不大.
    广告表本来就是要连接的,只是这样需要四个表的连接查询,加上优先级需要一个附加表,一共五个表,唉~~~