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