Повторяющиеся «события» в календаре: база данных CPU VS

Я строю календарную систему с нуля (требование, поскольку я работаю со специальным типом календаря рядом с Грегорианским), и мне нужна помощь с логикой. Я пишу приложение в Джангу и Питоне.

По сути, логические проблемы, в которых я работаю, заключается в том, как сохраняться как можно больше объектов, максимально умнее, не запуская вкладку на циклами CPU. Я чувствую, что полиморфизм будет решением этого, но я не совсем уверен, как выразить это здесь.

У меня есть два основных подмножества событий, повторяющиеся события и события одного выстрела.

Повторяющиеся события будут иметь подписчики, люди, которые уведомляются об их изменениях. Если, например, класс отменяется или перемещается на другой адрес или время, люди, которые подписались, нужно знать об этом. Некоторые события просто случаются каждый день до конца времени, не будут редактироваться, и «просто произойдет». Проблема в том, что если у меня есть One объект, который хранит информацию о событии и его повторяющуюся политику, то отменив или изменение одного события в серии, действительно винты, и мне придется объяснить это как-то, сохраняя Подписчики знают об изменении и сохранения серии вместе как логическую группу.

Paradox: генерирование уникальных объектов событий для каждого нормального события в серии до конца времени (если он повторяется на неопределенный срок) не имеет смысла, если они все будут хранить ту же информацию; Однако, если какое-либо изменение происходит с одним событием в серии, я почти имел , чтобы создать другой объект в базе данных, чтобы представлять аннулирование.

Может кто-нибудь помочь мне с логикой здесь? Это действительно скручивает мой разум, и я не могу больше думать прямо. Мне очень нравятся некоторые входные данные о том, как решить эту проблему, так как повторяющиеся события также не совсем самая простая логическая вещь (повторить каждый день, либо каждый m / w / f, или на 1 м от каждого месяца или Каждые 3 месяца или один раз в год на эту дату или раз в неделю на эту дату или раз в месяц на эту дату или в 9:00 утра по вторникам и 11:00 утра по четвергам и т. Д.) И я бы Как помочь понять лучший путь логики для повторяющихся событий.

Вот мысль о том, как это сделать:

class EventSeries(models.Model):
    series_name = models.TextField()
    series_description = models.TextField()
    series_repeat_policy = models.IHaveNoIdeaInTheWorldOnHowToRepresentThisField()
    series_default_time = models.TimeField()
    series_start_date = models.DateField()
    series_end_date = models.DateField()
    location = models.ForeignKey('Location')

class EventSeriesAnomaly(models.Model):
    event_series = models.ForeignKey('EventSeries', related_name="exceptions")
    override_name = models.TextField()
    override_description = models.TextField()
    override_time = models.TimeField()
    override_location = models.ForeignKey('Location')
    event_date = models.DateField()

class EventSeriesCancellation(models.Model):
    event_series = models.ForeignKey('EventSeries', related_name="cancellations")
    event_date = models.TimeField()
    cancellation_explanation = models.TextField()

Это, кажется, имеет немного смысла, но, как указано выше, это разрушает мой мозг прямо сейчас, чтобы все, кажется, это будет работать. (Еще одна проблема и вопрос, если кто-то хочет изменить все оставшиеся события в серии, что в черт возьми, я делаю!?!? Я полагаю, что я могу изменить «series_default_time», а затем генерировать экземпляры аномалий для всех прошлых экземпляров для их К первоначальному времени, но AHHHHHHHHHHHHHHHHHHHHHHHH !!!)

добивается до трех простых, конкретных вопросов, у нас есть:

  1. Как я могу иметь серию повторяющихся событий, но допустить отмены и модификации отдельных событий И модификации в остальной части серии в целом, при хранении как несколько объектов в базе данных как абсолютно необходимо, никогда не генерируя объекты для отдельных событий заранее?
  2. Как я могу повторить события в очень настраиваемых Способ, не теряя разуму, в том, что я могу позволить событиям повторять в количестве способов , но снова сделать вещи легко и хранить как можно меньше объектов?
  3. Как я могу сделать все выше, позволяя переключить каждый сериал событий, чтобы сделать это не произошло, я F Он выпадает на преступление . ? ?

7
задан Michael Petrotta 5 September 2011 в 22:34
поделиться