CRUD — модель взаимодействия с данными¶
CRUD (аббревиатура от англ. create, read, update, delete — «создать, прочитать, обновить, удалить») — базовая модель операций над данными, описывающая четыре основных действия, которые выполняются с любым набором данных в информационной системе. Термин широко применяется в разработке программного обеспечения, баз данных и веб-приложений и обозначает минимально достаточный набор функций для работы с хранилищем информации.
¶Происхождение термина
Термин появился в индустрии программирования в конце 1970-х годов и связан с работами по проектированию систем управления базами данных. В 1983 году Джеймс Гэри (James Gary) в контексте баз данных использовал аббревиатуру CRUD для описания четырёх базовых операций. Позднее, в 1998 году, Ричард Дарбишилл (Richard Darbyshire) в статье «The Language of Business» закрепил термин в контексте объектно-ориентированного проектирования. В русскоязычной литературе аббревиатуру обычно транслитерируют как «крудо» или оставляют в латинской записи.
¶Четыре базовые операции
| Операция | Англ. | SQL-эквивалент | Описание |
|---|---|---|---|
| Создание | Create | INSERT | Добавление новой записи в хранилище |
| Чтение | Read (Retrieve) | SELECT | Получение существующих данных |
| Обновление | Update | UPDATE | Изменение уже существующей записи |
| Удаление | Delete | DELETE | Уничтожение записи из хранилища |
Операция 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-операция | Пример |
|---|---|---|
| POST | Create | POST /users — создать пользователя |
| GET | Read | GET /users/42 — получить пользователя с id 42 |
| PUT / PATCH | Update | PUT /users/42 — обновить данные пользователя |
| DELETE | Delete | DELETE /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.
