Што было б лепшай схема табліцы для захоўвання значэнняў для розных дзён тыдня?

У мяне ёсць сайт, дзе вы можаце выбраць часовы інтэрвал праз выпадальны спіс. Элементы ў расчыняецца спісе будзе нешта накшталт:

  • 6-й раніцы - 10 раніцы
  • 10 раніцы - 1 вечара
  • 1 вечара - 4 вечара

я захоўваць гэта ў табліцы базы дадзеных з 2-ма калонамі. Id і апісанне. (Так што я проста захоўваць радок «6am - 10AM» у поле VARCHAR)

Зараз трэба дадаць DatePicker, так што карыстальнік можа выбраць дату і часовай інтэрвал. Я атрымаў DatePicker ўсе правадныя і потым я зразумеў, што ў мяне ёсць новае патрабаванне:

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

  • 6-й раніцы - 10 раніцы
  • 10 раніцы - 1 вечара
  • 1 вечара - 4 вечара

але калі б гэта была субота, гэта можа быць:

  • 6 раніцы - 8 раніцы
  • 8 раніцы - 12 вечара
  • 1 вечара - 2 вечара

Я спрабую высветліць, якія новыя табліцы мне трэба захоўваць гэтую інфармацыю. Мае першыя думкі былі.

  1. Не ствараць новыя табліцы, але проста дадаць дадатковае поле, званае DayOfWeek і калі мне трэба, каб загрузіць мой выпадальны спіс я запыт на аснове бягучага дня тыдня і толькі Pickout часовых інтэрвалаў

  2. Стварыць новую табліцу, каб паспрабаваць далучыцца дні тыдня з часовымі інтэрваламі, каб ён больш нармалізуецца.

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

1
Я думаю, што нармалізацыя трохі залішнім, паколькі гэтыя табліцы настолькі малыя (і, верагодна, не растуць вельмі вялікі)
дададзена аўтар flipchart, крыніца

1 адказы

Option 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)
     або
     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 і коды выкліку, але ў другім вы не робіце?

Пераход з другім растворам.

1
дададзена
ацаніць вашу кропку, але я спрабую высветліць, як я хацеў бы атрымаць тып. Я павінен быў бы нейкі іншы стол, які будзе мець TypeId і TypeName (прыклад радка будзе MF і 1 ці нешта падобнае. Пытанне заключаецца ў тым, што я па-ранейшаму неабходна, каб высветліць, як я магу ўзяць ўласцівасць DateTime і пераўтварыць яго ў тып для затым атрымаць спіс часавых інтэрвалаў. Зараз я думаю, што я на самой справе трэба захоўваць DayOfWeek як цэлае для гэтага пошуку ..thoughts?
дададзена аўтар leora, крыніца
я ведаю, але я да гэтага часу не разумею, як гэта было б перавесці на калонку тыпу пералічаных вышэй. Калі яго чацвер я павінен атрымаць спісы гадзін у чацвер> Як я магу атрымаць з чацвярга да Тып = 2?
дададзена аўтар leora, крыніца
@leora адлюстраванне DayOfWeek супраць Weekend, не павiнна быць часткай структуры дадзеных. Гэта павінна быць зроблена ў любы захоўваемай працэдуры або ў кодзе кліента. Практычна кожны дэцыбел і мова падтрымлівае вызначэння таго, што. Напрыклад stackoverflow.com/questions/4791153/…
дададзена аўтар Conrad Frix, крыніца