Mysql (+ php) Правильный подход к хранению, извлечению и отображению диапазонов дат

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

Теперь мой вопрос: что из следующего является правильным подходом? Есть ли еще лучший подход?

1) используйте 2 таблицы, events и events_days и сохраняйте дни каждого события в таблице event_days

2) используйте только одну таблицу с событиями, хранящимися в поле date_from и date_to, и каждый раз генерируйте с помощью mysql и php список дней для нужного диапазона с событиями

Очевидно, что первый вариант потребует гораздо больше памяти в БД, тогда как второй вариант потребует от сервера большей работы по генерации списка (каждый раз, когда пользователь запрашивает его).

Хранение БД не должно быть проблемой на данный момент, но я не знаю, будет ли то же самое в будущем. И я боюсь, что второй вариант потребует слишком много ресурсов.

1

Решение

Я использовал оба подхода. Вот список плюсов и минусов, которые я заметил:


Два стола: 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)

Минусы:

  • Запрос, чтобы проверить, есть ли события на определенную дату или между указанными датами сложно.
  • Запрос выбора списка дат для события сложно.

Плюсы:

  • Вставить событие тривиально
  • Эта структура подходит в ситуациях, когда вовлекается время
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector