如何设置SQL表来高效、轻松地存储单个事件的多个日期和时间


How do I set up an SQL table to efficiently and easily store multiple dates and times for single events?

我有一个事件列表,希望将其开始和结束时间存储在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 joinsforeign keys来组合多个表(如Events表和EventsTime表)。

编辑#2:

我希望只有两列左右(而不是start_datetime1end_datetime1start_datetime2end_datetime2等)

是否创建EventTime表?它得出了类似于以下的结论(想法):

EventTime (id, event_id, start_datetime, end_datetime)

这样你就可以有多个event_id了。这没有问题,你可以用你描述的任何格式(多天、一天等)

一个选项是为日期创建一个单独的表。然后,事件和日期之间就有了一对多的关系。您的日期表将引用事件的id。然后,您可以通过搜索给定事件的关键字来获取该事件的所有日期。

通常,您的选择是:

1) 同一行中的开始日期/时间(以及可能的结束日期/日期时间)

2) 每个时隙的单独行(以及唯一的"事件id")

根据你所说的,你可能想要选项2。

3) 我更大胆地说,也许"时间段"应该是它自己的、独立的表(以"事件id"作为外键)。