Возможно все намного проще сделать чем я думаю.
Пишу приложение для обучения, возможно пригодиться кому-либо.
Подсчет расходов/доходов
Использую Node js, Mongoose
Названия категорий расходов- categories
const costsSchema = new Schema(
{
costs: {
categories: [{
name: {
type: [String],
minlength:[1,"Вы не ввели имя категории"],
maxlength:[40,"Слишком длинное имя категории"],
unique: true,
default: ["Жилье","Коммунальны услуги","Продукты","Проезд","Интернет",
"Сотовая связь","Одежда","Медикаменты","Хозяйственные расходы","Покупка техники",
"Развлечения и отдых","Подарки к дню рождения","Прочее"]
},
color:{
type: [String],
default:["green","green","green","green","green","green","green","green","green",
"green","green","green","green"]
}
}],
days: [{
date: Date,
arrEvents: [{
categoriesDay: Number
}]
}]
}
})
Размер массива days может достигать 365 в год и в каждом дне номер соответствующий данным в cost.categories
Например в days.arrEvents[0]. categoriesDay = 2 означает категория "Продукты" и цвет "red"
В процессе работы могут меняться названия категорий, удаляться появляться новые, меняться цвет.
Допустим есть данные за пару лет, тогда при, например, удалении одной из категорий изменится индекс и необходимо менять значения days.arrEvents[0]. categoriesDay
В каждом дне за эти 2 года.
Вариант решения:
Ввести промежуточную сущность, которая будет записывать изменение.
- при этом не нужно будет менять все дни
-Но размер данных сущности будет расти с каждым изменением категорий
Отдельный процесс по расписанию или по анализу загруженности сервера производит перезапись всех дней и обнуляет данные промежуточной сущности.
1. Есть ли решение по проще?
2. Еще если все делать по принципу разделяй и властвуй и для лучшего понимания кода другими разработчиками, то вместо моей одной большой (показано только часть схемы) разбить схему используя вложенные схемы?
3. Моя тема относится к категории антипаттерна преждевременной оптимизации?