2016-11-24 5 views
0

Я борюсь с тем, как я должен проектировать схему для своих данных. Я видел много потоков с появлением событий календаря, но я не могу перевести его в свое дело, поскольку он немного отличается, и эта небольшая разница делает его жестким. В принципе у меня есть две модели, которые не позволяют мне спать. EVENT и EVENT_DETAILS Прежде всего, я использую MongoDB, но это, в основном, более высокий уровень абстракции, чем переход к уровню DB, но я могу ошибаться. Backend - SailsJS. На интерфейсе у меня есть VueJS SPA.Как я должен правильно обрабатывать данные о событиях и событиях возможных событий? (Mongo, Vue)

У меня есть события. Большинство из них находятся навсегда (постоянный), но некоторые из них либо один, то есть точная дата, когда они происходят, некоторые из них возвращаются в один день недели в заданный период, а некоторые постоянные приостанавливаются на заданный период ,

СОБЫТИЕ может существовать без EVENT_DETAILS, но, конечно же, не так.

Мне нужно, чтобы пользователь проходил через WEEKS периоды и мог видеть список СОБЫТИЙ в данный период и связанные EVENT_DETAILS, и если нет EVENT_DETAILS, , пусть он его создал.

Для работы постоянная, приостановки и временной, я следующие атрибуты в

my EVENT (I show only relevant atts): 
TYPE: [0,1,2]; 0 - permanent, 1 - temp, 2 - one off 
SUSPENDED: true/false 
SUSPENSION_DATES (from,to) 
PERIOD (from,to) - for temporary 
DAY: [0-6] - day of the week (choosen for 0 and 1, autmatically for 2 - one off 

и, конечно, ассоциаций с EVENT_DETAILS.

Это нормально или я должен изменить его, чтобы сделать его правильным/лучше/легче иметь дело?

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

+0

Одно событие может иметь ноль или более подробная информация, каждая из которых является строкой? И вы сохраняете детали в другой схеме, не так ли? –

+0

Детали - это модель, связанная с событием. –

ответ

1

Несколько улучшений вы можете рассмотреть следующие вопросы:

  • поскольку ваши события определяются единицы дня, события, происходящие в один день, и эти последние в течение периода может быть нормирована на один, установив начало и конец даты одинаковы для одноразовых событий.
  • Что касается поля в схеме в mongodb, допускаются не только примитивные типы, объекты/массивы также могут использоваться для формирования сложных структур. Таким образом, вы можете просто сохранить данные события в схеме событий с полем массива строк, например {type: [String], default: []} в синтаксисе mongoose, или даже {type: [{label: String, description: String}], default: []}.

Для второй пули, вложение документов в MongoDB хорошо для формирования модели, как структура базы данных, но MongoDB не делает очень хорошо в агрегации, так что только те, встраивать «принадлежность» к схеме (или, те, у кого отношение одного или нескольких отношений к другому, а не мульти-мульти), в нашем случае здесь должно быть безопасно сделать это, поскольку детали относятся к одиночным событиям.

Итак, теперь есть события в периоды и еженедельные события, которые не могут быть нормализованы в один, поскольку один из них является непрерывным, а другой - нет. Имея флаг type, чтобы идентифицировать их, мне все хорошо.Вы можете сделать некоторые комментарии/документы и добавить некоторые конфиги как const EVENT_TYPES = {PERMANENT: 0, TEMP: 1} и использовать эти считываемые конфиги типа вместо 01 с, чтобы убедиться, что ваши и сами среди коллег не будет ненавидеть вас в будущем;)

 Смежные вопросы

  • Нет связанных вопросов^_^