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