我有一个事件列表,希望将其开始和结束时间存储在SQL数据库中。的问题是,有些事件只发生在一天内,而其他事件则发生在多天内。有时这些事件每天只发生一次,而其他事件则发生多次(请参阅下面的示例以了解更多信息)。
如何设置我的Events
表以有效地存储开始和结束日期和时间的所有版本
需要存储在表中的示例数据:
Event Name | # of Participants | Times and Dates
==========================================================================================================
Three-legged-race | 14 | 08:00 - 09:30 on Mar 23
------------------------------------------------------------------------------------------------------
Pie/Hot Dog Eating Contests | 9 | 12:00 - 14:00 and
| | 15:30 - 17:30 on Mar 23
------------------------------------------------------------------------------------------------------
Decathlon | 37 | 10:00 - 14:00 on Mar 23
| | 11:00 - 16:00 on Mar 24
------------------------------------------------------------------------------------------------------
Daily Opening/Closing Ceremonies | 100 | 07:50 - 08:00 and
| | 17:30 - 17:40 on Mar 23
| | 07:50 - 08:00 and
| | 17:30 - 17:40 on Mar 24
顺便说一句,如果有必要,我可以将日期和时间存储为Unix Datetimes,但如果有必要的话,我更愿意单独存储值(以便以后更容易访问/隔离/使用)。
编辑:
我忘了补充一点,我希望解决方案能够单独包含在一个表中。我不想使用SQL joins
或foreign keys
来组合多个表(如Events
表和EventsTime
表)。
编辑#2:
我希望只有两列左右(而不是start_datetime1
、end_datetime1
、start_datetime2
、end_datetime2
等)
是否创建EventTime表?它得出了类似于以下的结论(想法):
EventTime (id, event_id, start_datetime, end_datetime)
这样你就可以有多个event_id了。这没有问题,你可以用你描述的任何格式(多天、一天等)
通常,您的选择是:
1) 同一行中的开始日期/时间(以及可能的结束日期/日期时间)
或
2) 每个时隙的单独行(以及唯一的"事件id")
根据你所说的,你可能想要选项2。
3) 我更大胆地说,也许"时间段"应该是它自己的、独立的表(以"事件id"作为外键)。