Что такое ORM?

Объектно-реляционное сопоставление (ORM) — это метод, используемый для создания пути между языками объектно-ориентированного программирования (ООП) и базами данных. Это может помочь упростить взаимодействие вместо написания трудоемкого кода на языке структурированных запросов (SQL).

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

Интерфейс ORM описывает отношения между данными и объектом, не зная, как организованы данные. Его можно использовать для подключения приложения к коду SQL, необходимому для управления данными.

Типы ORM

Существует две главные категории ORM: шаблон активной записи и шаблон сопоставления данных.

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

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

Плюсы и минусы ORM

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

При этом ORM не идеальны; у них есть свои недостатки. Во многих случаях проблемы могут возникать из-за тех же вещей, которые делают их полезными. Одной из наиболее серьезных проблем является попытка скрыть подробности о серверной части базы данных. Это облегчает задачу в простых случаях, но обычно приводит к проблемам по мере роста сложности. Кроме того, отображение никогда не бывает завершено на 100%, и использование интерфейса ORM может привести к сомнительным предположениям, если вы не понимаете скрытый язык запросов или структуру базы данных, особенно если вы пытаетесь отладить проблему. Еще одна важная проблема заключается в том, насколько сложным может быть перевод между объектно-ориентированным программированием и реляционной парадигмой, используемой реляционными базами данных. По мере роста сложности ваших баз данных и кода вам, как правило, требуется дополнительное сопоставление, которое может быть несовершенным для его работы. Они также могут быть медленнее, чем использование SQL-запросов, особенно со сложными запросами, поскольку они имеют тенденцию генерировать дополнительный код, чем необходимо.

В современном мире существует множество различных ORM, доступных для использования в Интернете. Все зависит от ваших различных потребностей и предпочитаемого объектно-ориентированного языка программирования. Двумя популярными ORM в 2023 году являются Prisma и Sequelize.

Все о Prisma

Prisma — это инструмент ORM нового поколения с открытым исходным кодом для Node.js и TypeScript, выпущенный в производство в июне 2020 года. Он состоит из 3 основных частей:

  • Prisma Client: Автоматически сгенерированный и типобезопасный конструктор запросов для Node.js и Typescript.
  • Prisma Migrate: Система миграции
  • Prisma Studio: Интерфейс для просмотра и редактирования данных в вашей базе данных.

Пример использования:

const postsByUser = await prisma.user.findOne({ where: { email: '[email protected]' } }).posts()

Этот ORM отличается от большинства ORM тем, что модели определяются не в классах, а в схеме Prisma, которая является основным файлом конфигурации и файлом определения структуры данных, используемым набором инструментов Prisma. В файле схемы Prisma вы определяете свой источник данных и модели, а также отношения между ними. Затем он создает клиент, который показывает API Create-Read-Update-Delete (CRUD), который вы можете использовать для запроса вашей базы данных. По сути, он функционирует как богатый построитель запросов, который вы используете для возврата простых объектов Javascript в своем приложении.

Приоритет Prisma — сделать разработчиков более продуктивными при работе с базами данных. Они считают, что разработчики должны заботиться только о данных, необходимых им для реализации функции, а не тратить время на выяснение сложных SQL-запросов или попытки манипулировать результатами запроса в соответствии со своими потребностями. Абстракции ORM могут помочь им принимать правильные решения, накладывая определенные «здоровые» ограничения, чтобы предотвратить ошибки разработчиков.

Все о Sequelize

Sequelize — это установленная, зрелая, основанная на промисах ORM TypeScript и Node.js, выпущенная в 2011 году. Определение модели следует более традиционному шаблону ORM определения путем расширения класса Model. Такие методы, как SELECT или INSERT, затем выполняются с использованием методов класса. Кроме того, такие отношения, как hasMany() или ownTo(), определяются с помощью методов класса. Он использует шаблон активной записи для сопоставления своих данных и дает вам подробный контроль над транзакциями и тем, как они выполняются.

Пример использования:

const user = await User.findOne({
  where: {
    email: '[email protected]',
  },
  include: Post,
})

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

Сравнение Prisma и Sequelize

Prisma и Sequlize решают схожие проблемы, но работают по-разному. Как упоминалось выше, Sequelize использует традиционный формат сопоставления таблиц с классами моделей и предоставляет интерфейс для выполнения запросов CRUD в вашем приложении. Prisma — это новый тип ORM, который использует собственную схему Prisma для декларативного определения моделей. Он позволяет создавать миграции SQL и запускать их в базе данных. Все запросы CRUD доступны в клиенте Prisma.

Prisma и Sequelize позволяют выполнять необработанные и случайные запросы (сортировка, фильтрация, отдельные, группировка и т. д.), текстовый поиск, интерфейсы командной строки, переходы, миграцию/заполнение и многое другое. С точки зрения безопасности типов, Prisma лучше, так как в 9/10 случаях она будет ловить ошибки, в то время как Sequelize будет ловить их только часть времени. Что касается производительности и скорости, Prisma и Sequelize очень похожи по времени выполнения.

Prisma использует шаблон отображения данных, а Sequelize использует шаблон активной записи (у них есть некоторые поддерживаемые стили отображения данных, но все же могут появляться сомнительные шаблоны). Шаблон отображения данных, как правило, создает меньше проблем с объединением структур данных и добавляет меньше побочных эффектов в код.

У Sequelize не так много подробной документации, но, поскольку он существует дольше, в Интернете есть больше обсуждений / потоков поддержки, которые помогут вам разобраться. Prisma имеет более подробную документацию с поддержкой различных тем и предоставляет примеры кода, которые помогут вам.

Сравнивая Prisma и Sequelize, может быть трудно понять, какой из них лучше соответствует вашим потребностям.

Как правило, лучше использовать Prisma, если ваши потребности в данных проще, а база данных относительно мала. Или если вы не очень хорошо знакомы с SQL и у вас не так много времени на изучение SQL.

В противном случае, если производительность уровня базы данных вызывает серьезную озабоченность и вам нужен большой контроль над уровнем данных, вероятно, лучше использовать Sequelize. Если вы разработчик с солидными возможностями SQL, у вас не должно возникнуть проблем с использованием Sequelize со стилем отображения данных.

Заключение

Написание кода SQL с объектно-ориентированными языками программирования и реляционными базами данных может занять некоторое время, особенно если вы не очень хорошо владеете SQL. ORM могут помочь вам создавать базы данных, отображая данные в более удобный интерфейс для разработчиков. Хотя ORM могут сэкономить ваше время, разработчикам всегда следует проделать свою домашнюю работу, прежде чем переходить к использованию конкретной ORM. Вышеупомянутые инструменты могут упростить управление вашими базами данных, но всегда будут недостатки. Эта статья посвящена только двум популярным ORM — Prisma и Sequelize, но существует множество различных ORM, так что не стесняйтесь исследовать больше!

Ссылки: