Аптаның әр күндері мәндерді сақтауға арналған ең жақсы кесте схемасы қандай болады?

Менде уақытша бөлімді таңдайтын терезе арқылы таңдай алатын веб-сайт бар. Ашылмалы терезеде элементтер келесідей:

  • 6AM - 10AM
  • 10AM - 1PM
  • 1PM - 4PM

Мен мұны дерекқор кестесінде 2 бағанмен сақтаймын. Id және Сипаттама. (мен жай ғана вархар өрісінде «6AM - 10AM» жолын сақтаймын)

Енді пайдаланушыға күні мен уақытша бөлігін таңдауға мүмкіндік беретін күн пішімін қосу керек. Менде барлық уақытта сымды болдым, содан кейін жаңа талаптарым бар екенін түсіндім:

Мен күннің уақытына қарай әртүрлі уақыт белдеуін қолдауға тиіспін. Мысалға, егер бұл жұма болса, ол:

  • 6AM - 10AM
  • 10AM - 1PM
  • 1PM - 4PM

бірақ егер сенбі болатын болса, ол:

  • 6AM - 8AM
  • 8AM - 12PM
  • 1PM - 2PM

Мен бұл ақпаратты сақтауға қандай жаңа кестелерді анықтау керектігін түсінемін. Менің алғашқы ойларым болды.

  1. Жаңа кестелер жасамаңыз, бірақ DayOfWeek деп аталатын қосымша өрісті қарапайым түрде қосыңыз және аптаның ағымдағы күніне негізделген менің ашылмалы сұранысты жүктеп алу керек болғанда және таңдау уақыттары ғана

  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
қосылды
Сіздің ұпайыңызды жоғары бағалаңыз, бірақ мен TYP қалай аламын деп ойлаймын. Менде TypeId және TypeName болатындай басқа кесте қажет (мысалы, MF және 1 немесе сол сияқты) Мәселе мынада, мен әлі де DateTime сипатын қалай ала аламын және оны Түрге содан кейін уақытша кестелердің тізімін шығарыңыз.Қазіргі күнде бұл іздеуді бүтін сан ретінде DayOfWeek сақтау керек деп ойлаймын.
қосылды автор leora, көзі
Мен білемін, бірақ жоғарыда аталған Түрі бағанын қалай аударатынын түсінбеймін. Егер оның бейсенбі бейсенбіге арналған сағаттар тізімін шығарып алу керек болса> Бейсенбіден Type = 2-ге қалай кіруге болады?
қосылды автор leora, көзі
DayOfWeek vs Weekend-ні салыстыру деректер құрылымының бөлігі болмауы керек. Мұны сақталатын рәсімде немесе клиенттің кодынан жасау керек. Әрбір db және тілде бұл анықтайды. Мысалы, stackoverflow.com/questions/400421/… немесе stackoverflow.com/questions/4791153/…
қосылды автор Conrad Frix, көзі