データ型

真偽値型(Boolean) しんぎちがた(ぶーりあん)

BooleanTRUEFALSEフラグデータベース論理型
真偽値型(Boolean)について教えて

簡単に言うとこんな感じ!

真偽値型は「YES か NO しか答えられないチェックボックス」だよ!TRUE(本当)か FALSE(嘘)、たった2つの値しか入らない超シンプルなデータ型なんだ。「有効か無効か」「退会済みか否か」みたいなON/OFFを表すときにぴったり!


真偽値型(Boolean)とは

真偽値型(Boolean型・論理型) とは、TRUE(真・はい)か FALSE(偽・いいえ)のどちらかしか格納できないデータ型です。プログラマーの名前の由来はイギリスの数学者 ジョージ・ブール(George Boole) で、彼が提唱した論理代数(ブール代数)から来ています。

業務システムでは「フラグ(flag)」と呼ばれる場面で頻繁に使います。たとえば「メール配信を希望するか(is_subscribed)」「管理者権限を持つか(is_admin)」「注文が確定済みか(is_confirmed)」といったON/OFF情報がその典型です。

注意が必要なのは、データベースによって扱い方が大きく異なる点です。PostgreSQLは専用の BOOLEAN 型を持ちますが、MySQLは TINYINT(1)(0か1の整数)で代用するのが一般的で、SQL Serverは BIT 型を使います。このため、DBを乗り換える際や複数DB間でデータをやり取りする際に注意が必要です。


真偽値型の各DBMSでの実装

DBMS型名格納される値注意点
PostgreSQLBOOLEANTRUE / FALSE / NULL標準的なBoolean型を持つ
MySQLTINYINT(1) または BOOL1 / 0BOOLTINYINT(1) の別名。実体は整数
SQL ServerBIT1 / 0NULL も格納可能
SQLiteINTEGER1 / 0型の概念が緩く、整数で代用
OracleNUMBER(1) または CHAR(1)1/0 または 'Y'/'N'標準Booleanがなく慣習に頼る部分も

よく使われるカラム名の命名規則

Boolean型のカラムには is_has_ で始まる名前をつけることが慣習になっています。

-- 良い命名例
is_active       -- 有効フラグ
is_deleted      -- 削除済みフラグ(論理削除)
has_agreed      -- 同意済みフラグ
is_admin        -- 管理者フラグ
is_confirmed    -- 確認済みフラグ

-- 避けたい命名例
active          -- 何を表すかあいまい
delete_flag     -- 型が名前からわからない
flg_admin       -- 日本語システム由来の古い慣習

歴史と背景

  • 1847年 — ジョージ・ブールが著書『論理の数学的分析』でブール代数を発表。TRUE/FALSEの2値で論理式を表現する数学体系を構築
  • 1937年 — クロード・シャノンがブール代数を電気回路の設計に応用。これがデジタルコンピュータの理論的基盤に
  • 1960年代プログラミング言語 ALGOL に論理型(logical type)が採用。「条件分岐」に欠かせない型として広まる
  • 1980年代〜 — Ada・Pascal など構造化プログラミング言語に BOOLEAN 型が標準で組み込まれる
  • SQL標準 — SQL:1999 で BOOLEAN 型が標準化されたが、各DBMSの実装はバラバラのまま現在に至る
  • 現在REST APIやJSONでは true / false(小文字)が標準。DBのBoolean値とのマッピングをアプリ層で行うことが多い

Boolean と NULL の三値論理(重要)

データベースのBooleanは「TRUEFALSE か」だけでなく、NULL(不明) を含む三値論理になります。これは多くの現場で見落とされる落とし穴です。

Booleanの三値論理(AND演算) AND TRUE FALSE NULL TRUE TRUE FALSE NULL FALSE FALSE FALSE FALSE NULL NULL FALSE NULL NULL は「不明」を意味し、TRUE でも FALSE でもない第三の状態
-- NULLを含むBooleanのよくある罠
SELECT * FROM users WHERE is_deleted = FALSE;
-- ↑ is_deleted が NULL のレコードは返ってこない!

-- 正しい書き方(NULLも含めて「削除されていない」を表現)
SELECT * FROM users WHERE is_deleted IS FALSE OR is_deleted IS NULL;
-- または
SELECT * FROM users WHERE COALESCE(is_deleted, FALSE) = FALSE;

関連する規格・RFC

規格・RFC番号内容
ISO/IEC 9075-2 (SQL:1999)SQLに BOOLEAN 型を追加した標準規格
RFC 8259JSONの仕様。true/false のBoolean値の表現方法を定義

関連用語