本文へスキップ

JSONからMySQLスキーマへの変換 — Numio

サンプル JSON から MySQL の CREATE TABLE 文を生成します。ルートは generic という名前のテーブルになり、ネストしたオブジェクトや配列はそれぞれ、親の主キーへの外部キーを持つ子テーブルになります。

本番のマイグレーションを書く前に、API ペイロードの正規化したテーブル構成を下書きする。

JSON

MySQL Schema

こんなときに使えます

  • 本番のマイグレーションを書く前に、API ペイロードの正規化したテーブル構成を下書きする。
  • ドキュメントストアから MySQL へデータを移す際、ドキュメント内のどのネストしたオブジェクトや配列に専用のテーブルが必要かを確認する。

使い方

  1. JSON オブジェクト、または 1 つのテーブルにマージされるサンプルレコードの配列を左側のエディターに貼り付けるか、ファイル読み込みボタンで UTF-8 のファイルを開きます。
  2. 生成されたテーブルを確認します。ルートは generic、子テーブルは generic_<key> で、generic_id 外部キーで関連付けられます。
  3. SQL をコピーし、実行前にテーブル名を変更して列の型(価格の DECIMAL や VARCHAR の長さなど)を調整します。

JSON サンプルオブジェクト

{
  "id": 1024,
  "total": 19.5,
  "coupon": null,
  "created_at": "2026-01-05T10:00:00Z",
  "scores": [4, 4.5],
  "items": [{ "sku": "A1", "qty": 2 }]
}

MySQL CREATE TABLE 文

CREATE TABLE generic (
  id INT,
  total DOUBLE,
  coupon TEXT,
  created_at TIMESTAMP,
  PRIMARY KEY (id)
);

CREATE TABLE generic_scores (
  generic_id INT,
  id INT,
  value DOUBLE,
  PRIMARY KEY (id),
  FOREIGN KEY (generic_id) REFERENCES generic(id)
);

CREATE TABLE generic_items (
  generic_id INT,
  id INT,
  sku TEXT,
  qty INT,
  PRIMARY KEY (id),
  FOREIGN KEY (generic_id) REFERENCES generic(id)
);

仕様と制限

整数は INT(32 ビットの範囲外なら BIGINT)、それ以外の数値は DOUBLE、文字列は TEXT、真偽値は BOOLEAN になります。VARCHAR の長さ、NOT NULL、AUTO_INCREMENT、インデックスは生成されません。

主キーは id という名前か _id を含むキーです。どちらもなければ id 列が追加されます。18 文字を超え、日付として解析できる文字列は TIMESTAMP になります。

null 値は TEXT 列になります。スカラーの配列には value 列を持つ子テーブルが作られ、その型は全要素から決まります(上の scores は DOUBLE)。

ブラウザ内で動作します。出力は MySQL サーバーで検証されません。

FAQ

小数の値が DECIMAL ではなく DOUBLE になるのはなぜですか?

サンプルからは必要な精度がわからないため、整数以外の数値は DOUBLE になります。金額の列は手動で DECIMAL(p,s) に変更してください。

テーブル名を指定できますか?

いいえ。ルートのテーブルは常に generic、子テーブルは generic_<key> です。コピーした SQL で名前を変更してください。

INSERT 文も生成されますか?

いいえ、生成されるのは CREATE TABLE だけです。JSON の行を INSERT 文にするには JSON → SQL ツールを使ってください。

仕様を確認する