首页 > 解决方案 > 基于开始日期和频率的重复检查的数据库结构

问题描述

我有一个问题,我需要设计一个记录系统来存储建筑检查。

需要按指定的频率进行检查,比如根据开始日期每月进行一次。

我想检查需要在inspections带有id,startDate和的表中记录frequency,然后每次执行检查时,都会在带有,和其他数据的inspection_record表中放入一个条目。idinspectionDate

如果只需要在最后一次检查之后的“X 时间范围”就可以了,但检查可能不会在需要的当天进行,可能会在多次检查之前或之后进行”。

startDate从based生成日期列表很容易frequency,但是我如何确保inspection_record已经完成。因为我需要获得所有过期或一个月内到期的检查清单。

我能想到的唯一方法是取startDate今天的日期和频率,找出频率适合的次数,然后将其向下舍入到最接近的 int 并向上取整以在检查前后得到最接近的值,然后用它来确定“检查括号”并检查是否在这些括号中进行了实际检查,这在大范围内看起来非常混乱和缓慢。

有任何想法吗?甚至是我可以用来搜索这个的术语?

实现某种类似 cron 的系统会更容易吗?但是,我如何确定检查实际上是在正确的时间完成的?刚才说本月1号检查,14号才做完,需要看本月和下个月的检查还是1号到期。

标签: mysqldatabase-design

解决方案


Have another column, next_scheduled_date. When an inspection is performed, update that column to CURDATE() + INTERVAL 1 MONTH.

With that column, you can discover

WHERE next_scheduled_date < CURDATE()  -- task that are overdue
WHERE next_scheduled_date = CURDATE()  -- due today
WHERE next_scheduled_date < CURDATE() + INTERVAL 7 DAY -- this week's tasks

etc.


推荐阅读