ORM
ORM (Object Relational Mapping) - подход (библиотека, фреймворк), позволяющий абстрагироваться от деталей использования SQL и работать с БД как с коллекцией объектов, с их свойствами и связями. ORM фреймворки предоставляют возможности делать CRUD операции над моделью в вызов одного метода. Для этого надо только описать соответствия полей модели к колонкам и связям в базе данных.
ORM поддерживают все необходимые типы связей между моделями и позволяют автоматически получать и сохранять связанные модели.
- Один к одному:
Employee -> Passport
у одного сотрудника только один паспорт. Паспорта в отдельной табличке. - Один ко многим:
TodoList -> TodoItem
в одном списке много задач. Связь через полеTodoItem.listId
- Много по многим:
Order -> Product
в заказе много товаров. Один товар может быть во многих заказах. Связь через промежуточную таблицуorder_products
. Каждая запись в ней содержитorderId
иproductId
. Для одного заказа в ней будет столько записей, сколько товаров в заказе.
#
Самые популярные ORM для Node.js- https://typeorm.io/#/
- https://sequelize.org/master/manual/model-basics.html
- https://www.prisma.io/docs/concepts/overview/what-is-prisma
- https://www.prisma.io/dataguide/database-tools/top-nodejs-orms-query-builders-and-database-libraries
#
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 на следующие логические этапы:
- использование вручную написанных SQL запросов в коде. эта часть обязательна, потому что должно появиться понимание, как оно на самом деле работает. встречал ситуации, когда при написании кода на Ruby разработчики не замечали, что на самом деле в базу отправляется множество запросов, которые сильно замедляли работу приложения. сюда лучше добавить краткое введение в транзакции.
- использование query builder, например, Knex.js. можно хотя бы обзорно посмотреть на несколько вариантов. в этом случае мы работаем не просто с SQL в виде текста, а уже с кодом. но это еще не ORM, которая за нас всё решает, как нам нужно что-то сделать. мы просто формируем SQL запросы при помощи кода.
- использование ORM, например Sequelize или Prisma. здесь мы уже работаем с объектами и все операции должны выполняться при помощи ORM. нужно учесть, что в реальных проектах иногда приходится "бороться с ORM", а точнее с поведением ORM, которое разработчики не ожидали.