Как настроить таблицу SQL, чтобы эффективно и легко хранить несколько дат и времени для отдельных событий? - PullRequest
0 голосов
/ 23 марта 2012

У меня есть список событий, для которых я хочу сохранить время начала и окончания в базе данных 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, если это необходимо, но я бы предпочел хранить значение по отдельности, если это необходимо (для упрощения доступа / изоляции / использования в дальнейшем).

Edit:

Я забыл добавить, что хотел бы, чтобы решение содержалось в одной таблице. Я не хочу использовать SQL joins или foreign keys для объединения нескольких таблиц (например, таблица Events с таблицей EventsTime).

Редактировать # 2:

... и я надеялся только на два или около того столбца (не start_datetime1, end_datetime1, start_datetime2, end_datetime2 и т. Д.).

Ответы [ 3 ]

2 голосов
/ 23 марта 2012

Один из вариантов - создать отдельную таблицу для дат.Тогда у вас есть отношения один ко многим между событиями и датами.Ваша таблица дат будет иметь ссылку на идентификатор события.Затем вы можете получить все даты для данного события путем поиска ключа события.

2 голосов
/ 23 марта 2012

Создать таблицу EventTime?Что относится к чему-то похожему ниже (идея):

EventTime (id, event_id, start_datetime, end_datetime)

Таким образом, вы можете иметь несколько event_id без проблем, и вы можете иметь его в любом формате, который вы описали (через несколько дней, один день и т.д.)

0 голосов
/ 23 марта 2012

Как правило, вы можете выбрать:

1) либо дату / время начала (и, возможно, время окончания / даты) в той же строке

... или ...

2) отдельные строки для каждого временного интервала (и уникальный «идентификатор события»)

Исходя из того, что вы говорите, вы, вероятно, захотите вариант 2.

3) Я также рискну предположить, что, возможно, «временной интервал» должен быть собственной, отдельной таблицей (с «идентификатором события» в качестве внешнего ключа).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...