JSONからSQLの主キー制約を生成する

コンバーターがJSONのidフィールドからPRIMARY KEY制約を検出・生成する方法を学びます。オートインクリメント、UUIDキー、複合キーを解説。

Constraints

詳細な説明

主キーの検出

適切に設計されたすべてのSQLテーブルには主キーが必要です。コンバーターはJSONを分析して、適切な主キー制約を自動的に検出・生成します。

JSON例

{
  "id": 1,
  "name": "Alice",
  "email": "alice@example.com",
  "department": "Engineering"
}

生成されるSQL(オートインクリメント)

CREATE TABLE employees (
  id SERIAL PRIMARY KEY,
  name VARCHAR(255) NOT NULL,
  email VARCHAR(255) NOT NULL,
  department VARCHAR(255) NOT NULL
);

検出ロジック

コンバーターは以下を調べて主キーを識別します:

  1. カラム名id_idpk、または{table_name}_idは強い指標です。
  2. 値の一意性 — 複数のレコードが提供された場合、コンバーターは一意の値をチェックします。
  3. データ型idカラムの整数またはUUID値は主キーを強く示唆します。

オートインクリメント構文

データベース 構文
PostgreSQL SERIAL または GENERATED ALWAYS AS IDENTITY
MySQL INT AUTO_INCREMENT
SQLite INTEGER PRIMARY KEY AUTOINCREMENT
SQL Server INT IDENTITY(1,1)

UUID主キー

JSONのidフィールドにUUID文字列が含まれる場合:

{ "id": "550e8400-e29b-41d4-a716-446655440000" }

コンバーターは以下を生成します:

-- PostgreSQL
id UUID PRIMARY KEY DEFAULT gen_random_uuid()

-- MySQL
id CHAR(36) PRIMARY KEY

UUIDキーは、調整なしで任意のノードで生成できるため、分散システムで好まれます。

複合主キー

単一のカラムが明確なキーではないが、組み合わせが一意の場合:

{ "user_id": 1, "role_id": 3, "granted_at": "2024-01-15" }
CREATE TABLE user_roles (
  user_id INTEGER NOT NULL,
  role_id INTEGER NOT NULL,
  granted_at TIMESTAMP NOT NULL,
  PRIMARY KEY (user_id, role_id)
);

ベストプラクティス

  • 主キーには自然キーよりもサロゲートキー(オートインクリメントまたはUUID)を優先してください。
  • 常に主キーを定義してください — 主キーのないテーブルはコードスメルです。
  • 20億行を超えると予想されるテーブルにはオートインクリメントキーにBIGINTを使用してください。
  • 時間でソート可能な分散IDにはUUIDv7を検討してください。

ユースケース

APIレスポンスサンプルから新しいデータベーススキーマをスキャフォールドし、コンバーターにidカラムを自動検出させ、オートインクリメントまたはUUIDデフォルトの適切な主キー制約を生成させる必要がある場合に使用します。

試してみる — JSON to SQL Schema

フルツールを開く