Я работаю над приложением календаря, где вы можете установить события, которые могут длиться несколько дней. В определенный день может быть несколько событий, уже начатых или начинающих этот день. Пользователь будет просматривать все как календарь.
Теперь мой вопрос: что из следующего является правильным подходом? Есть ли еще лучший подход?
1) используйте 2 таблицы, events и events_days и сохраняйте дни каждого события в таблице event_days
2) используйте только одну таблицу с событиями, хранящимися в поле date_from и date_to, и каждый раз генерируйте с помощью mysql и php список дней для нужного диапазона с событиями
Очевидно, что первый вариант потребует гораздо больше памяти в БД, тогда как второй вариант потребует от сервера большей работы по генерации списка (каждый раз, когда пользователь запрашивает его).
Хранение БД не должно быть проблемой на данный момент, но я не знаю, будет ли то же самое в будущем. И я боюсь, что второй вариант потребует слишком много ресурсов.
Я использовал оба подхода. Вот список плюсов и минусов, которые я заметил:
Два стола: events(id)
а также events_dates(eventid, date)
Плюсы:
SELECT eventid FROM events_dates WHERE date BETWEEN '2015-01-01' AND '2015-01-10'
SELECT date FROM events_dates WHERE eventid = 1
Минусы:
Один стол: events(id, start, end)
Минусы:
Плюсы:
Других решений пока нет …