用于存储schedules/cron作业的数据库结构?

2skhul33  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(241)

我被一个问题困住了。在应用程序的数据库中,我有一个 schedule 将存储用户提供的计划的表。例如
每日的
每周
一周两次
每3天(或用户选择的任何一天)
每月
一个月两次
每月x日
每年x个月
等等。这些时间表将提供参考点,以安排不同的任务或确定其重复性。
我想不出一个合适的数据库结构。我能得到的最好的结果是有一个包含以下列的表:
白天



类型
然后将指定的计划存储在相关列中并提供类型。e、 g每周可以在周列中取1,也可以取1(指定为重复整周的值)或类似的值。
这种方法的问题是,这个表将被频繁地使用,检索到的数据将不简单。它需要计算来了解计划类型,因此需要复杂的数据库查询来获得每种类型的计划。
我正在laravel应用程序中实现它,如果它可以提供任何其他方法的话。这是一个saas应用程序,有大量与时间表相关的数据。
任何帮助都将不胜感激。谢谢

55ooxyrt

55ooxyrt1#

我建议你把这个问题向后看。
设计几个规则。在应用程序中编写规则,而不是在sql中。插入事件时,请用事件的所有事件预先填充未来12个月的日历。每月检查所有事件,并将“预填充”延长一个月(此后13个月)。
现在 SELECTs 简单快捷。

SELECT ... WHERE date = '...'

拥有当天的所有事件(假设在12个月内)。
复杂性在于插入。但大概你插入的次数比你选择的要少。
包含事件定义的表只会根据应用程序的需要来确定要做什么。也许

start_date DATE,
frequency ENUM('day', 'week', 'month', ...)
multiplier TINYINT, -- this lets you say "every second week"
offset TINYINT,   -- to get "15th of every month"

一周两次就是两次参赛。
更好的是,有几个包(perl、shell等)为表示事件日期模式提供了非常丰富的语言。此外,你可以简单地'调用'它为你做所有的工作!

相关问题