100% ローカル — データがブラウザの外に出ることはありません

JSONをPrismaに変換|マイグレーションが通るモデルに

JSONのサンプルをPrismaのモデルに変換します。どのモデルにも要る識別子が必ず入るので、prisma validate が通り、マイグレーションもそのまま実行できます。

高速 プライベート Cookieゼロ

JSON 入力

Prisma 出力

このツールの動作

JSON の標本が Prisma の模型になります。

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

模型だけでは schema.prisma になりません。動くファイルには datasource と generator の区画も要ります。あなたのデータベースとクライアントを述べるもので、荷はそれについて何も語りません。

どの模型にも識別子が付く

Prisma は @id(または @@id)の無い模型を拒みます。prisma validate はそこで止まります。ですから、

  • Int か String の id があれば、それが識別子になります。
  • id が無ければ足します。id Int @id @default(autoincrement()) です。
  • 別の型の id——小数、真偽値、入れ子のオブジェクト——は改名され、元の鍵を保ちます。
model Root {
  id   Int    @id @default(autoincrement())
  id2  Float  @map("id")
  name String
}

この最後の場合、以前は識別子のまったく無い模型が出ていました。妥当に見えて、コマンドが拒む Prisma です。この文章を書く過程で見つけ、直しました。

関係に見えるものを作り出さない

入れ子のオブジェクトは Json の列になります。別の表への関係だったかもしれませんが、当てにいけば、文書ひとつから模型と外部鍵と向きを作り出すことになります。オブジェクトの配列も、型の混ざった配列も同じです。

同じ型のスカラーの並びには、固有の並び型——String[]、Int[]——が付きます。PostgreSQL、CockroachDB、MongoDB にあるものです。MySQL や SQLite では Json に変えてください。出力に datasource が無い以上、どれをお使いかは分かりようがありません。

名前、null を許すか、そして標本が言わないこと

項目名は camelCase になり、元の鍵と食い違えば @map がそれを保ちます。content-type は contentType @map("content-type") になり、列の名前は変わりません。camelCase が同じになる二つの鍵は、混ぜずに番号を付けます。

省略可能な列になるのは null だけで、Json? です。ほかはすべて必須です。標本に値があったからで、そして、ある列が null を許すことを標本から学ぶのは筋が違います。? は一文字、付けるのはあなたです。

プライバシー

すべての処理はブラウザ内のJavaScriptだけで完結します。データがアップロードされることはないため、機密情報でも安心して利用でき、オフラインでも動作します。

よくある質問

`id Int @id @default(autoincrement())` はどこから来たのですか。
どの模型にも識別子が要る、という Prisma の決まりからです。標本に整数か文字列の `id` があれば、それが識別子になります。無ければ足します。別の型の `id` は改名され、`@map("id")` で元の鍵が残ります。これが無いと、模型は正しそうに見えて `prisma validate` に拒まれていました。
なぜ入れ子のオブジェクトが関係ではなく `Json` の列なのですか。
標本は関係を示せないからです。`{"author": {"name": "Ada"}}` は `Author` 表への外部鍵かもしれませんし、その行に属する塊かもしれません。表と鍵と向きを当てにいけば、推測が三つ重なります。`Json` はデータを保ち、設計はあなたに残します。それはあなたのものだからです。
`String[]` は MySQL で通りません。なぜ出るのですか。
同じ型のスカラーの並びには、PostgreSQL、CockroachDB、MongoDB で固有の型があり、Prisma はそれを `String[]` と書くからです。MySQL と SQLite にスカラーの並びはありません。そこでは `Json` に変えてください。生成器はあなたのデータ源を知りません。出力に `datasource` の区画はまったく含まれていません。

関連ツール