SQL to Prisma

Conversor de SQL DDL para Prisma Schema (Modelos, Relações e Enums) Guia do Desenvolvedor

Converta comandos SQL CREATE TABLE DDL em esquemas limpos do Prisma ORM com modelos, relações, atributos de campo e enums.

Presets:
Provedor de Banco de Dados:
Entrada SQL DDL(5 tables)
datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

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

enum OrderStatus {
  PENDING
  PROCESSING
  PAID
  SHIPPED
  DELIVERED
  CANCELLED
}

enum UserRole {
  ADMIN
  CUSTOMER
  MERCHANT
}

model User {
  id           String        @id @default(uuid()) @db.Uuid
  email        String        @unique @db.VarChar(255)
  fullName     String?       @map("full_name") @db.VarChar(150)
  role         UserRole      @default("CUSTOMER")
  isVerified   Boolean       @default(false) @map("is_verified")
  metadata     Json?
  createdAt    DateTime      @default(now()) @map("created_at") @db.Timestamptz
  updatedAt    DateTime      @default(now()) @updatedAt @map("updated_at") @db.Timestamptz
  userProfile  UserProfile?
  orders       Order[]

  @@map("users")
}

model UserProfile {
  id               String   @id @default(uuid()) @db.Uuid
  userId           String   @unique @map("user_id") @db.Uuid
  avatarUrl        String?  @map("avatar_url") @db.VarChar(500)
  phoneNumber      String?  @map("phone_number") @db.VarChar(32)
  shippingAddress  String?  @map("shipping_address") @db.Text
  taxIdentifier    String?  @map("tax_identifier") @db.VarChar(64)
  user             User     @relation(fields: [userId], references: [id], onDelete: Cascade)

  @@map("user_profiles")
}

model Product {
  id              Int          @id @default(autoincrement())
  sku             String       @unique @db.VarChar(64)
  title           String       @db.VarChar(200)
  description     String?      @db.Text
  unitPrice       Decimal      @default(0.00) @map("unit_price") @db.Decimal(12, 2)
  inventoryCount  Int          @default(0) @map("inventory_count")
  isActive        Boolean      @default(true) @map("is_active")
  createdAt       DateTime     @default(now()) @map("created_at") @db.Timestamptz
  orderItems      OrderItem[]

  @@index([sku])
  @@map("products")
}

model Order {
  id             String       @id @default(uuid()) @db.Uuid
  customerId     String       @map("customer_id") @db.Uuid
  orderNumber    String       @unique @map("order_number") @db.VarChar(64)
  status         OrderStatus  @default("PENDING")
  totalAmount    Decimal      @default(0.00) @map("total_amount") @db.Decimal(12, 2)
  taxAmount      Decimal      @default(0.00) @map("tax_amount") @db.Decimal(10, 2)
  shippingNotes  String?      @map("shipping_notes") @db.Text
  createdAt      DateTime     @default(now()) @map("created_at") @db.Timestamptz
  updatedAt      DateTime     @default(now()) @updatedAt @map("updated_at") @db.Timestamptz
  customer       User         @relation(fields: [customerId], references: [id], onDelete: Restrict)
  orderItems     OrderItem[]

  @@index([status])
  @@map("orders")
}

model OrderItem {
  id         Int      @id @default(autoincrement())
  orderId    String   @map("order_id") @db.Uuid
  productId  Int      @map("product_id")
  quantity   Int      @default(1)
  unitPrice  Decimal  @map("unit_price") @db.Decimal(12, 2)
  subtotal   Decimal  @db.Decimal(12, 2)
  order      Order    @relation(fields: [orderId], references: [id], onDelete: Cascade)
  product    Product  @relation(fields: [productId], references: [id], onDelete: Restrict)

  @@unique([orderId, productId])
  @@map("order_items")
}
Modelos Analisados5 models generated
Relações Inferidas4 foreign keys resolved
Enums Detectados2 typed enums

Privacidade 100% no Cliente

Sem envios para servidores ou conexões remotas. A análise de SQL DDL e a geração de esquemas Prisma ocorrem totalmente no seu navegador.

Resolução Inteligente de Relações e Chaves

Detecta chaves estrangeiras simples e compostas, gerando anotações @relation tipadas, referências inversas bidirecionais e restrições @@id / @@unique.

Motor DDL Multi-Dialeto

Suporta sintaxes de PostgreSQL, MySQL, SQLite e SQL Server, convertendo tipos nativos, SERIAL, padrões UUID, índices compostos e enums.

Referência técnica e guia de arquitetura

Conversor de SQL DDL para Prisma Schema (Modelos, Relações e Enums) Guia do Desenvolvedor — Guia de referência

Converta comandos SQL CREATE TABLE DDL em esquemas limpos do Prisma ORM com modelos, relações, atributos de campo e enums.

Parâmetros principais e controles

Dialeto SQL (SQL Dialect)Enum (PostgreSQL | MySQL | SQLite | SQL Server | CockroachDB)

Dialeto SQL de destino utilizado para analisar definições de tabelas, tipos de dados específicos (como SERIAL, VARCHAR, DATETIME2, JSONB) e cláusulas de restrição DEFAULT.

Padrão: PostgreSQL
Convenção de Nomenclatura (Naming & Case Convention)Enum (camelCase e PascalCase com @map | Preservar identificadores originais)

Converte automaticamente tabelas e colunas em snake_case para o padrão idiomático do Prisma (PascalCase para modelos e camelCase para campos), inserindo diretivas @@map e @map para manter 100% de compatibilidade com o banco de dados.

Padrão: camelCase & PascalCase with @map
Modo de Geração de Relações (Relation Mode)Enum (Relações bidirecionais @relation | Apenas chaves estrangeiras escalares)

Define se restrições de chave estrangeira criam relações bidirecionais de objetos no Prisma com arrays fields e references explícitos, ou mantêm apenas campos escalares simples.

Padrão: Relações bidirecionais @relation
Estratégia para Enums (Enum Strategy)Enum (Enum de nível superior no Prisma | String com documentação)

Determina se tipos ENUM do PostgreSQL e declarações ENUM de coluna do MySQL são extraídos como blocos enum dedicados no Prisma ou convertidos para o tipo String comum.

Padrão: Enum de nível superior no Prisma

Dicas profissionais e melhores práticas

Preservar convenções do banco de dados existente usando @@map e @map

A conversão para camelCase e PascalCase permite que o código TypeScript gerado siga o padrão do ecossistema JavaScript, enquanto @@map('nome_tabela') e @map('nome_coluna') mantêm o banco SQL intacto sem exigir migrações arriscadas.

Desambiguar múltiplas chaves estrangeiras que apontam para a mesma tabela

Quando uma tabela contém duas ou mais chaves estrangeiras para a mesma entidade (ex.: author_id e reviewer_id referenciando users), forneça nomes explícitos de relação como @relation('PostAuthor', fields: [authorId], references: [id]) para evitar o erro P1012.

Mapear chaves primárias compostas e índices para @@id e @@unique

Certifique-se de que chaves primárias compostas como PRIMARY KEY (user_id, organization_id) sejam transpostas para @@id([userId, organizationId]) e índices compostos virem @@index([fieldA, fieldB]).

Problemas comuns e solução de problemas

Erro de validação do Prisma Schema P1012: 'O campo de relação não pôde ser analisado ou falta o campo oposto correspondente'

Relações de objeto no Prisma necessitam de campos complementares em ambos os modelos. Certifique-se de incluir todas as instruções CREATE TABLE relacionadas no DDL de entrada para que o conversor consiga sintetizar relações bidirecionais completas.

Tipos de dados não suportados ou específicos do dialeto (ex.: GEOMETRY, TSVECTOR)

O Prisma disponibiliza a diretiva Unsupported('tipo_nativo') para tipos específicos do banco de dados sem equivalente escalar direto. Mantenha esses campos como Unsupported ou mapeie-os para Bytes ou String.

Perguntas frequentes (FAQ)

Como as chaves estrangeiras SQL são transformadas em relações do Prisma?▼

Ao encontrar uma cláusula FOREIGN KEY (author_id) REFERENCES users(id), o conversor gera o campo escalar (authorId Int @map('author_id')), o campo virtual de relação (author User @relation(fields: [authorId], references: [id])) e insere o campo reverso (posts Post[]) no modelo User.

Qual a diferença entre este conversor e o comando `prisma db pull`?▼

O comando `prisma db pull` requer conexão de rede ativa e credenciais de acesso direto a uma instância de banco de dados em execução. Este conversor funciona 100% no navegador, transformando arquivos DDL de migração sem necessidade de conexão ou credenciais.

Como chaves primárias compostas e restrições de unicidade são representadas?▼

Chaves primárias compostas definidas com PRIMARY KEY (col1, col2) são convertidas em atributos de modelo @@id([col1, col2]), restrições de unicidade compostas viram @@unique([col1, col2]) e índices secundários viram @@index([col1, col2]).

O conversor oferece suporte a valores DEFAULT e sequências autoincrementais do SQL?▼

Sim. Cláusulas AUTO_INCREMENT (MySQL) e SERIAL / IDENTITY (PostgreSQL/SQL Server) são mapeadas para @default(autoincrement()), DEFAULT CURRENT_TIMESTAMP vira @default(now()) e valores literais padrão são convertidos para diretivas @default(...).

Ferramentas e utilitários relacionados

Todas as ferramentas →
Conversor de Docker Run para Docker Compose (CLI para YAML) Guia do Desenvolvedordeveloper

Converta flags de linha de comando docker run, mapeamentos de volume, portas e variáveis de ambiente em arquivos docker-compose.yml limpos e prontos para produção.

Abrir ferramenta→
Guia do Desenvolvedor: Gerador de Configuração Nginx Upstream e Balanceamento de Cargadeveloper

Gere blocos Nginx upstream prontos para produção com round-robin, least_conn, ip_hash, conexões keepalive e health check passivo.

Abrir ferramenta→
Conversor de Cron para Kubernetes CronJob YAML e Gerador de Especificaçõesdeveloper

Converta expressões crontab padrão em manifestos Kubernetes CronJob prontos para produção com restartPolicy, concurrencyPolicy, limites de recursos e suporte a fuso horário.

Abrir ferramenta→
Gerador de Esquemas GraphQL SDL a partir de JSON (Types, Queries e Inputs) - Guia do Desenvolvedordeveloper

Gere tipos de objeto, tipos de entrada (inputs) e esquemas de consulta na linguagem de definição de esquemas (SDL) do GraphQL a partir de JSON.

Abrir ferramenta→
Gerador de Regras de Alerta e Gravação Prometheus (PromQL) - Guia do Desenvolvedordeveloper

Construa e valide visualmente regras de alerta PromQL, regras de gravação (recording rules), limites, rótulos e anotações de runbook.

Abrir ferramenta→
Guia do Desenvolvedor: Gerador de Tipos de Resolver TypeScript a partir de GraphQL SDLdeveloper

Gere interfaces de resolver TypeScript fortemente tipadas, argumentos de query/mutation e tipos de contexto a partir de esquemas GraphQL SDL.

Abrir ferramenta→