Основные данные редактирования атрибутов и получение уникального объекта для редактирования - PullRequest
0 голосов
/ 19 июля 2010

Я использую SQL и n-уровневые системы и пытаюсь понять, как эффективно использовать Core Data для этого использования:

  • вставить новый управляемый объект - у меня нет проблем
  • удалить существующий управляемый объект - у меня нет проблем там
  • редактирование существующего управляемого объекта - проблема.

Проблема заключается в том, как определить этот объект какуникальным и найти его в пределах от 0 до 100 миллионов записей, которые я мог бы иметь?Я знаю, что вы можете использовать:

[managedObject objectID]

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

Запрашивает ли достаточное количество атрибутов для достижения уникальных результатов, или я что-то упускаю?

Любая помощь приветствуется //:)

1 Ответ

1 голос
/ 19 июля 2010

Вы не должны думать о базовых данных в терминах SQL.Таким образом, лежит безумие.Объекты не являются таблицами или записями, атрибуты не являются полями.Отношения не связывают таблицы.Core Data - это система управления графами объектов.Он поддерживает отношения между живыми объектами, содержащими как данные, так и поведение.Любой SQL, который может или не может быть задействован в каком-либо конкретном приложении, происходит за кулисами внутри самих Core Data и не влияет на дизайн приложения или его кодирование.

Основным средством поиска уникальных объектов является их связь.Чем сложнее отношения, тем более узкие отношения определяют конкретные объекты.Предположим, у вас есть граф с тремя сущностями, связанными таким образом: Отдел <- >> Сотрудник << -> Специализация.Предположим, вы хотите найти все отделы, в которых есть инженер по имени «Боб».Вы должны выполнить выборку объектов Отдела, используя предикат, подобный:

"employees.firstName=="Bob" AND employees.specialization.type=="Engineer"

Это вернет небольшое количество объектов Отдела.Если вы хотите найти самих сотрудников, вы можете использовать предикат для фильтрации отношений каждого возвращенного сотрудника отдела по конкретным атрибутам сотрудников, которые вы хотите найти.

Вы можете сохранить постоянные идентификаторы объектов в виде идентификаторов URI, хранящихся в NSURL, и найти конкретные объекты, но обычно это делается только для связывания объектов, которые не могут образовывать отношения, поскольку они сохраняются в отдельных постоянных хранилищах.

Основной способ найти объекты - это (1) найти подмножество объектов, используя fetch (2) пройти эти отношения объектов, чтобы найти связанные объекты.Поскольку базовые данные построены вокруг отношений между объектами, хорошо структурированный граф сущностей часто может однозначно идентифицировать объекты только по их отношениям.

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