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

CRUD — модель взаимодействия с данными

CRUD (аббревиатура от англ. create, read, update, delete — «создать, прочитать, обновить, удалить») — базовая модель операций над данными, описывающая четыре основных действия, которые выполняются с любым набором данных в информационной системе. Термин широко применяется в разработке программного обеспечения, баз данных и веб-приложений и обозначает минимально достаточный набор функций для работы с хранилищем информации.

Происхождение термина

Термин появился в индустрии программирования в конце 1970-х годов и связан с работами по проектированию систем управления базами данных. В 1983 году Джеймс Гэри (James Gary) в контексте баз данных использовал аббревиатуру CRUD для описания четырёх базовых операций. Позднее, в 1998 году, Ричард Дарбишилл (Richard Darbyshire) в статье «The Language of Business» закрепил термин в контексте объектно-ориентированного проектирования. В русскоязычной литературе аббревиатуру обычно транслитерируют как «крудо» или оставляют в латинской записи.

Четыре базовые операции

ОперацияАнгл.SQL-эквивалентОписание
СозданиеCreateINSERTДобавление новой записи в хранилище
ЧтениеRead (Retrieve)SELECTПолучение существующих данных
ОбновлениеUpdateUPDATEИзменение уже существующей записи
УдалениеDeleteDELETEУничтожение записи из хранилища

Операция Create добавляет новый объект или запись — например, регистрация нового пользователя в системе. Read — получение данных без их изменения: загрузка списка товаров, просмотр профиля. Update — модификация существующих данных: изменение адреса доставки, обновление статуса заказа. Delete — удаление записи: отмена заказа, очистка корзины.

CRUD и реляционные базы данных

В контексте реляционных систем управления базами данных (СУБД) четыре операции CRUD напрямую соответствуют основным командам языка SQL:

  • INSERT — вставка строк в таблицу;
  • SELECT — выборка строк по заданным условиям;
  • UPDATE — изменение значений в существующих строках;
  • DELETE — удаление строк из таблицы.

Такое соответствие делает модель CRUD универсальным описанием взаимодействия приложений с данными независимо от конкретной СУБД (PostgreSQL, MySQL, Microsoft SQL Server, Oracle, SQLite и других).

CRUD в веб-разработке

RESTful API

В архитектуре REST (Representational State Transfer) четыре операции CRUD отображаются на HTTP-методы:

HTTP-методCRUD-операцияПример
POSTCreatePOST /users — создать пользователя
GETReadGET /users/42 — получить пользователя с id 42
PUT / PATCHUpdatePUT /users/42 — обновить данные пользователя
DELETEDeleteDELETE /users/42 — удалить пользователя

Это соглашение стало стандартом проектирования веб-интерфейсов программирования приложений и используется подавляющим большинством публичных API.

Фреймворки и ORM

Практически все современные веб-фреймворки предоставляют готовые механизмы CRUD-операций. В Django (Python) класс ModelAdmin и generic-представления автоматически генерируют интерфейсы для создания, просмотра, редактирования и удаления объектов. В Laravel (PHP) схожую функциональность提供ляет пакет Laravel Nova и генераторы ресурсов. В Ruby on Rails механизм scaffolding автоматически создаёт контроллеры и представления для CRUD-операций. ORM (объектно-реляционные отображения) — такие как SQLAlchemy, Hibernate, Entity Framework — инкапсулируют SQL-команды CRUD в методы объектов: session.add(), query.get(), obj.save(), session.delete().

Ограничения модели

CRUD описывает операции на уровне отдельных записей (или их наборов) и не отражает сложную бизнес-логику. Например, операция «оформить заказ» включает проверку наличия товара, расчёт стоимости, списание бонусов и создание записи в журнале — это выходит за рамки простого Create. Для описания таких сценариев применяют модели предметно-ориентированного проектирования (DDD), CQRS (Command Query Responsibility Segregation), разделяющую команды (изменяющие состояние) и запросы (только читающие данные), а также событийно-ориентированную архитектуру.

Применение

Модель CRUD используется повсеместно:

  • Веб-приложения — управление контентом, личные кабинеты, интернет-магазины;
  • Мобильные приложения — синхронизация локальных данных с сервером;
  • Операционные системы — работа с файлами (создание, чтение, перезапись, удаление);
  • Промышленные системы — учётные и учётно-бухгалтерские приложения;
  • Графические интерфейсы — формы ввода, таблицы с редактированием.

См. также

  • REST
  • SQL
  • ORM
  • CQRS
  • Предметно-ориентированное проектирование

Источники

  • Darbyshire R. The Language of Business // Journal of Object-Oriented Programming, 1998.
  • Fielding R. T. Architectural Styles and the Design of Network-based Software Architectures. University of California, Irvine, 2000.
  • Evans E. Domain-Driven Design: Tackling Complexity in the Heart of Software. Addison-Wesley, 2003.
  • Kleppmann M. Designing Data-Intensive Applications. O'Reilly Media, 2017.
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru