Представление комплекса запланировало повторение в базе данных

У меня есть интересная проблема при попытке представить сложные данные расписания в базе данных. Как инструкция, я должен смочь представить полноту какой iCalendar- ics - формат может представить, но в базе данных. Я на самом деле не реализую ничего касающегося ics, но это дает хороший объем типа правил, которые я должен смочь смоделировать для своего конкретного проекта.

Я должен позволить, позволяют представление единственного события или повторяющегося события на основе многократно в день, дни недели, недели месяца, месяца, года или некоторой комбинации тех. Например, третий четверг в ноябре ежегодно, или 25-го декабря ежегодно, или каждые две недели начиная 2 ноября и продолжаясь до 8 сентября в следующем году.

Я не забочусь об эффективности вставки, но запрашиваю эффективность, очень важно. Операция, которую я буду делать чаще всего, обеспечивает или единственную дату/время или диапазон даты/времени, и пытается определить, соответствует ли определенное расписание какой-либо части диапазона даты/времени. Другие операции могут быть медленнее. Например, данный 15 января 2010 в 10:00 в течение 15 января 2010 в 11:00, найдите все расписания, которые соответствуют, по крайней мере, части того времени. (т.е. расписание, которое касается 10:30 - 11:00 все еще, соответствует.)

Какие-либо предложения? Я смотрел на то, Как можно было бы представить запланированные события в RDBMS? но это не покрывает объем типа правил повторения, которые я хотел бы смоделировать.

10
задан Community 23 May 2017 в 10:27
поделиться

3 ответа

В конце концов, этот пост оказался наиболее полезным:

Список «полей» iCal (для схемы базы данных, основанной на стандарте iCal)

Мы решили точно следовать модели iCal, поскольку ребята, написавшие этот стандарт, прекрасно разбирались в проблемной области.

4
ответ дан 4 December 2019 в 04:01
поделиться

Это может быть тривиальное решение, но каковы будут недостатки добавления столбца, определяющего повторяемость события (т.е. каждые x недель, ежегодно, еженедельно, и т. д.) и используя это в качестве критерия результата?

-1
ответ дан 4 December 2019 в 04:01
поделиться

Я сделал что-то похожее на это, чтобы иметь две таблицы. Если событие не имело повторяющегося шаблона, просто сохраните дату, время начала и время окончания. Запрос проверяет, превышает ли время поиска время начала любой записи и меньше или равно времени окончания того же события.

Что касается повторяющихся событий, я не слишком знаком с тем, как iCalendar хранит повторения, но если вы храните каждое событие по дням недели (возможно, вам придется иметь несколько строк для одного события, если оно повторяется более одного дня в неделю), то выполните поиск по нему почти так же, как в приведенной выше таблице. Для более странных рецидивов, таких как третий вторник недели, у вас может быть дополнительная колонка, описывающая конкретное состояние. Я мог бы дать вам лучший ответ на этот вопрос, если бы вы могли рассказать мне больше о том, как ICS представляет собой такого рода повторение.

Я надеюсь, что это поможет. Сейчас у меня не так много времени. Вы можете связаться со мной позже, если вы хотите обсудить это. В настоящее время я нахожусь в Миссури, поэтому моя доступность на следующую неделю будет неустойчивой.

1
ответ дан 4 December 2019 в 04:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: