Вы не должны думать о базовых данных в терминах SQL.Таким образом, лежит безумие.Объекты не являются таблицами или записями, атрибуты не являются полями.Отношения не связывают таблицы.Core Data - это система управления графами объектов.Он поддерживает отношения между живыми объектами, содержащими как данные, так и поведение.Любой SQL, который может или не может быть задействован в каком-либо конкретном приложении, происходит за кулисами внутри самих Core Data и не влияет на дизайн приложения или его кодирование.
Основным средством поиска уникальных объектов является их связь.Чем сложнее отношения, тем более узкие отношения определяют конкретные объекты.Предположим, у вас есть граф с тремя сущностями, связанными таким образом: Отдел <- >> Сотрудник << -> Специализация.Предположим, вы хотите найти все отделы, в которых есть инженер по имени «Боб».Вы должны выполнить выборку объектов Отдела, используя предикат, подобный:
"employees.firstName=="Bob" AND employees.specialization.type=="Engineer"
Это вернет небольшое количество объектов Отдела.Если вы хотите найти самих сотрудников, вы можете использовать предикат для фильтрации отношений каждого возвращенного сотрудника отдела по конкретным атрибутам сотрудников, которые вы хотите найти.
Вы можете сохранить постоянные идентификаторы объектов в виде идентификаторов URI, хранящихся в NSURL, и найти конкретные объекты, но обычно это делается только для связывания объектов, которые не могут образовывать отношения, поскольку они сохраняются в отдельных постоянных хранилищах.
Основной способ найти объекты - это (1) найти подмножество объектов, используя fetch (2) пройти эти отношения объектов, чтобы найти связанные объекты.Поскольку базовые данные построены вокруг отношений между объектами, хорошо структурированный граф сущностей часто может однозначно идентифицировать объекты только по их отношениям.