Чем Core Data отличается от базы данных?

«Чем Core Data отличается от базы данных?» — вопрос из категории Базы данных, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Core Data — это не база данных, а фреймворк для управления объектным графом и его сохранности. Хотя он часто использует SQLite как бэкенд-хранилище, его абстракция работает на уровне объектов, а не таблиц.

Ключевые отличия:

Аспект Core Data База данных (например, SQLite)
Уровень абстракции Объектная модель (сущности, связи) Реляционные таблицы, строки, столбцы
Основная задача Управление жизненным циклом объектов в памяти, их связями и сохранением Хранение и эффективный запрос структурированных данных
Запросы NSFetchRequest с NSPredicate (объектно-ориентированный) Язык SQL (декларативный, реляционный)
Изменения в памяти Автоматическое отслеживание, откат (undo), валидация Не отслеживаются, требуют явных команд UPDATE/INSERT

Пример выборки:

let request: NSFetchRequest<User> = User.fetchRequest()
request.predicate = NSPredicate(format: "name == %@", "John")
request.sortDescriptors = [NSSortDescriptor(key: "name", ascending: true)]
let users = try? context.fetch(request)

Когда использовать Core Data:

  • Приложение следует парадигме Model-View-Controller (MVC) Apple.
  • Нужны сложные связи между объектами (один-ко-многим, многие-ко-многим).
  • Требуется встроенная поддержка отмены операций или поэтапной миграции схемы.

Когда рассмотреть прямую работу с SQLite:

  • Критична максимальная производительность на сложных JOIN-запросах.
  • Данные имеют простую структуру, а объектная модель избыточна.
  • Необходим прямой контроль над SQL-запросами и схемой.