Какова будет лучшая схема таблицы для хранения значений для разных дней недели? - PullRequest
1 голос
/ 28 октября 2011

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

  • 6 утра - 10 утра
  • 10 утра - 1 вечера
  • 13:00 - 16:00 * 1008

Я храню это в таблице базы данных с 2 столбцами. Идентификатор и описание. (поэтому я просто храню строку "6 утра - 10 утра" в поле varchar)

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

Мне нужно поддерживать другой набор временных интервалов в зависимости от дня. Так, например, если это была пятница, это может быть:

  • 6 утра - 10 утра * 018 *
  • 10:00 - 13:00
  • 13:00 - 16:00

но если бы это была суббота, это могло бы быть:

  • 6 утра - 8 утра
  • 8:00 - 12:00
  • 13:00 - 14:00

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

  1. Не создавайте никаких новых таблиц, просто добавьте дополнительное поле с именем DayOfWeek, и когда мне понадобится загрузить выпадающий список, я отправлю запрос на основе текущего дня недели и просто выберу временные интервалы

  2. Создайте новую таблицу, чтобы попытаться объединить дни недели с временными интервалами, чтобы сделать ее более нормализованной.

Я хотел бы узнать, есть ли у людей отзывы о том, что было бы идеальным дизайном таблицы базы данных для хранения этой информации.

1 Ответ

1 голос
/ 28 октября 2011

Опция 1


Допустим, у вас есть эта структура

Hours      |  WeekDay | Weekend
-------------------------------   
6AM - 10AM |     1    |   0
10AM - 1PM |     1    |   0 
1PM - 4PM  |     1    |   0
6AM - 8AM  |     0    |   1
8AM - 12PM |     0    |   1
1PM - 2PM  |     0    |   1

Даже с двумя типами SQL выглядит довольно грязно

Select  Hours 
From
      hoursTable  
Where 
     (weekDay = 1 and {WeekDayParam} = 1)
     or
     weekEnd = 1 and {WeekEndParam} = 1

Вариант 2


Если это выглядит так

Hours      |  Type  
---------------------   
6AM - 10AM |     1 
10AM - 1PM |     1    
1PM - 4PM  |     1 
6AM - 8AM  |     2   
8AM - 12PM |     2   
1PM - 2PM  |     2   

Тогда sql будет намного более простым

 Select  Hours 
 From
      hoursTable  
 Where 
     type = {typeParam}

Как мы справляемся с новыми требованиями


Как насчет того, чтобы добавить другой вариант: праздничные дни

Хотите

Hours        |  WeekDay | Weekend | Holiday 
-----------------------------------------  
6AM - 10AM   |     1    |   0     |  0       
10AM - 1PM   |     1    |   0     |  0
1PM - 4PM    |     1    |   0     |  0
6AM - 8AM    |     0    |   1     |  0
8AM - 12PM   |     0    |   1     |  0
1PM - 2PM    |     0    |   1     |  0
10:30PM  2PM |     0    |   1     |  0

Или

Hours        |  Type  
---------------------   
6AM - 10AM   |     1 
10AM - 1PM   |     1    
1PM - 4PM    |     1 
6AM - 8AM    |     2   
8AM - 12PM   |     2   
1PM - 2PM    |     2   
10:30PM  2PM |     3

Обратите внимание, что в первом решении каждый раз, когда вы получаете новую часовую политику, вам нужно обновить структуру данных sql и вызывающего кода, а во втором - нет?

Переходите ко второму решению.

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