Я относительно новичок в Core Data (исходил из фона SQLite). Только что закончил читать книгу «Основные данные для iOS», но у меня остался ряд непонятных вопросов, когда я начал моделировать приложение, имеющее следующую модель:
По соображениям производительности я хотел денормализовать модель и добавить свойство TotalAmountSpent в сущность «Accounts» (как предлагается в книге), чтобы я мог просто продолжать обновлять его, когда что-то изменилось.
На практике этого трудно достичь с помощью Core Data. Я не могу понять, как это сделать правильно (и не знаю, как правильно). Итак, мои вопросы:
a) Следует ли вместо этого изменить TotalAmountSpent на Fetched Property? Есть ли влияние на производительность (я знаю, что он загружается лениво, но я почти наверняка буду получать это свойство для каждой учетной записи).Если я это сделаю, мне нужно будет получить общую сумму, потраченную против «начального баланса» за определенный период времени (например, за последние три дня). Это кажется простым в SQL, но как мне это сделать в Core Data? Я читал, что могу использовать агрегатную функцию @sum, но как мне отфильтровать по дате с помощью @sum? Я также прочитал, что любое изменение данных потребует обновления полученного свойства. Как мне «прислушаться» к изменениям? Делаю ли я это в методе willSave объекта «Платеж»?
б) Следует ли мне использовать распространение и вручную обновлять TotalAmountSpent каждый раз, когда к транзакции добавляется новый платеж? В каком месте лучше всего это сделать? Должен ли я сделать это в переопределенном методе willSave NSManagedObject? Тогда я боюсь, что будет кошмаром обновлять все соответствующие транзакции / платежи, если в учетной записи было обновлено поле «startBalance». Затем мне пришлось бы загружать каждый платеж и рассчитывать общую потраченную сумму и окончательный баланс на счете. Страшно, если есть тысячи платежей
Любые указания по этому поводу были бы очень признательны. Спасибо!