真偽値型(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 | 型名 | 格納される値 | 注意点 |
|---|---|---|---|
| PostgreSQL | BOOLEAN | TRUE / FALSE / NULL | 標準的なBoolean型を持つ |
| MySQL | TINYINT(1) または BOOL | 1 / 0 | BOOL は TINYINT(1) の別名。実体は整数 |
| SQL Server | BIT | 1 / 0 | NULL も格納可能 |
| SQLite | INTEGER | 1 / 0 | 型の概念が緩く、整数で代用 |
| Oracle | NUMBER(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は「TRUE か FALSE か」だけでなく、NULL(不明) を含む三値論理になります。これは多くの現場で見落とされる落とし穴です。
-- 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 8259 | JSONの仕様。true/false のBoolean値の表現方法を定義 |