用于存储一周中不同日期值的最佳表模式是什么?

时间:2011-10-28 03:52:46

标签: database-design database-schema

我有一个网站,您可以通过下拉框选择时间段。下拉框中的项目类似于:

  • 早上6点 - 上午10点
  • 上午10点 - 下午1点
  • 下午1点 - 下午4点

我将它存储在一个包含2列的数据库表中。 ID和说明。 (所以我只是将字符串“6AM - 10AM”存储在varchar字段中)

我现在需要添加一个日期选择器,以便用户可以选择日期和时间段。我有一个日期选择器全部接线,然后我意识到我有一个新的要求:

我需要支持一组不同的时间段,具体取决于当天。例如,如果是星期五,可能是:

  • 早上6点 - 上午10点
  • 上午10点 - 下午1点
  • 下午1点 - 下午4点

但如果是星期六,可能是:

  • 早上6点 - 早上8点
  • 上午8点 - 下午12点
  • 下午1点 - 下午2点

我正在试图弄清楚我需要哪些新表来存储这些信息。我最初的想法是。

  1. 不要创建任何新表,只需添加一个名为DayOfWeek的额外字段,当我需要加载我的下拉列表时,我会根据当前的当天和查询时间点查询

  2. 创建新表格以尝试加入星期几和时段,以使其更加规范化。

  3. 我想知道人们是否有关于存储此信息的理想数据库表设计的反馈。

1 个答案:

答案 0 :(得分:1)

选项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和调用代码,但在第二个解决方案中,您不需要?

使用第二种解决方案。