В моей базе данных магазинов у меня должны быть часы работы. У Вас есть идея, как я могу реализовать это в своем дБ?
Часы работы с понедельника по воскресенье, каждый день может иметь 2 вводных окна (исключая 09:00-12:00, 16:00-19:00)
создайте другую таблицу, назовите ее расписания
, добавьте внешний ключ в первичный ключ таблицы магазинов
, Поле дня недели
, time_open
, time_closed
.
Данные должны выглядеть примерно так:
shop_id day_of_week time_open time_closed
1 1 09:00 12:00
1 1 16:00 19:00
1 2 09:00 12:00
1 2 16:00 19:00
1 3 09:00 12:00
1 3 16:00 19:00
1 6 10:00 14:00
2 1 09:00 12:00
2 1 13:00 18:00
Это даст вам возможность создавайте любые расписания, с любым количеством окон и с тем количеством исключений, которое вам нужно. Он универсален, ограничен только тем, что предполагает, что все недели будут идентичными. Не учитываются праздники или графики нечетной / четной недели, которые кто-то может использовать.
Редактировать:
В связи с вопросом Жюльена о рабочих часах ночного бизнеса я обратил внимание на то, что предыдущее решение далеко не самое лучшее. Вы не можете открыть бар в 20:00, закрыть в 06:00 и сравнить, находится ли текущее время (02:45) внутри этого интервала, потому что его не будет. Поэтому удобнее всего будет регистрировать не время закрытия, а общее рабочее время в удобных единицах измерения (например, в минутах).
shop_id day_of_week time_open working_time
1 1 09:00 180
1 1 16:00 180
1 2 09:00 180
1 2 16:00 180
1 3 09:00 180
1 3 16:00 180
1 6 10:00 240
2 1 09:00 180
2 1 13:00 300
Какой тип базы данных вы используете? Если это mysql, введите поле типа «время».Затем вы можете скоротать время и выполнять с ними базовые манипуляции с sql time. Весь этот пост предполагает использование mysql.
Если есть только один магазин и вы знаете, что он никогда не будет расти, просто создайте таблицу с именем times, в которой вы сохраните время открытия магазина. Затем, если вы хотите узнать, открыт ли магазин, просто сравните текущее время с одним из диапазонов в базе данных.
Если существует более одного хранилища, создайте таблицу с именем «раз» и таблицу с именем «хранилища». В таблице умножения столбцы могут быть «открытыми» и «закрытыми» с идентификатором «store_id». Для таблицы магазинов тоже нужен идентификатор. Затем вы можете просто сказать:
"SELECT open, close FROM times WHERE store_id=x"
Это даст вам ВСЕ временные диапазоны, связанные с конкретным магазином.