Открыть сервис

ORM

ORM (от англ. Object-Relational Mapping, объектно-реляционное отображение) — это технология программирования, которая связывает объектно-ориентированную модель данных приложения с реляционной базой данных. ORM создаёт «виртуальную объектную базу данных», позволяя разработчику манипулировать данными на языке объектов (например, на Java, Python, C#), а не на языке SQL. Система автоматически генерирует SQL-запросы для выполнения операций чтения, записи, обновления и удаления записей в таблицах.

История

Концепция ORM возникла в 1990-х годах как ответ на «импедансное несоответствие» между парадигмами объектно-ориентированного программирования (ООП) и реляционными базами данных. В ООП данные представлены в виде графа взаимосвязанных объектов, а в реляционных базах — в виде плоских таблиц и связей между ними. Первые коммерческие ORM-решения появились в среде Java (TopLink, 1994) и Smalltalk. Массовое распространение технология получила с выходом Hibernate для Java (2001) и Entity Framework для .NET (2008).

В мире Python стандартом стал SQLAlchemy (2005), а в Ruby — ActiveRecord, входящий в состав фреймворка Ruby on Rails (2004). В 2010-х годах ORM стали неотъемлемой частью большинства современных веб-фреймворков, включая Django (Python), Laravel (PHP) и Spring Data (Java). В России и русскоязычном сообществе ORM активно применяется в разработке корпоративных систем, интернет-магазинов и государственных информационных систем, где требуется быстрая смена бизнес-логики при неизменной схеме базы данных.

Принцип работы

ORM-система состоит из трёх ключевых компонентов:

Типичный сценарий работы ORM:

  1. Разработчик создаёт объект (например, User user = new User("Иван", "ivan@example.com")).
  2. Вызывает метод session.save(user).
  3. ORM анализирует маппинг, генерирует INSERT-запрос, выполняет его и возвращает сгенерированный идентификатор.
  4. При последующем чтении (session.get(User.class, 1)) ORM создаёт объект, заполняет его данными из строки таблицы и отслеживает его изменения.

Классификация

По степени автоматизации и контроля ORM делятся на три типа:

По способу маппинга выделяют:

Преимущества и недостатки

Преимущества

Недостатки

Применение

ORM является стандартом де-факто для большинства веб-приложений и корпоративных систем. Наиболее распространённые сценарии:

Критика и альтернативы

Основная критика ORM связана с тем, что технология скрывает сложность SQL, но не устраняет её. Разработчики, не понимающие реляционную модель, часто создают неэффективные схемы данных. В ответ на это возникли альтернативные подходы:

В российской практике ORM активно используется, но в высоконагруженных проектах (например, в системах госзакупок или телекоммуникационных компаниях) часто применяют гибридный подход: ORM для стандартных CRUD-операций и «сырой» SQL для отчётных запросов и массовых обновлений.

Примеры популярных ORM

ЯзыкНазваниеФреймворк / СредаТип
JavaHibernateSpring, Jakarta EEПолный
C#Entity Framework.NETПолный
PythonSQLAlchemyFlask, FastAPIПолный / Лёгкий
PythonDjango ORMDjangoПолный
RubyActiveRecordRuby on RailsПолный
PHPEloquentLaravelПолный
JavaScript/TypeScriptTypeORMNestJS, ExpressПолный
JavaScript/TypeScriptPrismaNode.jsПолный
GoGORMGin, EchoПолный
KotlinExposedKtor, SpringЛёгкий

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →