我有一个网站,您可以通过下拉框选择时间段。下拉框中的项目类似于:
我将它存储在一个包含2列的数据库表中。 ID和说明。 (所以我只是将字符串“6AM - 10AM”存储在varchar字段中)
我现在需要添加一个日期选择器,以便用户可以选择日期和时间段。我有一个日期选择器全部接线,然后我意识到我有一个新的要求:
我需要支持一组不同的时间段,具体取决于当天。例如,如果是星期五,可能是:
但如果是星期六,可能是:
我正在试图弄清楚我需要哪些新表来存储这些信息。我最初的想法是。
不要创建任何新表,只需添加一个名为DayOfWeek的额外字段,当我需要加载我的下拉列表时,我会根据当前的当天和查询时间点查询
创建新表格以尝试加入星期几和时段,以使其更加规范化。
我想知道人们是否有关于存储此信息的理想数据库表设计的反馈。
答案 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和调用代码,但在第二个解决方案中,您不需要?
使用第二种解决方案。