|
Как лучше организовать хранение "слотов" расписания?
|
|||
---|---|---|---|
#18+
Всем привет! Как лучше организовать хранение "слотов" расписания? Есть сотрудники, сотрудник оказывает консультации в определённые дни/часы по предварительной записи клиентов. Время на одну консультацию – не более 15 мин. Например, сотрудник Вася с апреля по май консультирует по вторникам и четвергам, а с мая по июль – только по пятницам. Т.е. в разный период – могут быть разные дни недели. По времени консультации – это может быть как диапазон (с 8:00 до 12:00, с шагом в 15 мин.), так и «точечные» приёмы, типа только в 9:15, 13:15 и 16:15. Клиент смотрит онлайн, какие слоты у сотрудника свободны, и записывается к нему. Решение «в лоб» - при создании расписания сразу генерировать все-все слоты и складывать их в БД. Т.е. если Вася принимает с января по май по вторникам в 9:15, то для каждого вторника сохраняем в БД дату/время приёма. Но тогда если Вася работает весь год «по диапазону» - пять дней в неделю с 8:00 до 15:00 (с шагом в 15 мин.), то это получится около тридцати слотов на каждый день, умножаем на кол-во дней в году – что-то больно дохрена, и это только один сотрудник. Зато с таким подходом наверно легко отображать доступные слоты в календаре для клиентов – не нужно никаких преобразований, либо слот есть, либо его нету. Но блин… Как лучше сделать-то?... Кто-нибудь реализовывал подобное? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2024, 14:39 |
|
Как лучше организовать хранение "слотов" расписания?
|
|||
---|---|---|---|
#18+
Всем привет! Как лучше организовать хранение "слотов" расписания? Есть сотрудники, сотрудник оказывает консультации в определённые дни/часы по предварительной записи клиентов. Время на одну консультацию – не более 15 мин. Например, сотрудник Вася с апреля по май консультирует по вторникам и четвергам, а с мая по июль – только по пятницам. Т.е. в разный период – могут быть разные дни недели. По времени консультации – это может быть как диапазон (с 8:00 до 12:00, с шагом в 15 мин.), так и «точечные» приёмы, типа только в 9:15, 13:15 и 16:15. Клиент смотрит онлайн, какие слоты у сотрудника свободны, и записывается к нему. Решение «в лоб» - при создании расписания сразу генерировать все-все слоты и складывать их в БД. Т.е. если Вася принимает с января по май по вторникам в 9:15, то для каждого вторника сохраняем в БД дату/время приёма. Но тогда если Вася работает весь год «по диапазону» - пять дней в неделю с 8:00 до 15:00 (с шагом в 15 мин.), то это получится около тридцати слотов на каждый день, умножаем на кол-во дней в году – что-то больно дохрена, и это только один сотрудник. Зато с таким подходом наверно легко отображать доступные слоты в календаре для клиентов – не нужно никаких преобразований, либо слот есть, либо его нету. Но блин… Как лучше сделать-то?... Кто-нибудь реализовывал подобное? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2024, 14:42 |
|
Как лучше организовать хранение "слотов" расписания?
|
|||
---|---|---|---|
#18+
Если известено расписание свободных слотов, то можно хранить только занятые слоты для каждого сотрудника. Если слот в базе отсутствует, то приложение отображает этот слот как свободный(хранить в базе его необязательно). Если у Васи в течение года поплывёт расписание, то придётся менять алгоритм работы системы, чтобы она отображала свободные слоты в соответствии с расписанием. Например, конфигом. И лучше чтобы Вася или его референт сам задавал своё расписание на полгода вперёд, учитывая отпуска. Другой вариант -- есть таблица юзеров (Вася, Петя, ..) и есть одна таблица слотов (всевозможных). Можно создать что-то вроде маппинга между ними, что-то типа Слот_ID <--> User_ID. Айдишки не займут столько места, как куча слотов на каждого юзера. В этом мапинге можно опять же хранить либо только занятые слоты(но тогда надо определять дополнительно возможные часы присутствия Васей, чтобы посетители не выбирали слоты в нерабочие для Васи часы), либо всевозможные слоты по каждому конкретному юзеру, обновляя статус слота (Занят/Свободен). ... |
|||
:
Изменено: 27.03.2024, 15:03 - Кусь
Нравится:
Не нравится:
|
|||
27.03.2024, 14:55 |
|
Как лучше организовать хранение "слотов" расписания?
|
|||
---|---|---|---|
#18+
Расписание меняется постоянно, и у каждого сотрудника оно может быть своё, отличающееся от остальных. Единственное что не меняется - это что каждый слот "кратен" 15 минутам, т.е. время всегда либо hh:00, hh:15, hh:30, или hh:45 минут. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2024, 15:20 |
|
Как лучше организовать хранение "слотов" расписания?
|
|||
---|---|---|---|
#18+
Но тогда если Вася работает весь год «по диапазону» - пять дней в неделю с 8:00 до 15:00 (с шагом в 15 мин.), то это получится около тридцати слотов на каждый день, умножаем на кол-во дней в году – что-то больно дохрена, и это только один сотрудник. Это немного. Но блин… Как лучше сделать-то?... Но я бы ввёл типы занятости, то есть работа по отдельным приёмам и работа в диапазоне. В диапазоне не надо хранить пустые слоты, только занятые. При этом расчёт доступности слотов не будет жёстко привязан к 15 минутам, а его можно задавать настройкой, которая будет храниться в БД и может зависеть от сезона, например. Недостаток в этом только один, нужно разобраться в построении запроса для генерации слотов на лету. Главным же преимуществом будет то, что в случае изменения времени длительности приёма не придётся пересчитывать ранее созданный график. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2024, 09:38 |
|
Как лучше организовать хранение "слотов" расписания?
|
|||
---|---|---|---|
#18+
Кто-нибудь реализовывал подобное? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2024, 09:39 |
|
Как лучше организовать хранение "слотов" расписания?
|
|||
---|---|---|---|
#18+
В общем пока сделал так, посмотрим как оно всё будет ворочаться:
Решение «в лоб» - при создании расписания сразу генерировать все-все слоты и складывать их в БД. Т.е. если Вася принимает с января по май по вторникам в 9:15, то для каждого вторника сохраняем в БД дату/время приёма. Но тогда если Вася работает весь год «по диапазону» - пять дней в неделю с 8:00 до 15:00 (с шагом в 15 мин.), то это получится около тридцати слотов на каждый день, умножаем на кол-во дней в году – что-то больно дохрена, и это только один сотрудник. Зато с таким подходом наверно легко отображать доступные слоты в календаре для клиентов – не нужно никаких преобразований, либо слот есть, либо его нету. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2024, 10:45 |
|
|
start [/forum/topic.php?fid=32&tid=16737]: |
0ms |
get settings: |
22ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
37ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
475ms |
get tp. blocked users: |
3ms |
others: | 31ms |
total: | 593ms |
0 / 0 |