ORM

ORM (Object Relational Mapping) - подход (библиотека, фреймворк), позволяющий абстрагироваться от деталей использования SQL и работать с БД как с коллекцией объектов, с их свойствами и связями. ORM фреймворки предоставляют возможности делать CRUD операции над моделью в вызов одного метода. Для этого надо только описать соответствия полей модели к колонкам и связям в базе данных.

ORM поддерживают все необходимые типы связей между моделями и позволяют автоматически получать и сохранять связанные модели.

  • Один к одному: Employee -> Passport у одного сотрудника только один паспорт. Паспорта в отдельной табличке.
  • Один ко многим: TodoList -> TodoItem в одном списке много задач. Связь через поле TodoItem.listId
  • Много по многим: Order -> Product в заказе много товаров. Один товар может быть во многих заказах. Связь через промежуточную таблицу order_products. Каждая запись в ней содержит orderId и productId. Для одного заказа в ней будет столько записей, сколько товаров в заказе.

Самые популярные ORM для Node.js#

Q: Какой ORM вы используете?#

Maksym Shekhovets#

для mysql -> npm mysql2 -> там уже из коробки async/await для простого обычно хватает библиотек оберток вокруг драйверов если идти по пути ORM/ODM -> то рекомендую посмотреть в сторону https://typeorm.io/#/

для MongoDB -> https://mongoosejs.com/ - пока лучше не видел

никогда не работал, но считается неплохой: https://sequelize.org/

еще мне очень зашел вот этот фреймворк NestJS, у него есть там еще парочка поддерживаемых ORM/ODM в списке: https://docs.nestjs.com/techniques/database

Nazarii Besiedovskyi#

Ну і не забуваємо про класику https://www.npmjs.com/package/pg

Vladislav Kozlenko#

Теж pg юзаю для своїх пет проектів. Швидко і просто))

Vladimir Ryhlyuk#

я бы предложил разделить ознакомление интернов с Node.js и SQL на следующие логические этапы:

  1. использование вручную написанных SQL запросов в коде. эта часть обязательна, потому что должно появиться понимание, как оно на самом деле работает. встречал ситуации, когда при написании кода на Ruby разработчики не замечали, что на самом деле в базу отправляется множество запросов, которые сильно замедляли работу приложения. сюда лучше добавить краткое введение в транзакции.
  2. использование query builder, например, Knex.js. можно хотя бы обзорно посмотреть на несколько вариантов. в этом случае мы работаем не просто с SQL в виде текста, а уже с кодом. но это еще не ORM, которая за нас всё решает, как нам нужно что-то сделать. мы просто формируем SQL запросы при помощи кода.
  3. использование ORM, например Sequelize или Prisma. здесь мы уже работаем с объектами и все операции должны выполняться при помощи ORM. нужно учесть, что в реальных проектах иногда приходится "бороться с ORM", а точнее с поведением ORM, которое разработчики не ожидали.