SQL в течение часов работы

В моей базе данных магазинов у меня должны быть часы работы. У Вас есть идея, как я могу реализовать это в своем дБ?

Часы работы с понедельника по воскресенье, каждый день может иметь 2 вводных окна (исключая 09:00-12:00, 16:00-19:00)

18
задан mouthpiec 27 April 2010 в 13:22
поделиться

2 ответа

создайте другую таблицу, назовите ее расписания , добавьте внешний ключ в первичный ключ таблицы магазинов , Поле дня недели , 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
33
ответ дан 30 November 2019 в 07:17
поделиться

Какой тип базы данных вы используете? Если это mysql, введите поле типа «время».Затем вы можете скоротать время и выполнять с ними базовые манипуляции с sql time. Весь этот пост предполагает использование mysql.

Если есть только один магазин и вы знаете, что он никогда не будет расти, просто создайте таблицу с именем times, в которой вы сохраните время открытия магазина. Затем, если вы хотите узнать, открыт ли магазин, просто сравните текущее время с одним из диапазонов в базе данных.

Если существует более одного хранилища, создайте таблицу с именем «раз» и таблицу с именем «хранилища». В таблице умножения столбцы могут быть «открытыми» и «закрытыми» с идентификатором «store_id». Для таблицы магазинов тоже нужен идентификатор. Затем вы можете просто сказать:

"SELECT open, close FROM times WHERE store_id=x"

Это даст вам ВСЕ временные диапазоны, связанные с конкретным магазином.

5
ответ дан 30 November 2019 в 07:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: