Хотя Core Data является потомком Apple Object Object Framework , объектно-реляционного сопоставителя (ORM), который был / тесно связан с реляционным бэкэндом, Core Data не является ORM. Фактически, это структура управления графами объектов. Он управляет потенциально очень большим графом экземпляров объектов, позволяя приложению работать с графом, который не будет полностью помещаться в память из-за сбоя объектов в памяти и из памяти по мере необходимости. Базовые данные также управляют ограничениями на свойства и отношения и поддерживают целостность ссылок (например, поддержание согласованности прямых и обратных ссылок, когда объекты добавляются / удаляются в / из отношений). Базовые данные, таким образом, являются идеальной основой для построения «модельного» компонента архитектуры MVC.
Для реализации своего управления графа, Core Data происходит использовать SQLite в качестве дискового хранилища. Это могло быть реализовано с использованием другой реляционной базы данных или даже нереляционной базы данных, такой как CouchDB . Как уже отмечали другие, Базовые данные могут также использовать XML, или двоичный формат, или пользовательский атомарный формат в качестве бэкэнда (хотя эти опции требуют, чтобы весь граф объекта помещался в памяти). Если вы заинтересованы в том, как Core Data реализована в бэкэнде SQLite, вы можете проверить OmniGroup OmniGroup Framework, открытую реализацию подмножества Core Data API. BaseTen структура также является реализация API ядра данных с использованием PostgreSQL в качестве движка.
Поскольку Базовые Данные не предназначены для ORM для SQLite, они не могут читать произвольную схему SQLite. И наоборот, вы не должны полагаться на способность читать хранилища данных SQLite Core Data с помощью других инструментов SQLite; схема - это деталь реализации, которая может измениться.
Таким образом, в действительности нет никакого конфликта между использованием Core Data или SQLite напрямую. Если вам нужна реляционная база данных, используйте SQLite (напрямую или через одну из оболочек Objective-C, например, FMDB ) или сервер реляционной базы данных. Тем не менее, вы все равно можете изучить Базовые данные для использования в качестве структуры управления графами объектов. В сочетании с классами контроллеров Apple и виджетами, совместимыми с привязкой значений к ключам, вы можете реализовать полную архитектуру MVC с очень небольшим количеством кода.