状態フラグ・汎用テーブルのアンチパターン
定義
DBスキーマ設計において、ドメインの状態を複数のフラグ列(is_paid, is_cancelled)や
汎用的な区分コード(status_code, type_code)で表現してしまうパターン。
なぜ問題か
状態フラグの問題:
is_paid=trueかつis_cancelled=trueという不正な状態が物理的に表現可能になる- フラグが増えるたびに「どの組み合わせが有効か」というルールがアプリ側に散らばる
汎用テーブルの問題:
- 型安全性が消え全関係がnullableになる
- インデックス・外部キー制約が設計できず、DBレベルの整合性保証がなくなる
解決策
- 状態ごとにテーブルを分ける、または排他的な状態を持つ1つの区分列にする
- ドメインモデルの集約構造をDBスキーマに反映させる
関連概念
出典
現場で役立つシステム設計の原則(増田亨)第7〜8章