O que esta ferramenta faz
Uma amostra JSON vira um modelo Prisma.
{ "id": 1, "name": "Ada", "tags": ["admin"], "score": 9.5 }
model Root {
id Int @id
name String
tags String[]
score Float
}
O modelo sozinho não é um schema.prisma: um arquivo que funciona tem também um bloco datasource e um generator. Eles descrevem o seu banco e o seu cliente, dos quais uma carga JSON nada diz.
Todo modelo recebe um identificador
O Prisma recusa um modelo sem @id (ou @@id): o prisma validate para ali. Portanto:
- um
iddo tipoIntouStringvira o identificador; - nenhum
ide um é acrescentado:id Int @id @default(autoincrement()); - um
idde outro tipo — flutuante, booleano, objeto aninhado — é renomeado e guarda a sua chave original:
model Root {
id Int @id @default(autoincrement())
id2 Float @map("id")
name String
}
Esse último caso produzia um modelo sem identificador nenhum: Prisma de aparência válida que a ferramenta de linha de comando recusa. Encontrado ao escrever esta página e corrigido.
Nada que pareça uma relação é inventado
Um objeto aninhado vira uma coluna Json. Poderia ter sido uma relação com outra tabela, e adivinhar seria inventar um modelo, uma chave estrangeira e um sentido a partir de um documento. O mesmo para um array de objetos e para um array heterogêneo.
Uma lista homogênea de escalares ganha, sim, lista nativa — String[], Int[] —, que existe no PostgreSQL, no CockroachDB e no MongoDB. No MySQL ou no SQLite, troque-a por Json: a saída não tem datasource, então não pode saber qual você usa.
Nomes, nulidade e o que uma amostra não diz
Os nomes de campo passam a camelCase, e @map guarda a chave original sempre que as duas diferem: content-type vira contentType @map("content-type") e o nome da sua coluna não muda. Duas chaves que dão o mesmo camelCase levam sufixo em vez de se fundirem.
Só null produz uma coluna opcional, Json?. Todo o resto é obrigatório, porque a amostra trazia um valor — e uma amostra é o lugar errado para descobrir que uma coluna aceita nulos. O ? tem um caractere, e cabe a você.
Privado por padrão
Tudo é executado localmente no seu navegador com JavaScript. Os seus dados nunca são enviados para um servidor, o que torna a ferramenta segura para conteúdo sensível e funciona offline.