Расчетные часы работы таблицы SQL - PullRequest
7 голосов
/ 01 сентября 2011

Я разрабатываю таблицу SQL для хранения часов работы магазинов.

В некоторых магазинах часы очень простые: с понедельника по воскресенье с 9:30 до 10:00.

Другие немного сложнее. Пожалуйста, рассмотрите следующий сценарий:

Monday:  Open All Day
Tuesday: 7:30AM – 2:30PM & 4:15PM – 11:00 PM 
Wednesday: 7:00PM – 12:30 AM (technically closing on Thursday morning)
Thursday: 9:00AM – 6:00PM
Friday: closed.

Как бы вы разработали таблицы?

EDIT

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

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

Часы работы магазина не будут меняться от недели к неделе.

Ответы [ 3 ]

7 голосов
/ 01 сентября 2011

Такая таблица будет удобна как для вывода, который вы опубликовали, так и для небольшого выстрела (открыто? Да / нет):

Store | Day | Open | Closed
---------------------------
1     | 1   | 0000 | 2400
1     | 2   | 0730 | 1430
1     | 2   | 1615 | 2300
...

Особенности:

  1. Использование 24-часового режима необязательно, но упрощает математику.
  2. Идентификатор магазина предположительно присоединится к таблице поиска, где вы сохранили информацию о хранилище
  3. Идентификатор дня будет переводиться в деньнеделя (1 = воскресенье, 2 = понедельник и т. д.)

Чтобы запросить набор данных, просто: SELECT Day, Open, Close... (очевидно, вы захотите отформатировать Open / Close)

Чтобы запросить IsOpen ?, просто:

SELECT CASE WHEN @desiredtime BETWEEN Open AND Closed THEN 1 ELSE 0 END 
FROM table 
WHERE store = @Store
3 голосов
/ 01 сентября 2011

Думайте об этом больше как об определении временных рамок, дни / недели более сложны, потому что у них есть правила и определенные начальные и конечные точки.

Как бы вы определили временные рамки?

одно ограничение (начало [Время и день]) , одно указание «Продолжительность» (часы, минуты, ... издиапазон) *.Теперь смены (временные рамки) могут занимать несколько дней, и вам не нужно работать со сложной логикой для извлечения и использования данных в расчетах.

**Store_Hours**

Store | Day | Open | DURATION
---------------------------
1     | 1   | 0000 | 24
1     | 2   | 0730 | 7
1     | 2   | 1615 | 6.75
... 
1     | 3   | 1900 | 5.5
2 голосов
/ 01 сентября 2011

Нужно ли вам делать больше, чем просто хранить и отображать его?

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

А как насчет исключений в праздничные дни?

Я бы посоветовал хранить их как интервалы, основанные на базовом времени (минуты с момента 0 на неделе).

Таким образом, 0 - полночь понедельника.

Интервал 1 будет 0 - 1440

Интервал 2 будет 1890 - 2310

и т. Д.

Вы можете легко преобразовать выбранное пользователем время в минутное смещение и определить, открыт ли магазин.

Ваша единственная оставшаяся проблема - это интерпретация на дисплее для удобного отображения (возможно, некоторая обширная логика, ноне невозможно) и перекрываются во время 10080 -> 0.

...