Какова будет оптимальная структура для фиксированного графика доступности? - PullRequest
0 голосов
/ 17 декабря 2018

Я настраиваю календарь, в котором пользователи могут указывать, когда они доступны.Календарь разделен на 3 временных интервала в день, по 7 дней в неделю (понедельник-утро, понедельник-день, понедельник-вечер).

Я немного застрял в том, как лучше всего сохранить это в моей базе данных.Я думал о том, чтобы сделать:

start_date

end_date

user_id

или

временной интервал

user_id

или

user_id & mon1 mon2 mon3 ... sun3 создание 21столбцы не кажутся оптимальными, но это делает запрос доступности очень простым.

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

В конце я должен иметь возможность посмотреть, кто доступен в 2019-02-01 13:00:00 - 2019-02-01 17:15:00.Эти даты не будут соответствовать временным интервалам.

1 Ответ

0 голосов
/ 17 декабря 2018

Вы можете использовать 3 поля для хранения этой информации,

slot_date - to store date of slot like 2018-12-17, 2018-12-18, etc
slot_time - to store time slot like 13:00:00, 15:00:00, etc
user_id - to store user identifier

Допустим, ваши примерные данные для 2 пользователей с этими полями будут выглядеть примерно так:

slot_date    slot_time    user_id
---------------------------------
2018-12-17    14:00:00      1
2018-12-17    17:00:00      2

Вы можетелегко получить доступность пользователей для данного временного интервала.Например, вы хотите получить текущую доступность для дневного слота (учитывая, что с 13 до 16 часов - это вечерний слот), который можно получить по следующему запросу:

SELECT slot_date, slot_time, user_id
FROM tbl_slot 
WHERE slot_date = '2018-12-17'
AND slot_time BETWEEN '13:00:00' AND '15:00:00'

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

Обновление

На основании требования OP, если пользователь выбирает день и слот, он будет применим длякаждый месяц / год.Исходя из этого, вы исключаете столбец slot_date и используете day_of_week, в котором будут храниться целочисленные значения от 1 до 7, т.е.будет,

SELECT day_of_week, slot_time, user_id
FROM tbl_slot 
WHERE day_of_week = '2'
AND slot_time BETWEEN '13:00:00' AND '15:00:00'
...