#database #timezone
Вопрос:
Каков предпочтительный способ хранения повторяющихся временных окон?
Например. Если у меня есть система календаря, в которой мне нужно иметь возможность размещать ежедневные, еженедельные или ежемесячные повторяющиеся события, какая система управления временем лучше всего подходит?
Как это лучше всего представлено в базе данных?
Более Подробная Информация
Конкретная цель этого состоит в том, чтобы предоставить наборы открытых временных окон. Как только у нас появятся эти временные окна, код должен проверить, попадает ли сообщение, поступающее в систему, в одно из временных окон.
Ответ №1:
Я бы создал таблицу типов повторений, в которой содержались бы записи для каждого типа повторений, поддерживаемых вашей календарной системой. Каждое событие в таблице CalendarEvents будет иметь ссылку на идентификатор в таблице RecurrenceType.
Затем у меня был бы объект RecurrenceRules в коде, который содержал бы бизнес-логику вычисления того, когда следующей дате будет присвоена текущая или начальная дата, или получения следующих N дат в виде массива.
Большая часть логики повторения, вероятно, должна была бы быть закодирована с перечисленными значениями, которые основаны на идентификаторе таблицы RecurrenceType. Я был бы удивлен, если бы вы могли сделать все это управляемым данными, если бы это не была очень простая система календаря.
Надеюсь, это поможет. Это звучит как интересный проект.
Ответ №2:
Это долго откладывалось, но после долгих испытаний и многих душевных страданий мы решили разработать определенную схему, чтобы это сработало. Для нужд нашей системы от нас требуется повторяться только еженедельно, если это вообще возможно. Конечный продукт будет разработан таким образом.
Вот схема БД
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)
- Каждое «окно» времени будет иметь установленную дату начала, дату окончания, время начала и продолжительность.
- Окно откроется в день и время начала и будет работать в течение «длительных» секунд
- Окно будет открываться только в указанные дни недели
Это единственная система, которая позволяет окнам открываться и закрываться еженедельно, а также иметь окна, которые будут открываться и закрываться на следующее утро. Я уверен, что существуют более сложные системы, которые выполняют повторяющиеся окна, но мы искали что-то гибкое и быстрое, и нам не нужны были ежемесячные повторяющиеся события или ежегодные события.