SQL для часов работы - PullRequest
       11

SQL для часов работы

18 голосов
/ 27 апреля 2010

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

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

Ответы [ 2 ]

33 голосов
/ 27 апреля 2010

создайте другую таблицу, назовите ее schedules, добавьте внешний ключ к первичному ключу таблицы shops, поле Day of week, 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

Это даст вам возможность создавать любые расписания с любым количеством окон и с любым количеством исключений. Он универсален, ограничен только тем, что ожидает, что все недели будут одинаковыми. Не учитываются праздничные дни и нечетные / четные недели, которые кто-то может использовать.

Edit:
На вопрос Жюльена о рабочих часах ночного бизнеса я обратил внимание, что предыдущее решение далеко не самое лучшее. Нельзя открывать бар в 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
5 голосов
/ 27 апреля 2010

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...