PassFront
  1. PassFront
  2. База знаний
  3. Продвинутые темы

Сравни подходы для доступа к базе данных из прикладного кода и объясни, когда какой подход выбрать.

Продвинутые темы

Подходы доступа к БД из кода: сырой SQL (полный контроль), query builder (программный SQL), ORM (объекты вместо SQL). Выбор — по сложности запросов, скорости разработки и производительности.

Подходы

Сырой SQL

Писать SQL-запросы напрямую:

db.query('SELECT * FROM users WHERE id = $1', [id]);
  • Плюсы: полный контроль, максимальная производительность, любые сложные запросы.
  • Минусы: ручное маппинг, риск SQL-инъекций (нужны параметры), больше кода, привязка к диалекту БД.
  • Когда: сложные оптимизированные запросы, аналитика.

Query Builder

Программное построение SQL (Knex, Kysely):

db('users').where('id', id).select('*');
  • Плюсы: типобезопасность, защита от инъекций, гибкость, ближе к SQL.
  • Минусы: всё ещё думаешь в терминах SQL.
  • Когда: нужен контроль над запросами + удобство.

ORM (Object-Relational Mapping)

Работа с объектами вместо SQL (Prisma, TypeORM, Sequelize):

prisma.user.findUnique({ where: { id }, include: { posts: true } });
  • Плюсы: быстрая разработка, типобезопасность, миграции, связи, защита от инъекций.
  • Минусы: абстракция скрывает SQL, риск неэффективных запросов (N+1), сложные запросы неудобны.
  • Когда: типовой CRUD, быстрая разработка.

Как выбирать

  • Типовой CRUD, скорость → ORM.
  • Контроль + удобство → query builder.
  • Сложные оптимизированные запросы, аналитика → сырой SQL.
  • Часто комбинируют: ORM для CRUD, сырой SQL для сложных мест.

Коротко для собеседования

Доступ к БД: сырой SQL (полный контроль, производительность, но ручной маппинг и риск инъекций — для сложных запросов), query builder (программный SQL, типобезопасность — контроль + удобство), ORM (объекты вместо SQL, быстрый CRUD, миграции, но риск N+1 — типовые операции). Выбор по сложности; часто комбинируют ORM + сырой SQL.

Другие вопросы раздела