🚫
アンチパターンDB設計DDD 2026年4月1日

状態フラグ・汎用テーブルのアンチパターン

📁 アンチパターン 👁 -- 閲覧

状態フラグ・汎用テーブルのアンチパターン

定義

DBスキーマ設計において、ドメインの状態を複数のフラグ列(is_paid, is_cancelled)や 汎用的な区分コード(status_code, type_code)で表現してしまうパターン。

なぜ問題か

状態フラグの問題:

  • is_paid=true かつ is_cancelled=true という不正な状態が物理的に表現可能になる
  • フラグが増えるたびに「どの組み合わせが有効か」というルールがアプリ側に散らばる

汎用テーブルの問題:

  • 型安全性が消え全関係がnullableになる
  • インデックス・外部キー制約が設計できず、DBレベルの整合性保証がなくなる

解決策

  • 状態ごとにテーブルを分ける、または排他的な状態を持つ1つの区分列にする
  • ドメインモデルの集約構造をDBスキーマに反映させる

関連概念

出典

現場で役立つシステム設計の原則(増田亨)第7〜8章