Руководства

Что такое ORM? Как приложения работают с базами данных, простое объяснение

ORM (объектно-реляционное отображение) — это программная библиотека, которая стоит между приложением и реляционной базой данных. Вместо того чтобы писать запросы к базе на SQL, разработчики работают с данными как с обычными объектами своего языка программирования — db.booking.create(...) или Booking.find(...) — а ORM переводит это в SQL, выполняет его и превращает результаты обратно в объекты. Известные примеры: Prisma и Drizzle для TypeScript, SQLAlchemy для Python и Entity Framework Core для C#.

Почему ORM важны, когда вы создаёте приложение с ИИ

Когда ИИ-конструктор добавляет в ваше приложение базу данных, он обычно добавляет и ORM, чтобы с ней работать. Писать код ORM вам не придётся, но полезно знать, что он есть:

  • Модель данных живёт в коде. Файл схемы ORM часто самое понятное описание данных приложения: какие таблицы есть, какие поля в каждой и как они связаны. Его быстро читают, чтобы проверить, правильно ли ИИ понял ваше приложение.
  • Изменения базы идут через миграции. Когда вы просите «добавь клиентам номер телефона», ИИ меняет модель и создаёт миграцию. Понимание этого помогает объяснить, почему изменение может не работать вживую, пока его не применили.
  • Безопасность по умолчанию. ORM строят запросы так, что защищают от SQL-инъекций, одной из самых частых дыр в приложениях, где запросы собираются вручную.
  • Ловушки скорости. ORM легко приводят к сотням мелких запросов там, где хватило бы одного. Это частая причина медленных страниц в приложениях, созданных ИИ.

Бытовая аналогия

Представьте британского путешественника и японского продавца, которые не говорят на одном языке и общаются через переводчика.

Путешественник (ваше приложение) говорит: «Мне нужны три самых дешёвых чая». Переводчик (ORM) переводит это на точный японский (SQL), передаёт продавцу (базе данных) и переводит ответ обратно на английский.

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

Как работает ORM

Базы вроде Postgres хранят данные в таблицах из строк и столбцов и запрашиваются на SQL. Языки программирования работают с объектами: бронь с date, customer и status. ORM связывает одно с другим:

Сторона базыСторона ORM / кода
Таблица bookingsМодель Booking
СтрокаОдин объект брони
Столбец starts_atПоле startsAt
Внешний ключ customer_idСвязь booking.customer
SELECT, INSERT, UPDATE, DELETEМетоды find, create, update, delete

Эти четыре операции — это CRUD-действия, на которых строится почти любое приложение.

Пример: брони с Prisma

Вот упрощённая схема Prisma для приложения записи в салон. Она описывает две таблицы и связь между ними:

model Customer {
  id       Int       @id @default(autoincrement())
  name     String
  email    String    @unique
  bookings Booking[]
}

model Booking {
  id         Int      @id @default(autoincrement())
  startsAt   DateTime
  service    String
  customer   Customer @relation(fields: [customerId], references: [id])
  customerId Int
}

Простыми словами: у клиента есть имя, уникальный email и много броней; каждая бронь имеет время начала, услугу и принадлежит одному клиенту.

Теперь приложению нужно получить «ближайшие брони Лены, сначала самые ранние»:

const bookings = await db.booking.findMany({
  where: {
    customer: { email: "lena@example.com" },
    startsAt: { gte: new Date() },
  },
  orderBy: { startsAt: "asc" },
});

ORM превращает это примерно в такой SQL, выполняет его и возвращает список объектов брони:

SELECT b.* FROM "Booking" b
JOIN "Customer" c ON c.id = b."customerId"
WHERE c.email = $1 AND b."startsAt" >= $2
ORDER BY b."startsAt" ASC;

$1 и $2 — это плейсхолдеры: email и дата передаются отдельно от текста запроса, и именно это защищает от SQL-инъекций.

Миграции

Если затем вы попросите «дай клиентам добавить номер телефона», ИИ добавит phone String? в модель Customer (знак ? означает, что поле необязательное) и создаст миграцию — небольшой SQL-скрипт вроде ALTER TABLE "Customer" ADD COLUMN "phone" TEXT;. Миграции сохраняются по порядку, поэтому любую копию базы можно привести к одной структуре, а история изменений сохраняется.

Популярные ORM по языкам

ЯзыкРаспространённые ORM
TypeScript / JavaScriptPrisma, Drizzle, TypeORM, Sequelize
PythonSQLAlchemy, ORM из Django, SQLModel
C#Entity Framework Core
JavaHibernate (часто через Spring Data JPA)
RubyActive Record

ORM отличаются тем, насколько сильно они прячут SQL. Prisma использует собственный язык схем и стиль запросов; Drizzle намеренно остаётся близким к форме SQL и при этом полностью типизирован. Более лёгкие инструменты, которые называют конструкторами запросов (query builders), например Knex или Kysely для TypeScript, помогают собирать SQL в коде, не превращая строки в полноценные объекты.

Ключевые термины

ТерминЗначение
МодельОписание таблицы и её полей в коде.
СхемаПолное описание всех таблиц, полей и связей.
СвязьСсылка между моделями, например бронь принадлежит клиенту.
МиграцияВерсионированный скрипт, который меняет структуру базы.
Конструктор запросовБолее лёгкий инструмент для сборки SQL в коде без полного отображения в объекты.
Проблема N+1Один запрос на список и ещё один запрос на каждый элемент — медленно при росте данных.
Сырой SQLSQL, написанный вручную, когда ORM мешает.

Распространённые заблуждения

  • «ORM — это база данных». Нет, это переводчик. Базу всё равно нужно выбрать, например Postgres.
  • «С ORM не нужно понимать свои данные». Плохо спроектированные таблицы мешают и через ORM. Хорошая модель данных важнее инструмента.
  • «ORM всегда медленные». Обычные запросы работают нормально. Замедление обычно связано с такими шаблонами, как N+1, или с отсутствием индексов, а это исправляется.
  • «ORM означает, что SQL-инъекций не бывает никогда». Стандартные методы ORM безопасны, но сырой SQL с вставленным пользовательским вводом остаётся опасным.
  • «Изменение файла схемы меняет живую базу». Только после создания миграции и её применения к этой базе.

Что спросить у вашего ИИ-конструктора

  • «Покажи схему базы данных и объясни каждую таблицу и связь простым языком».
  • «Какой ORM используется в проекте и где лежат миграции?»
  • «Перед изменением любой таблицы скажи, затронет ли это существующие данные, и никогда не удаляй столбец с данными без вопроса».
  • «Проверь самые медленные страницы на запросы N+1 и добавь индексы там, где списки фильтруются или сортируются».
  • «Убедись, что каждый запрос с пользовательским вводом идёт через ORM или использует параметры, без SQL, собранного строкой».

ORM в Mythex

Когда приложению нужно сохранять данные, Mythex добавляет в проект отдельную базу Postgres — попросите в чате или используйте команду /database — и передаёт её параметры подключения в рабочее пространство и опубликованное приложение (Database). Агент пишет код, который читает и сохраняет ваши данные. Если у вас есть предпочтение — «используй Prisma», «используй SQLAlchemy» или «только простой SQL, без ORM» — скажите об этом в чате. Попросите агента показать схему, когда захотите проверить структуру; файлы можно открыть в редакторе кода. Общую картину см. в статьях что такое база данных и SQL и NoSQL.

Вопросы

Что такое ORM простыми словами?

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

Какие бывают примеры ORM?

Распространённые ORM: Prisma и Drizzle для TypeScript и JavaScript, SQLAlchemy и ORM из Django для Python, Entity Framework Core для C#, Hibernate для Java и Active Record в Ruby on Rails.

ORM лучше, чем писать SQL вручную?

Зависит от задачи. ORM делает обычные чтения и записи быстрее в написании, безопаснее и проще в изменении, а SQL вручную даёт полный контроль над сложными отчётами и запросами, где важна скорость. Большинство ORM позволяют при необходимости перейти на сырой SQL.

Что такое миграция?

Миграция — это небольшой версионированный скрипт, который меняет структуру базы данных, например добавляет таблицу или столбец. ORM могут создавать миграции из вашей модели данных, чтобы каждая копия базы — на ноутбуке, при тестировании и в продакшене — имела одинаковую структуру.

Mythex · Pricing · Создавайте что угодно с ИИ · Шаблоны сайтов и приложений · Сравнения Mythex · Глоссарий по созданию приложений с ИИ · Бесплатные инструменты для создания приложений с ИИ · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)