Я хочу создать приложение календаря php. Каков оптимальный дизайн базы данных для этого программного обеспечения, если я хочу создавать обычные, еженедельные, ежемесячные и ежегодные события.
Я бы просто создал запись для каждого повторения события, на каком-то горизонте. Однако это означает, что вам понадобится другая таблица, которую вы можете использовать для проецирования дат, если они сканируют вашу дату горизонта. То есть вам понадобится таблица событий, которая содержит одну запись для каждого события повторного события (1 января, 8 января, 15 января, … до декабря) и таблицу с каждой записью, доступной для будущих лет (начало дата: 1 января, повторение: 7; через: 2011), так что в начале 2012 года (или как только пользователь запросит представление о месяце 2012+) вы сможете генерировать будущие события.
Это имеет два больших недостатка:
Преимущества (ИМО), которые перевешивают недостатки:
У вас может быть столбец в таблице EVENT для RECURRENCE_STATUS, который отслеживает 4 значения, не повторяется, еженедельно, ежемесячно, ежегодно. Запрос событий дня будет объединением тех, которые установлены в этот день и которые не повторяются с набором тех, которые повторяются и чья первоначальная разница в дате с сегодняшнего дня является модулем 0 для недели, месяца и год различий. Расчеты по дате-математике немного более тонкие, чем это (из-за различного количества дней в месяце), но структура должна быть достаточной.