Освоение Prisma и связей SQL

Prisma упрощает работу с базами данных, если понимать, как она обрабатывает связи. Вот руководство по схемам, отношениям и запросам.

Схема и связи

Связи определяют, как связаны ваши данные.

  • One-to-Many: Один пользователь имеет много постов. Модель Post содержит внешний ключ (authorId). Модель User содержит только ссылку.
  • Many-to-Many: Один пользователь может принадлежать многим проектам, а один проект может иметь много пользователей. Для этого нужна промежуточная таблица (ProjectMember). Эта таблица содержит внешние ключи для обеих сторон.
  • Self-Relations: Один пользователь подписывается на другого. Используйте именованные отношения, такие как "Follower" и "Following", чтобы Prisma понимала, какая сторона есть какая.

Основные методы запросов

  • findUnique: Используйте для записей с полями @id или @unique. Возвращает null, если ничего не найдено.
  • findMany: Используйте для получения списка. Вы можете фильтровать, сортировать и использовать пагинацию.
  • findFirst: Используйте, когда вам нужна одна запись, но фильтр не по уникальному полю.

Фильтрация с помощью where

Предложение where напрямую сопоставляется с SQL.

  • Сравнение: Используйте gt (больше), lt (меньше) или gte (больше или равно).
  • Поиск текста: Используйте contains с параметром mode: insensitive для поиска без учета регистра.
  • Логические операторы: Используйте OR, AND или NOT для комбинирования условий.
  • Фильтры отношений: Используйте some, every или none для фильтрации на основе связанных данных. some находит записи, где хотя бы одно отношение соответствует условию.

Управление данными: select против include

  • select: Выбирайте именно те поля, которые нужно вернуть. Это делает ваши данные «легкими» и безопасными.
  • include: Подключайте связанные данные к результату. Это позволяет получать вложенные объекты.
  • Примечание: Вы не можете использовать select и include на одном уровне. Нужно выбрать что-то одно. Однако вы можете использовать select внутри include, чтобы выбрать конкретные поля из связанного отношения.

Операции и безопасность

  • createMany: Создает сразу много строк. Это быстро, но не поддерживает вложенную запись.
  • upsert: Обновляет запись, если она существует, или создает её, если нет. Отлично подходит для корзин покупок.
  • update: Используйте атомарные операции, такие как increment или decrement, чтобы изменять числа без ошибок.
  • $transaction: Группирует несколько операций записи. Если одна часть завершится ошибкой, вся группа будет откачена. Это предотвращает ошибки частичного обновления данных.

Пагинация

Комбинируйте «take» и «skip», чтобы создавать страницы.

  • take: сколько записей отображать.
  • skip: сколько записей пропустить.

Источник: https://dev.to/chinwuba_jeffrey/understanding-prisma-and-sql-relationships-schema-and-querying-l7k