JSONブール値をSQLのBooleanおよびBitカラムにマッピングする

JSONのブール値がさまざまなデータベースエンジンでSQL BOOLEAN、BIT、TINYINTカラムにどのように変換されるかを学びます。互換性のヒントも解説。

Column Types

詳細な説明

ブール型のマッピング

JSONにはネイティブのboolean型があり、truefalseの値を持ちます。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 BOOLEANTINYINT(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_で始まります。コンバーターはこれらのプレフィックスを検出し、サンプル値が01(通常はINTEGERにマッピングされる可能性がある)であってもBOOLEANを適用します。

NOT NULLの推奨

ブールカラムはほぼ常にNOT NULLとデフォルト値を持つべきです。三値ブール(TRUEFALSENULL)はバグの一般的な原因です。本当に3つの状態が必要な場合は、代わりにenumカラム('yes''no''unknown')を検討してください。

ブールのインデックス

ブールカラム単体のインデックスは、カーディナリティが2しかないため通常有用ではありません。ただし、(is_active, created_at)のような複合インデックスは、アクティブなレコードを日付でフィルタリングする際に高い選択性を持ちます。

ユースケース

is_active、is_verified、accepts_marketingなどのフラグにPostgreSQLとMySQLで正しいSQLブール型と適切なデフォルト値が必要なユーザー管理テーブルを設定する場合に使用します。

試してみる — JSON to SQL Schema

フルツールを開く