Как сохранить повторяющееся временное окно - PullRequest
4 голосов
/ 11 октября 2008

Каков предпочтительный способ хранения повторяющихся временных окон?
Например. Если у меня есть система календаря, где я должен быть в состоянии проводить ежедневные, еженедельные или ежемесячные повторяющиеся события, какая система управления временем лучше

Как это лучше всего представлено в базе данных?

Подробнее
Конкретная цель этого заключается в предоставлении наборов открытых временных окон. Когда у нас есть эти временные окна, код должен проверить, попадает ли сообщение, поступающее в систему, в одно из временных окон.

Ответы [ 2 ]

1 голос
/ 12 июня 2009

Это долго откладывается, но после долгих испытаний и множества болей в душе мы выбрали определенную схему, чтобы заставить это работать. Для нужд нашей системы, мы обязаны повторяться только еженедельно, если вообще. Конечный продукт будет разработан как таковой.

Вот схема БД

id : int(10)
window_name : varchar(100)
start_date : datetime
end_date : datetime
start_time : time
duration : int(10)
timezone: varchar(100)
monday : tinyint(1)
tuesday : tinyint(1)
...
sunday : tinyint(1)
  1. Каждое «окно» времени будет иметь установленную дату начала, дату окончания, время начала и продолжительность.
  2. Окно откроется в дату и время начала и будет работать в течение «длительности» секунд
  3. Окно откроется только в указанные дни недели

Это единственная система, которая позволяла бы окнам открываться и закрываться на регулярной основе еженедельно, а также иметь окна, которые будут открываться на следующее утро. Я уверен, что существуют более сложные системы, которые выполняют повторяющиеся окна, но мы искали что-то гибкое и быстрое, и нам не требовались ежемесячные повторяющиеся события или ежегодные события.

1 голос
/ 11 октября 2008

Я бы создал таблицу RecurrenceType, в которой будут храниться записи для каждого типа повторения, поддерживаемого вашей календарной системой. Каждое событие в таблице CalendarEvents будет иметь ссылку на идентификатор в таблице RecurrenceType.

Я бы тогда имел в коде объект RecurrenceRules, который содержал бы бизнес-логику вычисления, когда следующей дате будет присвоена текущая или начальная дата, или получения следующих N дат в виде массива.

Большая часть логики повторения, вероятно, должна быть закодирована из перечисленных значений, которые основаны на идентификаторе таблицы RecurrenceType. Я был бы удивлен, если бы вы могли сделать все это управляемым данными, если бы это не была очень простая календарная система.

Надеюсь, это поможет. Звучит как интересный проект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...