Я исследую, как правильно построить систему повторяющихся событий, которая позволит получать «пользовательские» данные для каждого повторяющегося события. Скажем, у меня есть событие, которое я собираюсь повторять каждый четверг. Затем я хочу разрешить пользователям каждого события сообщать, участвуют ли они в этом конкретном событии; приглашать пользователей на определенное событие в повторяющуюся дату; иметь «стену постов» на каждую повторяющуюся дату события и т. д. Или даже сказать, что один из повторяющихся событий будет иметь другое время окончания.
Лучшее, что я нашел на данный момент при создании повторяющихся событий, это: Календарь повторяющихся / повторяющихся событий — лучший способ хранения — конкретно этот ответ: https://stackoverflow.com/a/16659802/2118665
Однако во всех приведенных выше примерах каждое событие сохраняется и имеет одинаковый «event_id» на каждую дату. Это делает более или менее невозможным хранение конкретной информации о событии, скажем, трети повторяющихся событий.
Две таблицы из примера отлично подойдут для заполнения календаря и обработки повторяющихся событий.
Events Table
ID NAME
1 Sample Event
2 Another Event
Events Meta Table
ID event_id meta_key meta_value start_time end_time
1 1 repeat_start 1299132000 5:00 pm 7:00 pm
2 1 repeat_interval_1 432000
Я добавил время начала и окончания таблицы из примера.
Что вам нужно, это еще один стол для обработки участников в определенные дни. Я бы использовал event_id и date_time в качестве составного ключа, чтобы повторное использование одного и того же event_id не было для вас проблемой, так как это было одной из ваших проблем.
Participants Table
event_id date_time user_id
1 2015-10-29 00:00:01 1
1 2015-10-29 00:00:01 2
1 2015-10-29 00:00:01 3
Чтобы переопределить значения мета-таблицы по умолчанию для события, вы бы добавили запись в таблицу сведений о событии или как хотите, чтобы ее назвали, и укажите для конкретной даты время начала и окончания.
Event Details
event_id date_time start_time end_time
1 2015-10-29 00:00:01 5:00 pm 7:30 pm
Это должно быть хорошим началом, вам нужно будет уточнить его, чтобы быть более конкретным для ваших нужд.
Других решений пока нет …