DB設計アンチパターン集

ここでは、実務で遭遇しやすい設計アンチパターンを「何が問題か」「どう直すか」の形でまとめます。設計レビューの観点として利用できます。

1. 月別12カラムを横持ちする

売上集計(商品ID, 1月売上, 2月売上, ... 12月売上)

2. 状態フラグを乱立させる

is_active, is_deleted, is_locked, is_temp ...

3. 汎用マスタ1枚化

master(code_type, code, name, value1, value2 ...)

4. EAV(属性名・値)を乱用する

entity_attr(entity_id, attr_name, attr_value)

5. 履歴を上書きして消す

6. 外部キーを貼らない

7. NULLの意味が混在する

回避の原則

  1. 増える可能性がある軸(年月、タグ)は列ではなく行で持つ
  2. 意味が異なるデータは別テーブルに分離する
  3. 整合性はアプリだけでなく DB制約で守る
  4. 将来変更のシナリオを前提にモデルを設計する

アンチパターンは「今すぐ動く」設計として採用されがちです。短期実装と長期保守のどちらを優先するかを意識して選択してください。