Qué hace esta herramienta
Una muestra JSON pasa a ser un modelo de Prisma.
{ "id": 1, "name": "Ada", "tags": ["admin"], "score": 9.5 }
model Root {
id Int @id
name String
tags String[]
score Float
}
El modelo solo no es un schema.prisma: un archivo que funciona lleva además un bloque datasource y uno generator. Describen tu base y tu cliente, de los que una carga JSON no dice nada.
Todo modelo recibe un identificador
Prisma rechaza un modelo sin @id (o @@id): prisma validate se detiene ahí. Por tanto:
- un
idde tipoIntoStringpasa a ser el identificador; - si no hay
id, se añade uno:id Int @id @default(autoincrement()); - un
idde otro tipo —flotante, booleano, objeto anidado— se renombra y conserva su clave original:
model Root {
id Int @id @default(autoincrement())
id2 Float @map("id")
name String
}
Ese último caso producía un modelo sin identificador alguno: Prisma de apariencia válida que la herramienta de línea de comandos rechaza. Encontrado al escribir esta página y corregido.
No se inventa nada que parezca una relación
Un objeto anidado pasa a columna Json. Podría haber sido una relación con otra tabla, y adivinarlo sería inventar un modelo, una clave foránea y un sentido a partir de un documento. Lo mismo para un array de objetos y para un array heterogéneo.
Una lista homogénea de escalares sí recibe lista nativa —String[], Int[]—, que existe en PostgreSQL, CockroachDB y MongoDB. En MySQL o SQLite, pásala a Json: la salida no tiene datasource, así que no puede saber cuál usas.
Nombres, nulabilidad y lo que una muestra no dice
Los nombres de campo pasan a camelCase, y @map conserva la clave original en cuanto ambas difieren: content-type pasa a contentType @map("content-type") y el nombre de tu columna no cambia. Dos claves que dan el mismo camelCase llevan sufijo en vez de fundirse.
Solo null produce una columna opcional, Json?. Todo lo demás es obligatorio, porque la muestra traía un valor, y una muestra es el sitio equivocado para enterarse de que una columna admite nulos. El ? es un carácter, y te toca a ti.
Privado por diseño
Todo se ejecuta localmente en tu navegador con JavaScript. Tus datos nunca se suben a un servidor, lo que hace que la herramienta sea segura para contenido sensible y funcione sin conexión.