SQL to Prisma

Conversor de SQL DDL a Prisma Schema (Modelos, Relaciones y Enums) Guía para Desarrolladores

Transforme instrucciones SQL CREATE TABLE DDL en esquemas limpios para Prisma ORM con modelos, relaciones, atributos de campo y enums.

Presets:
Proveedor de Base de Datos:
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 Analizados5 models generated
Relaciones Deducidas4 foreign keys resolved
Enums Detectados2 typed enums

Privacidad 100% del Lado del Cliente

Sin envíos a servidores ni conexiones a bases de datos. Todo el análisis de SQL y la compilación del esquema de Prisma se ejecutan en el navegador.

Resolución Inteligente de Relaciones y Claves

Detecta claves foráneas individuales y compuestas, generando directivas @relation de Prisma, referencias bidireccionales y restricciones @@id / @@unique.

Motor DDL Multidialecto

Compatible con PostgreSQL, MySQL, SQLite y SQL Server, incluyendo secuencias SERIAL, UUIDs por defecto, tipos nativos, índices y enums.

Referencia técnica y guía de arquitectura

Conversor de SQL DDL a Prisma Schema (Modelos, Relaciones y Enums) Guía para Desarrolladores — Guía de referencia

Transforme instrucciones SQL CREATE TABLE DDL en esquemas limpios para Prisma ORM con modelos, relaciones, atributos de campo y enums.

Parámetros clave y controles

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

Dialecto SQL de destino para analizar definiciones de tablas, tipos de datos específicos (como SERIAL, VARCHAR, DATETIME2, JSONB) y cláusulas de valores predeterminados.

Por defecto: PostgreSQL
Convención de Nombres (Naming & Case Convention)Enum (camelCase y PascalCase con @map | Conservar identificadores originales)

Convierte automáticamente tablas y columnas en snake_case al formato estándar de Prisma (PascalCase para modelos y camelCase para campos), insertando directivas @@map y @map para preservar compatibilidad con la base de datos.

Por defecto: camelCase & PascalCase with @map
Modo de Generación de Relaciones (Relation Mode)Enum (Relaciones bidireccionales @relation | Solo claves foráneas escalares)

Define si las restricciones de clave foránea generan relaciones de objetos bidireccionales en Prisma con matrices fields y references explícitas, o mantienen solo campos escalares.

Por defecto: Relaciones bidireccionales @relation
Estrategia para Enums (Enum Strategy)Enum (Enum de nivel superior de Prisma | String con comentarios)

Determina si los tipos ENUM de PostgreSQL y los ENUM a nivel de columna de MySQL se extraen como bloques enum independientes en Prisma o se convierten a tipos String estándar.

Por defecto: Enum de nivel superior de Prisma

Consejos profesionales y mejores prácticas

Preservar compatibilidad de bases de datos mediante @@map y @map

Habilitar la convención camelCase y PascalCase permite que su cliente TypeScript siga los estándares de JavaScript sin alterar la estructura física de las tablas SQL gracias a @@map('nombre_tabla') y @map('nombre_columna').

Desambiguar claves foráneas múltiples hacia una misma tabla con nombres de relación

Cuando un modelo posee múltiples claves foráneas que apuntan a la misma tabla (como author_id y reviewer_id hacia users), asigne nombres de relación explícitos como @relation('PostAuthor', fields: [authorId], references: [id]) para evitar el error de validación P1012.

Mapear claves primarias compuestas e índices a @@id y @@unique

Verifique que las claves primarias compuestas como PRIMARY KEY (user_id, organization_id) se transformen en @@id([userId, organizationId]) y que los índices múltiples se reflejen como @@index([fieldA, fieldB]).

Errores comunes y solución de problemas

Error de validación de Prisma Schema P1012: 'El campo de relación no se puede analizar o falta el campo opuesto'

Prisma exige campos opuestos en ambos modelos vinculados por una relación de objeto. Asegúrese de incluir todas las instrucciones CREATE TABLE relacionadas en el código DDL para que el analizador sintetice las relaciones bidireccionales.

Tipos de datos no admitidos o específicos del dialecto (p. ej., GEOMETRY, TSVECTOR)

Prisma admite la sintaxis Unsupported('tipo_especifico') para tipos de bases de datos que no cuentan con un equivalente escalar nativo. Configure estos campos como Unsupported o asígnelos a Bytes o String según las necesidades de su aplicación.

Preguntas frecuentes (FAQ)

¿Cómo se transforman las claves foráneas SQL en relaciones de Prisma?▼

Al detectar una cláusula FOREIGN KEY (author_id) REFERENCES users(id), el conversor genera tanto el campo escalar (authorId Int @map('author_id')) como el campo de relación (author User @relation(fields: [authorId], references: [id])) e inserta el campo inverso (posts Post[]) en el modelo User.

¿Qué diferencia existe entre este conversor y la introspección con `prisma db pull`?▼

`prisma db pull` requiere conectividad de red activa y credenciales de acceso a una instancia de base de datos en ejecución. Este conversor opera íntegramente en el navegador sobre archivos DDL de migración, sin requerir acceso a servidores de base de datos.

¿Cómo se representan las claves primarias compuestas y las restricciones de unicidad?▼

Las claves primarias compuestas PRIMARY KEY (col1, col2) se asignan a directivas @@id([col1, col2]), las restricciones únicas compuestas a @@unique([col1, col2]) y los índices secundarios a @@index([col1, col2]).

¿Admite el conversor valores predeterminados y secuencias autoincrementales de SQL?▼

Sí. AUTO_INCREMENT (MySQL) y SERIAL / IDENTITY (PostgreSQL/SQL Server) se convierten en @default(autoincrement()), DEFAULT CURRENT_TIMESTAMP se convierte en @default(now()) y los literales constantes se asignan a atributos @default(...).

Herramientas y utilidades relacionadas

Todas las herramientas →
Conversor de Docker Run a Docker Compose (CLI a YAML) Guía para Desarrolladoresdeveloper

Convierte parámetros de comandos docker run, montajes de volúmenes, asignaciones de puertos y variables de entorno en servicios limpios de docker-compose.yml listos para producción.

Abrir herramienta→
Guía para Desarrolladores del Generador de Upstream y Balanceo de Carga Nginxdeveloper

Genere bloques upstream de Nginx optimizados para producción con round-robin, least_conn, ip_hash, keepalive y comprobaciones pasivas de estado.

Abrir herramienta→
Conversor de Cron a Kubernetes CronJob YAML y Generador de Especificacionesdeveloper

Transforme expresiones crontab estándar en manifiestos Kubernetes CronJob listos para producción con restartPolicy, concurrencyPolicy, cuotas de recursos y soporte de zona horaria.

Abrir herramienta→
Generador de Esquemas GraphQL SDL desde JSON (Types, Queries e Inputs) - Guía para Desarrolladoresdeveloper

Genera definiciones de tipos de objeto, tipos de entrada (inputs) y esquemas de consultas en GraphQL SDL a partir de objetos JSON.

Abrir herramienta→
Generador de Reglas de Alerta y Registro de Prometheus (PromQL) - Guía para Desarrolladoresdeveloper

Construya y valide visualmente reglas de alerta PromQL, reglas de registro, umbrales, etiquetas y anotaciones de runbook.

Abrir herramienta→
Guía para Desarrolladores: Generador de Tipos de Resolver TypeScript desde GraphQL SDLdeveloper

Genera interfaces de resolver fuertemente tipadas en TypeScript, argumentos de query/mutation y tipos de contexto a partir de esquemas GraphQL SDL.

Abrir herramienta→