非常简单,但就表设计而言,我所关注的领域是重复任务的情况,它可以是一次性的、每天一次的、每周一次的或每月一次的。每月是特定的一天。
我有一个tasks表和一个recurring_type_id,并打算在代码中处理重复出现的任务,但这是理想的方法吗?另一种方法是在创建任务时插入所有任务-针对每个事件时间。但这似乎也不太对。
有没有人能对设计提出建议,以及如何以一种可维护和有效的方式处理这个问题?
我正在使用SQL Server2008 R2
发布于 2013-01-25 02:53:19
我会创建一个任务表来插入我的任务。
taskTable
|taskID |Freq |runAt |
-------------------------------
|1 |daily |1 |
|2 |daily |0 |
|3 |weekly |5 |
|4 |weekly |1 |
|5 |monthly|15 |
|6 |monthly|1 |
|7 |once |2013-7-4 |dailies的runAt不考虑,因此输入什么值都无关紧要。
week items的runAt是任务要运行的星期几。
runAt for mothly是任务要运行的月份的第几天(我通常在第一天运行月末任务,因为这省去了处理月末哪一天的麻烦,尽管您可以使用它来解决这一问题
lastDayOfMonth = datePart(d,dateadd(s,-1,dateadd(mm, datediff(m,0,getdate())+1,0)))的runAt once是任务要运行的实际日期。
然后,我会创建一个每天运行的任务,看看需要运行什么。
select taskID
from taskTable
where (freq = 'once' and runAt = convert(varchar(10),getDate(),21))
or freq = 'daily'
or (freq = 'weekly' and runAt = datePart(dw,getDate()))
or (freq = 'monthly' and runAt = datePart(d,getDate())此查询为我提供了需要运行的所有任务的所有taskID。
我不确定这是否是你想要的,但希望你能从中找到有用的东西。
发布于 2013-01-25 03:26:09
我做了一件非常类似的事情:
_id
interval_type
time
day
nextday字段表示时间间隔内的某一天,对于one-shot和daily,该字段为null。表中的next字段用于标识任务下一次运行的时间。在任务应该运行时设备关闭的情况下,需要这样做。您只需要决定如何处理一个或多个错过的间隔。
发布于 2013-01-25 03:41:38
我应该使用一个日期作为参考,如下面的表
taskid date_reference Freq distance
----------- -------------- --------------- -----------
1 2011-01-01 daily NULL
2 2011-01-17 monthly NULL
3 2013-01-17 weekly NULL
4 2013-01-24 once NULL
5 2011-01-01 monthly NULL
6 2011-01-01 monthly NULL
7 2011-01-01 before_eomonth 5
8 2013-01-01 loop_day 4
9 2013-01-01 loop_month 4所以你可以用很多方法来检查周期...
传统的每周、每天、每月和一次。就像长枪的解决方案..
但是你会有几种不同的方式,比如
每4天
每4个月
或5天至月底
或月底
应该考虑在任务循环的末尾加上另一个日期...
但是工作永远不会结束..。所以,它永远不会被使用..;)
https://stackoverflow.com/questions/14412527
复制相似问题