JSONからMySQLスキーマへの変換 — Numio
サンプル JSON から MySQL の CREATE TABLE 文を生成します。ルートは generic という名前のテーブルになり、ネストしたオブジェクトや配列はそれぞれ、親の主キーへの外部キーを持つ子テーブルになります。
本番のマイグレーションを書く前に、API ペイロードの正規化したテーブル構成を下書きする。
JSON
MySQL Schema
こんなときに使えます
- 本番のマイグレーションを書く前に、API ペイロードの正規化したテーブル構成を下書きする。
- ドキュメントストアから MySQL へデータを移す際、ドキュメント内のどのネストしたオブジェクトや配列に専用のテーブルが必要かを確認する。
使い方
- JSON オブジェクト、または 1 つのテーブルにマージされるサンプルレコードの配列を左側のエディターに貼り付けるか、ファイル読み込みボタンで UTF-8 のファイルを開きます。
- 生成されたテーブルを確認します。ルートは generic、子テーブルは generic_<key> で、generic_id 外部キーで関連付けられます。
- 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 ツールを使ってください。