Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 967новых вакансий за сутки·94 749вакансий открыто сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 308
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 402 кандидата открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python17 098
  • Облачные технологии13 740
  • QA вакансии3 442
  • Backend вакансии2 113
  • Инженер данных1 769
  • Продакт-менеджер1 215

Разработка

  • Android1 857
  • iOS1 692
  • Fullstack вакансии980
  • AI вакансии956
  • Frontend вакансии750
  • Mobile вакансии44

По стеку

  • Go8 640
  • Java6 540
  • Node.js2 016
  • .NET1 705
  • Kotlin1 619
  • Rust1 458
  • C#701
  • PHP681
  • C++564

DevOps и инфраструктура

  • Kubernetes7 596
  • DevOps вакансии6 045
  • Linux-инфраструктура5 418
  • Terraform / IaC4 165
  • CI/CD3 212
  • Мониторинг и Observability1 759
  • SRE564
  • Кибербезопасность430

Аналитика и данные

  • Data Scientist1 093
  • Бизнес-аналитик914
  • Аналитик данных851
  • Системный аналитик150

Другие направления

  • Проджект-менеджер570
  • UI/UX дизайн144
  • Ручное тестирование14

По регионам

  • Вакансии в США45 435
  • Вакансии в Европе23 707
  • Вакансии в Канаде4 503
  • Работа в России3 905

По формату

  • Удалённые вакансии76 073
  • Релокация в США45 435
  • Гибридная работа12 406
  • Офисная работа7 080

По уровню

  • Senior вакансии42 979
  • Middle вакансии21 322
  • Junior вакансии6 799

Сейчас нанимают

Все компании
  • Wise192 вакансии
  • Rakuten189 вакансий
  • ASML165 вакансий
  • Grab139 вакансий
  • Celonis39 вакансий
  • Spotify36 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме PrismaВсе вопросы
PrismaJuniorТеория

Как структурирована схема Prisma (schema.prisma)? Что такое модели, поля и связи (relations)?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

schema.prisma состоит из трёх блоков: datasource (подключение к БД), generator (настройка кодогенерации) и model (описание таблиц с полями, типами и атрибутами). Поля-связи виртуальные — реальные колонки FK создаются через @relation.

datasource — подключение к базе данных

datasource db {
  provider = "postgresql" // postgresql | mysql | sqlite | sqlserver | mongodb | cockroachdb
  url      = env("DATABASE_URL") // строка подключения из переменной окружения
}

Значение DATABASE_URL обычно хранится в файле .env и имеет формат: postgresql://user:password@localhost:5432/dbname.

Структура файла schema.prisma

Файл schema.prisma — единственный источник истины о структуре БД и настройках Prisma. Он состоит из трёх блоков: datasource, generator и model.

generator — настройка генерации клиента

generator client {
  provider        = "prisma-client-js"
  // опционально: выходная директория клиента
  output          = "../src/generated/prisma"
  // опционально: preview-фичи
  previewFeatures = ["fullTextSearch", "metrics"]
}

После изменения схемы нужно запустить npx prisma generate, чтобы пересоздать типизированный клиент.

model — описание таблиц

Каждая модель соответствует таблице в БД. Поля объявляются в формате: имя Тип атрибуты:

model User {
  id        Int      @id @default(autoincrement())
  email     String   @unique
  name      String?             // опциональное поле (NULL в БД)
  role      Role     @default(USER) // enum с дефолтом
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
  posts     Post[]              // виртуальное поле-связь

  @@index([email])              // индекс на уровне таблицы
  @@map("users")                // настоящее имя таблицы в БД
}

Типы полей

  • Скалярные: String, Int, Float, Boolean, DateTime, Json, Bytes, BigInt, Decimal
  • Модели-связи: ссылки на другие модели (Post[], User?)
  • Перечисления: enum Role { USER ADMIN }

Атрибуты полей

model Post {
  id        Int      @id @default(autoincrement()) // первичный ключ, автоинкремент
  uuid      String   @default(uuid())              // UUID по умолчанию
  cuid      String   @default(cuid())              // CUID по умолчанию
  title     String   @db.VarChar(255)              // нативный SQL-тип
  content   String?  @db.Text
  published Boolean  @default(false)
  authorId  Int
  author    User     @relation(fields: [authorId], references: [id], onDelete: Cascade)
}

Enum

enum Role {
  USER
  ADMIN
  MODERATOR
}

Атрибуты уровня модели

model UserProfile {
  userId   Int
  tenantId Int
  data     String

  @@id([userId, tenantId])               // составной первичный ключ
  @@unique([userId, tenantId])           // составной уникальный ключ
  @@index([tenantId])                    // индекс
  @@map("user_profiles")                 // имя таблицы в БД
}

Полный рабочий пример

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

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

enum Status {
  DRAFT
  PUBLISHED
  ARCHIVED
}

model Author {
  id    Int    @id @default(autoincrement())
  name  String
  posts Post[]
}

model Post {
  id       Int      @id @default(autoincrement())
  title    String
  status   Status   @default(DRAFT)
  authorId Int
  author   Author   @relation(fields: [authorId], references: [id])

  @@index([status, authorId])
}

Подводные камни

  • Поля-связи (например, posts Post[]) — виртуальные: они не создают колонок в БД, а используются только в Prisma Client для навигации. Реальная колонка всегда на стороне с @relation(fields: [...]).
  • Тип Json в PostgreSQL хранится как jsonb, но фильтрация по вложенным ключам JSON в Prisma ограничена. Сложные JSON-запросы лучше выполнять через $queryRaw.
  • @db.VarChar(255) и другие нативные аннотации зависят от СУБД — они нарушают переносимость схемы между PostgreSQL и MySQL.
  • Переименование модели или поля без @@map/@map приведёт к DROP + CREATE таблицы/колонки в миграции, а не к RENAME — это потеря данных.
  • Enum в PostgreSQL создаётся как отдельный тип. Добавление нового значения в enum — не обратимо совместимая операция в старых версиях PostgreSQL (до 12).
  • @updatedAt управляется Prisma на уровне приложения, а не триггером БД. Если запись обновить обходя Prisma (прямым SQL), поле не обновится.
  • Файл schema.prisma не поддерживает импорты из других файлов — вся схема должна быть в одном файле (или использовать preview-фичу prismaSchemaFolder).

Типичные ошибки

  • Путает Prisma Client API с гарантиями базы данных: индексы, блокировки и isolation level не создаются магически.
  • Не объясняет, где в lifecycle находится schema.prisma, models, fields и relations.
  • Не разделяет validation, authorization, business logic и persistence.
  • Игнорирует ошибки, лимиты входных данных, observability и тестирование.

Что проверяет интервьюер

  • Может объяснить schema.prisma, models, fields и relations на примере кода.
  • Называет ключевые API: model, @id, @relation.
  • Отделяет ORM/query builder поведение от реального поведения СУБД.
  • Видит production-риски: безопасность, отказоустойчивость, логирование и тесты.

Как вы знаете этот вопрос?

Проверить себя по теме Prisma →

Источники

  • https://www.prisma.io/docs/orm/prisma-schema/overview
  • https://www.prisma.io/docs/orm/prisma-schema/data-model/models
  • https://www.prisma.io/docs/orm/prisma-schema/data-model/relations
←Предыдущий вопросКак определить связи один-к-одному, один-ко-многим и многие-ко-многим в Prisma?Следующий вопрос→Что такое Prisma ORM и чем он отличается от традиционных ORM, таких как Sequelize или TypeORM?

Связанные темы

Prismadatabase-designtyping

Частые вопросы на собеседовании

  • Как Prisma Client обеспечивает типобезопасность? Как генерируются типы?
  • Что такое транзакции в Prisma? Как использовать prisma.$transaction() для интерактивных и batch-транзакций?
  • Что такое Prisma Migrate? Чем отличаются prisma migrate dev и prisma migrate deploy?
  • Как определить связи один-к-одному, один-ко-многим и многие-ко-многим в Prisma?