Освоение 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