Оптимальный дизайн для базы данных с повторяющимся событием - PullRequest
4 голосов
/ 08 января 2011

Я хочу создать приложение php calender.Каков оптимальный дизайн базы данных для этого программного обеспечения, если я хочу создавать обычные, еженедельные, ежемесячные и ежегодные мероприятия.

Ответы [ 2 ]

4 голосов
/ 08 января 2011

Я бы просто создал запись для каждого повторения события на некотором горизонте.Однако это означает, что вам понадобится еще одна таблица, которую вы можете использовать для проецирования дат, если они сканируют дату вашего горизонта.То есть вам понадобится таблица событий, которая содержит одну запись для каждого повторения события (1 января, 8 января, 15 января, ... по декабрь) и таблицу с каждой записью, доступной для заполнения будущих лет (началодата: 1 января; повторение: 7; до: 2011), так что в начале 2012 года (или как только пользователь запросит просмотр месяца 2012+) вы сможете генерировать будущие события.

Этоимеет два больших недостатка:

  1. В вашей базе данных есть данные за полный год.Однако, если добавление данных за полный год ухудшит вашу производительность, ваша система, вероятно, будет недостаточно мощной.(Кажется, требуется, чтобы приложение календаря могло обрабатывать даты на многие годы)
  2. В конце горизонта событий вам нужно сгенерировать будущие даты для повторяющихся событий.

Преимущества (IMO), которые перевешивают недостатки:

  1. Упрощенная математика при отображении календаря.Используя метод Тима, описанный выше, если пользователь загружает 18 декабря 2011 года, как вы будете рассчитывать, какие повторяющиеся события следует размещать в этот день?Вы будете вынуждены циклически проходить КАЖДЫЕ повторяющиеся события каждый раз, когда отображаете дату.Компромиссом является недостаток № 1, который, я думаю, является лучшим решением, когда необходимо повторить эти вычисления.
  2. Вы можете редактировать определенные экземпляры события.Используя метод Тима, если встреча произошла в праздничный день и пользователь изменил ее на предыдущий день, как бы вы это сделали?Используя метод «одна запись на событие», описанный здесь, вы можете просто изменить эту запись для события, легко перемещая отдельные события в календаре.
0 голосов
/ 08 января 2011

В таблице EVENT может быть столбец для RECURRENCE_STATUS, который отслеживает 4 значения, не повторяется, еженедельно, ежемесячно, ежегодно.Запрос событий дня будет представлять собой объединение событий, которые должны произойти в этот день и которые не повторяются с набором событий, которые повторяются, и чья начальная дата отличается от сегодняшнего дня по модулю 0 для недели, месяца игод разницы.Математические вычисления даты немного больше нюансов, чем это (из-за различного количества дней в месяце), но структура должна быть достаточной.

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