Как сохранить в базе данных даты и временные рамки возникновения событий для быстрых / элегантных запросов?

Допустим, я веду базу данных событий, которые могут быть от еженедельного расписания часов работы компании (понедельник-пятница: с 10:00 до 19:00, сб: с 12:00 до 18:00, вс: выходной) до ежемесячных мероприятий (ярмарка произведений искусства, каждую первую субботу с 10:00 до 17:00) до ежегодного мероприятия ( Благотворительный ужин в сочельник, 19: 00–21: 00)

В идеальной ситуации я хотел бы запросить базу данных с любым днем, например: Четверг, 12 января 2012 г., 12:00

...и найти все события, которые происходят:

  • обычный полдень четверга (например, открытие бизнеса)
  • каждый второй четверг (ярмарка искусства)
  • янв. 12, в частности (э ... День памяти Туркменистана)

Я полагаю, что нет смысла говорить о построении запроса, не подумав предварительно, как такие даты / время будут храниться в базе данных.

Я не могу придумать, как можно смоделировать концепцию регулярных еженедельных рабочих часов (даже без учета крайних случаев) в единственном поле с одной записью, которое также моделировало бы событие раз в год. По крайней мере, мне кажется, что мне понадобится как минимум пять полей:

  • Время начала
  • Продолжительность
  • День недели (например, понедельник, вторник и т. Д.)
  • необязательная абсолютная годовая дата ( например, 8 мая)
  • необязательное ежемесячное появление (четвертая среда)

И я предполагаю, что нет способа заключить это в одну строку, верно? Например, предприятие, открытое каждый будний день, будет иметь пять записей.

И конечная цель - иметь возможность выполнить относительно элегантный запрос, который мог бы найти все записи событий, которые содержат данный момент в своем временном интервале.

7
задан Zando 14 January 2012 в 16:23
поделиться