← Назад к вопросам

Что такое Prisma schema?

2.3 Middle🔥 111 комментариев
#JavaScript Core

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI4 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое Prisma Schema?

Prisma schema — это центральный файл конфигурации в ORM Prisma, который описывает структуру данных вашего приложения в декларативном, легко читаемом формате. Он служит мостом между вашей базой данных и объектной моделью приложения, определяя модели данных, их отношения и конфигурацию подключения к базе данных. Этот файл, обычно называемый schema.prisma, является основой для работы Prisma Client (генератора запросов) и Prisma Migrate (инструмента миграции).

Структура и ключевые компоненты Prisma Schema

Файл схемы состоит из трех основных секций:

1. datasource — Конфигурация подключения к базе данных

Эта секция определяет, как Prisma подключается к вашей базе данных.

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}
  • provider: указывает тип базы данных (postgresql, mysql, sqlite, mongodb, cockroachdb).
  • url: строка подключения. Часто использует переменные окружения (env()) для безопасности.

2. generator — Конфигурация генератора клиента

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

generator client {
  provider = "prisma-client-js"
}

Это стандартный генератор для JavaScript/TypeScript, создающий PrismaClient.

3. model — Определение моделей данных

Самая важная часть, где описываются сущности (таблицы в SQL, коллекции в MongoDB) и их поля.

model User {
  id        Int      @id @default(autoincrement())
  email     String   @unique
  name      String?
  posts     Post[]
  createdAt DateTime @default(now())
}

model Post {
  id        Int      @id @default(autoincrement())
  title     String
  content   String?
  author    User     @relation(fields: [authorId], references: [id])
  authorId  Int
}

Ключевые аспекты определения моделей:

  • Поля и типы: Каждое поле имеет тип (Int, String, Boolean, DateTime, etc.) и может быть обязательным или опциональным (String?).
  • Атрибуты: Специальные декораторы, определяющие поведение поля.
    *   `@id` — обозначает первичный ключ.
    *   `@unique` — обеспечивает уникальность значения.
    *   `@default` — устанавливает значение по умолчанию (например, `autoincrement()` или `now()`).
    *   `@relation` — явно определяет связь между моделями, указывая поля для соединения.
  • Отношения: Prisma поддерживает все основные типы связей:
    *   **Один-к-одному** (`User? Profile?`)
    *   **Один-к-многим** (`User Post[]` — один пользователь имеет много постов)
    *   **Многие-к-многим** (явные через промежуточную модель или implicit в MongoDB).

Преимущества использования Prisma Schema

  • Декларативный подход: Схема является единым, централизованным источником истины о структуре данных, что уменьшает расхождения между кодом и БД.
  • Безопасность типов: После генерации Prisma Client на основе схемы, вы получаете полностью типизированный API для запросов. TypeScript знает структуру каждой модели и отношения.
  • Независимость от БД: Схема написана на универсальном языке Prisma. Смена provider в datasource (например, с PostgreSQL на MySQL) может потребовать лишь небольших корректировок, а не переписывания всего кода доступа к данным.
  • Инструменты миграции: Prisma Migrate использует схему для создания и применения файлов миграции БД (prisma migrate dev), автоматически переводя декларативные модели в SQL-команды для создания/изменения таблиц.
  • Интроспекция: При работе с уже существующей базой данных, вы можете использовать prisma db pull для интроспекции — автоматического генерации схемы Prisma на основе текущей структуры БД.

Пример более сложной схемы с отношениями и enum

enum Role {
  USER
  ADMIN
}

model Profile {
  id     Int    @id @default(autoincrement())
  bio    String?
  userId Int    @unique
  user   User   @relation(fields: [userId], references: [id])
}

model User {
  id       Int      @id @default(autoincrement())
  email    String   @unique
  role     Role     @default(USER)
  profile  Profile?
}

Как работает процесс разработки с Prisma Schema

  1. Вы редактируете schema.prisma, определяя новые модели или изменяя существующие.
  2. Выполняете команду prisma migrate dev --name add_profile_model для создания миграции и применения изменений к базе данных.
  3. Выполняете prisma generate для создания (или обновления) Prisma Client на основе новой схемы.
  4. В своем приложении используете новый типизированный клиент для выполнения запросов: prisma.user.findMany({ include: { profile: true } }).

Таким образом, Prisma schema является не просто файлом конфигурации, а мощным декларативным языком моделирования данных, который обеспечивает согласованность, типизацию и эффективную работу между вашим кодом и базой данных на протяжении всего жизненного цикла приложения.

Что такое Prisma schema? | PrepBro