Генерация всех возможных повторений события (теоретически) заполнит ваше хранилище событиями, которые, скорее всего, никогда не будут видны пользователю (поздравляю вас с 999 999 999 999 999 999 999-й годовщиной!).
Требуется немного больше работы, но решение состоит в том, чтобы в основном хранить таблицу (или таблицы) правил повторения, с которыми вы связываете записи календаря при создании календаря:
"длякаждый день отображаемой недели проверять события, которые повторяются в эти дни "" для каждой недели показанного месяца, проверять события, которые повторяются в эти недели "" для каждого месяца в году "и т. д.
Сколько из этих проверок вам нужно сделать, зависит от того, сколько типов (и длительности) повторений вы бы хотели.
Что касается подавляющих событий, это еще одна таблица, в которой перечислены точки на даты /времена, которые должны быть подавлены.«если показаны понедельники, показать все события, которые повторяются по месяцам, кроме тех, которые перечислены в таблице подавления»
Комментарий:
Ну, у вас будет стандартная таблица записей календаря, чтобыхранить основную информацию.дата / время и т. д. Затем как минимум две другие таблицы для хранения повторяющейся информации.Тот, который хранит ваши правила повторения.«каждый понедельник», «первый день месяца», «каждый год» и т. д., а также третья таблица, которая связывает записи календаря и правила
так:
calendar entries table <---> link table <---> repeat rules table
Запросы будут заключаться в построении вещей таким образом, чтобы на указанную вами дату выходили соответствующие правила и давали идентификаторы записей календаря для отображения.Может показаться уродливым, если вы сделаете необычный запрос, который динамически связывается с соответствующими правилами на основе даты, которую вы прошли.