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
);
検出ロジック
コンバーターは以下を調べて主キーを識別します:
- カラム名 —
id、_id、pk、または{table_name}_idは強い指標です。 - 値の一意性 — 複数のレコードが提供された場合、コンバーターは一意の値をチェックします。
- データ型 —
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デフォルトの適切な主キー制約を生成させる必要がある場合に使用します。