100 % lokal — Ihre Daten verlassen nie Ihren Browser

JSON in Prisma — ein Modell, das migriert

Ein JSON-Beispiel in ein Prisma-Modell verwandeln. Der Identifier, den jedes Modell braucht, ist da — prisma validate geht durch, die Migration läuft.

Sofort Privat Null Cookies

JSON-Eingabe

Prisma-Ausgabe

Was dieses Werkzeug tut

Aus einer JSON-Probe wird ein Prisma-Modell.

{ "id": 1, "name": "Ada", "tags": ["admin"], "score": 9.5 }
model Root {
  id    Int      @id
  name  String
  tags  String[]
  score Float
}

Das Modell allein ist kein schema.prisma: eine funktionierende Datei hat auch einen datasource- und einen generator-Block. Sie beschreiben Ihre Datenbank und Ihren Client, von denen eine Nutzlast nichts sagt.

Jedes Modell bekommt eine Kennung

Prisma lehnt ein Modell ohne @id (oder @@id) ab: prisma validate hält dort an. Also:

  • ein id vom Typ Int oder String wird die Kennung;
  • gar kein id, und eines wird ergänzt: id Int @id @default(autoincrement());
  • ein id anderen Typs — Fließkommazahl, Wahrheitswert, verschachteltes Objekt — wird umbenannt und behält seinen ursprünglichen Schlüssel:
model Root {
  id   Int    @id @default(autoincrement())
  id2  Float  @map("id")
  name String
}

Der letzte Fall ergab bisher ein Modell ganz ohne Kennung: gültig aussehendes Prisma, das die Kommandozeile ablehnt. Beim Schreiben dieser Seite gefunden und behoben.

Nichts, was nach Relation aussieht, wird erfunden

Ein verschachteltes Objekt wird eine Json-Spalte. Es hätte eine Relation auf eine andere Tabelle sein können, und Raten hieße, aus einem Dokument ein Modell, einen Fremdschlüssel und eine Richtung zu erfinden. Ebenso bei einem Array von Objekten und bei einem gemischten Array.

Eine gleichartige Liste von Skalaren bekommt sehr wohl eine native Liste — String[], Int[] —, die es in PostgreSQL, CockroachDB und MongoDB gibt. Unter MySQL oder SQLite ändern Sie sie zu Json: die Ausgabe hat keine datasource und kann daher nicht wissen, welche Sie benutzen.

Namen, Nullbarkeit und was eine Probe nicht sagt

Feldnamen werden camelCase, und @map bewahrt den ursprünglichen Schlüssel, sobald beide sich unterscheiden: content-type wird contentType @map("content-type"), und Ihr Spaltenname bleibt. Zwei Schlüssel, die denselben camelCase ergeben, bekommen ein Suffix, statt verschmolzen zu werden.

Nur null erzeugt eine optionale Spalte, Json?. Alles andere ist Pflicht, weil die Probe einen Wert hatte — und eine Probe ist der falsche Ort, um zu erfahren, dass eine Spalte nullbar ist. Das ? ist ein Zeichen, und es gehört Ihnen.

Datenschutz ab Werk

Alles läuft lokal in deinem Browser mit JavaScript. Deine Daten werden nie hochgeladen, wodurch das Tool auch für sensible Inhalte sicher ist und offline funktioniert.

Häufige Fragen

Woher kommt das `id Int @id @default(autoincrement())`?
Aus Prismas Regel, dass jedes Modell eine Kennung braucht. Hat Ihre Probe ein `id` als Ganzzahl oder Zeichenkette, wird es die Kennung. Sonst wird eine ergänzt, und ein `id` anderen Typs wird umbenannt und behält per `@map("id")` seinen Schlüssel. Ohne das sah das Modell richtig aus, und `prisma validate` lehnte es ab.
Warum ist mein verschachteltes Objekt eine `Json`-Spalte statt einer Relation?
Weil eine Probe keine Relation zeigen kann. `{"author": {"name": "Ada"}}` kann ein Fremdschlüssel auf eine `Author`-Tabelle sein oder ein Block, der in die Zeile gehört. Tabelle, Schlüssel und Richtung zu erfinden wären drei Vermutungen. `Json` bewahrt die Daten und überlässt Ihnen die Modellierung.
`String[]` lässt sich unter MySQL nicht erzeugen. Warum steht es da?
Weil eine gleichartige Liste von Skalaren in PostgreSQL, CockroachDB und MongoDB einen nativen Typ hat, den Prisma `String[]` schreibt. MySQL und SQLite kennen keine Skalarlisten: dort ändern Sie das Feld zu `Json`. Der Generator kann Ihre Datenquelle nicht kennen — in der Ausgabe steht überhaupt kein `datasource`-Block.

Ähnliche Konverter