Основные данные: есть ли способ эффективно запросить модель, используя подразумеваемые отношения вместо реальных? - PullRequest
0 голосов
/ 29 марта 2012

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

enter image description here

В этой модели есть Счета и Действия, которые совместно используют родительскую сущность Item.Кроме того, существует сущность Отношения, которая моделирует отношения между объектами, а не позволяет базовым данным моделировать отношения, используя «реальные» отношения.Другими словами, сущность Отношения используется как своего рода «таблица соединений».

Учитывая эту модель, как я могу выбрать объекты, основанные на связанных объектах?Например, как мне получить все учетные записи, которые имеют активность, которая происходит сегодня?

Кажется, нет никакого способа сделать это в одном запросе на выборку.Лучшее, что я могу себе представить, - это сначала выбрать действия, которые происходят сегодня, затем отношения, где toId совпадает с идентификаторами этих действий, и, наконец, учетные записи, где идентификатор совпадает с fromId в отношениях.

3 запроса на выборку для этого неоптимальны.Нам понадобится поддерживать учетные записи и счетчики активности в сотнях тысяч, и выполнение всего этого извлечения может быть очень медленным.Также неудобно использовать NSFetchedResultsController с такой моделью.

Да, я знаю, что это не то, что Core Data любит делать, но по разным причинам, связанным с нашей серверной архитектурой и межплатформенной поддержкой, мы хотели быиспользовать эту модель данных и Core Data из-за всех приятных вещей, которые она предоставляет.Заранее благодарим за помощь.

1 Ответ

0 голосов
/ 29 марта 2012

Дайте вашим Account и Activity отношение к Relation, т.е. называется relations, и установить соответствующие обратные отношения (называемые account / activity). Таким образом, все ваши предметы, включая Account и Activity, могут иметь несколько «Отношений».

Чтобы связать учетную запись с действием, создайте новый объект Relation и установите его свойство account и activity, затем добавьте его в набор relations учетной записи и действия.

Теперь, если вы хотите получить все учетные записи, в которых есть активность, вы выбираете свойство relations своей активности и для всех элементов в этом наборе извлекаете свойство account. Должна быть возможность интегрировать это в один запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...