Какова лучшая схема базы данных для календаря доступности, который позволяет планировать встречи (повторяющиеся и одиночные)) - PullRequest
8 голосов
/ 04 октября 2011

В моем приложении у меня есть провайдер, у которого есть расписание, и клиенты, которые записываются на прием по расписанию. Мне нужны следующие функции.

Поставщик: - Уметь указывать повторяющуюся доступность. Например пн 9-5, вт 10-3 и т. Д. - Уметь отключать данные. Например - не доступно в этот понедельник. - Уметь добавлять отдельные, не повторяющиеся слоты даты / времени. Например - Это Сб 9-5.

Клиент: - Уметь бронировать отдельные встречи. - Уметь бронировать повторяющиеся встречи. (Каждый понедельник 9-4).

Пока я придумал 3 варианта:

  1. Разделите расписание на 30-минутные интервалы и создайте запись базы данных для каждой пары интервал / поставщик. Каждый интервал может быть либо бесплатным, либо забронированным. Когда клиент записывается на прием, мы отмечаем интервалы как забронированные. Проблема этого подхода в том, что он тратит много места, и я не уверен, насколько хороши результаты поиска для повторяющегося бронирования.
  2. Сохранить каждый период доступности как «событие». Если это повторяется, продублируйте событие. При поиске свободных слотов ищите в таблице бронирования, чтобы убедиться в отсутствии перехлестывающего бронирования. В этом случае поиск повторяющихся слотов кажется немного неловким. Чтобы найти всех провайдеров, которые будут доступны в понедельник 9-5 на следующий год, нам нужно будет найти все подходящие «события» и найти всех провайдеров, которые имеют 52 сопоставленных события.
  3. Сохранить каждый период доступности как «событие». Добавьте флаг, если он повторяется. При поиске свободных слотов ищите в таблице бронирования, чтобы убедиться в отсутствии пересекающегося бронирования. Это облегчает поиск повторяющихся встреч. Чтобы «отключить» слот, который, как предполагается, повторяется, мы можем просто вставить поддельное бронирование.

1 Ответ

6 голосов
/ 01 марта 2012

1.Создайте таблицу событий:

a) С основными столбцами eventdate, starttime, endtime, с другими деталями для события - это времена занятости, которые вы блокируете в календаре

b) Повторяющиеся события - добавить столбцы: - isrecurring - по умолчанию 0 - тип повторения (ежедневно, еженедельно, ежемесячно) - recurevery (счетчик, когда произойдет повторение) - понедельник, вторник, четверг, четверг, sat, sun - дни недели для еженедельного повторения - месяц и dayofmonth - для ежемесячного повторения

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

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

...