JSONブール値をSQLのBooleanおよびBitカラムにマッピングする
JSONのブール値がさまざまなデータベースエンジンでSQL BOOLEAN、BIT、TINYINTカラムにどのように変換されるかを学びます。互換性のヒントも解説。
詳細な説明
ブール型のマッピング
JSONにはネイティブのboolean型があり、trueとfalseの値を持ちます。SQLでのブールサポートはデータベースエンジンによって大きく異なります。
JSON例
{
"id": 1,
"username": "alice",
"is_active": true,
"is_verified": false,
"accepts_marketing": true
}
生成されるSQL(PostgreSQL)
CREATE TABLE users (
id INTEGER NOT NULL,
username VARCHAR(255) NOT NULL,
is_active BOOLEAN NOT NULL DEFAULT TRUE,
is_verified BOOLEAN NOT NULL DEFAULT FALSE,
accepts_marketing BOOLEAN NOT NULL DEFAULT TRUE
);
データベース固有の型
| データベース | 型 | 値 |
|---|---|---|
| PostgreSQL | BOOLEAN |
TRUE / FALSE |
| MySQL | BOOLEAN(TINYINT(1)のエイリアス) |
1 / 0 |
| SQL Server | BIT |
1 / 0 |
| SQLite | INTEGER |
1 / 0 |
| Oracle | NUMBER(1) |
1 / 0 |
コンバーターは選択したターゲットデータベースに基づいて適切な型を選択します。ターゲットが指定されていない場合、ANSI BOOLEAN型をデフォルトとします。
デフォルト値
コンバーターはサンプルJSONの値を使用してDEFAULT句を設定します。サンプルが"is_active": trueの場合、カラムにはDEFAULT TRUEが設定されます。これは出発点であり、ビジネスロジックに基づいてデフォルト値を確認・調整してください。
命名規則
ブールカラムは慣習的にis_、has_、can_、またはaccepts_で始まります。コンバーターはこれらのプレフィックスを検出し、サンプル値が0や1(通常はINTEGERにマッピングされる可能性がある)であってもBOOLEANを適用します。
NOT NULLの推奨
ブールカラムはほぼ常にNOT NULLとデフォルト値を持つべきです。三値ブール(TRUE、FALSE、NULL)はバグの一般的な原因です。本当に3つの状態が必要な場合は、代わりにenumカラム('yes'、'no'、'unknown')を検討してください。
ブールのインデックス
ブールカラム単体のインデックスは、カーディナリティが2しかないため通常有用ではありません。ただし、(is_active, created_at)のような複合インデックスは、アクティブなレコードを日付でフィルタリングする際に高い選択性を持ちます。
ユースケース
is_active、is_verified、accepts_marketingなどのフラグにPostgreSQLとMySQLで正しいSQLブール型と適切なデフォルト値が必要なユーザー管理テーブルを設定する場合に使用します。