У меня есть интересная проблема, пытаясь представить сложные данные расписания в базе данных. В качестве ориентира я должен иметь возможность представлять всю полноту того, что может представлять формат iCalendar - ics
-, но в базе данных. На самом деле я не реализую ничего, относящееся к ics
, но он дает хорошую область типов правил, которые мне нужны для моделирования для моего конкретного проекта.
Мне нужно разрешить представление одного события или повторяющегося события на основе нескольких раз в день, дней недели, недели месяца, месяца, года или некоторой их комбинации. Например, третий четверг ноября ежегодно или 25 декабря ежегодно или каждые две недели, начиная с 2 ноября и продолжающийся до 8 сентября следующего года.
Мне не нужна эффективность вставки, но эффективность запросов очень важна. Операцией, которую я буду делать чаще всего, является предоставление одной даты/времени или диапазона даты/времени и попытка определить, соответствует ли определенное расписание какой-либо части диапазона дат/времени. Другие операции могут быть медленнее. Например, с 15 января 2010 года в 10:00 утра до 15 января 2010 года в 11:00, найдите все расписания, которые совпадают, по крайней мере, с частью этого времени. (то есть график, который охватывает 10:30 - 11:00, по-прежнему соответствует.)
Любые предложения? Я посмотрел на Как можно представить запланированные события в RDBMS?, но не охватывает сферу действия правил повторения, которые я хотел бы моделировать.