database - 每周计划——如何将其存储在数据库中?

标签 database datetime data-structures timespan

目前,我正在做一个项目来管理服务器数据库等的维护窗口。基本上,我只需要精确到小时,但允许将它们设置为允许或不允许,一周中的每一天。

我对如何做到这一点有一些想法,但由于我是自己工作,所以我不想在没有反馈的情况下做出任何 promise 。

为了形象化,它就像流动的“图表”

    | Sun | Mon | Tue | Wed | Thu | Fri | Sat |
    -------------------------------------------
5AM |allow|allow|allow|deny |deny |allow|allow|
    -------------------------------------------
6AM |allow|deny |deny |deny |deny |deny |allow|
    -------------------------------------------
7AM |allow|deny |deny |deny |deny |deny |allow|
    -------------------------------------------
8AM |allow|deny |deny |deny |deny |deny |allow|
    -------------------------------------------
9AM |allow|deny |deny |deny |deny |deny |allow|
    -------------------------------------------
... etc... 

是否有执行此操作的标准方法或可能给我一些想法的资源...

  1. 制作一个可以轻松保存和恢复的格式
  2. 让它可以在数据库中搜索(例如,不必反序列化它来搜索时间)

[更新]

值得一提的是,即使不太可能,一天也可以设置为“允许、拒绝、允许、拒绝……等等……”。跨度不能保证是一整天的唯一跨度。

这也不是唯一的时间表,将有数百台设备,每台设备都有自己的时间表,所以它会变得毛茸茸......大声笑??

Rob 问是否需要跟踪每周 - 不需要。这是适用于全年的通用时间表(定期维护)

最佳答案

我会考虑 (1) 使用包含开始时间和结束时间的格式,以及表示星期几的整数字段。我知道您说过 block 将始终为一小时,但这可以通过您的代码强制执行。此外,如果有一天您的需求发生变化,与您的 DB 语句全部编写为假定 1 小时 block 相比,您在步骤 (2) 中的担心要少得多。

CREATE TABLE maintWindow (
   maintWindowId  int primary key auto_increment not null,
   startTime      Time,
   endTime        Time,
   dayOfWeek      int,
   ...

对于 (2),如果每条记录都有与之关联的开始和结束时间,那么很容易检查任何给定时间的窗口:

SELECT maintWindowId
FROM maintWindow
WHERE $time >= TIME(startTime) AND $time <= TIME(endTime) AND DAYOFWEEK($time) = dayOfWeek

(其中 $time 代表您要检查的日期和时间)。

一周中每一天的允许或禁止将由单独的记录处理。恕我直言,这比一周中每一天的硬编码更灵活,因为您随后将使用某种 case 语句或 if-else 开关来检查您感兴趣的那一天的正确数据库列。

注意:确保您知道您的数据库在一周中的整数天使用哪个标准,并尝试使您的代码独立于它(总是询问数据库)。对于一周的开始(星期日或星期一)和起始索引(0 或 1),我们有很多不同的标准。

关于database - 每周计划——如何将其存储在数据库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/389343/

相关文章:

php - 数据未存储在数据库中

mysql - 如何选择具有特定 'state' 的行数最少的营销事件行?

database - 用于访问 SQL 数据库的数据库 URL 的 Jmeter JDBC 连接配置参数化

c - C 中日历作业的问题

C# 从今天的日期获取下一个第 N 个星期五的日期

c# - 如何在 DateTimePicker 中设置字体大小

mysql - 如何在多个表中选择值?

c++ - 使用双向链表实现稀疏矩阵中的多项式

c++ - 在 C++ 中使用 const 表示 std::pair

c - 如何在 C 中实现紧凑型有向无环字图 (CDAWG)?