Основные данные получают сумму значений. Полученные свойства против распространения

Я относительно новичок в Core Data (исходил из фона SQLite). Только что закончил читать книгу «Основные данные для iOS», но у меня остался ряд непонятных вопросов, когда я начал моделировать приложение, имеющее следующую модель:

  1. Сущность «Учетные записи», которая имеет «транзакции для многих». отношение и свойство 'startBalance'
  2. Сущность 'Транзакция', которая имеет отношение 'платежи' ко многим (и обратное для Счетов)
  3. Сущность 'Платеж', которая содержит сведения о фактической 'выплаченной сумме'

По соображениям производительности я хотел денормализовать модель и добавить свойство TotalAmountSpent в сущность «Accounts» (как предлагается в книге), чтобы я мог просто продолжать обновлять его, когда что-то изменилось.

На практике этого трудно достичь с помощью Core Data. Я не могу понять, как это сделать правильно (и не знаю, как правильно). Итак, мои вопросы:

a) Следует ли вместо этого изменить TotalAmountSpent на Fetched Property? Есть ли влияние на производительность (я знаю, что он загружается лениво, но я почти наверняка буду получать это свойство для каждой учетной записи).Если я это сделаю, мне нужно будет получить общую сумму, потраченную против «начального баланса» за определенный период времени (например, за последние три дня). Это кажется простым в SQL, но как мне это сделать в Core Data? Я читал, что могу использовать агрегатную функцию @sum, но как мне отфильтровать по дате с помощью @sum? Я также прочитал, что любое изменение данных потребует обновления полученного свойства. Как мне «прислушаться» к изменениям? Делаю ли я это в методе willSave объекта «Платеж»?

б) Следует ли мне использовать распространение и вручную обновлять TotalAmountSpent каждый раз, когда к транзакции добавляется новый платеж? В каком месте лучше всего это сделать? Должен ли я сделать это в переопределенном методе willSave NSManagedObject? Тогда я боюсь, что будет кошмаром обновлять все соответствующие транзакции / платежи, если в учетной записи было обновлено поле «startBalance». Затем мне пришлось бы загружать каждый платеж и рассчитывать общую потраченную сумму и окончательный баланс на счете. Страшно, если есть тысячи платежей

Любые указания по этому поводу были бы очень признательны. Спасибо!

5
задан strange 27 September 2011 в 07:13
поделиться