Skip to content

正規化 vs JSON ― どちらで保存すべきか?

📖この章のキーワード
用語意味なぜ重要か
正規化データを重複なく別テーブルに分離する設計検索・集計が容易、整合性を DB で保証
JSON カラム構造化データを 1 カラムに格納する方式スキーマ変更なしで柔軟に構造を変えられる
スキーマテーブルの構造定義(カラム名、型、制約)正規化では明示的、JSON では暗黙的
マイグレーションDB スキーマの変更を管理する仕組み正規化は変更のたびに必要

Phase 1: 観察

シナリオステップの条件設定は、JSON カラムに保存されています。

php
// ScenarioStep マイグレーション
$table->json('condition_config')->nullable()->comment('条件設定(JSON)');
php
// ScenarioStep.php
protected $casts = [
    'condition_config' => 'array',
];

JSON の中身:

json
{
  "logic": "and",
  "conditions": [
    { "type": "tag", "tag_id": 42, "operator": "has" },
    { "type": "point", "min": 100 }
  ],
  "action_if_false": "skip"
}

これを正規化テーブルに分離すると:

scenario_step_conditions テーブル
| id | step_id | type  | config          | sort_order |
|----|---------|-------|-----------------|------------|
| 1  | 10      | tag   | {"tag_id": 42}  | 1          |
| 2  | 10      | point | {"min": 100}    | 2          |

Phase 2: 判断

AI禁止ゾーン
  • 現在の JSON 設計 のメリットとデメリットを挙げてください
  • もし 正規化テーブル に変えたら、何が良くなり、何が悪くなりますか?
  • どちらが正しい ですか?(ヒント: これはトリック質問です)

AIに聞く前に、自分の頭で考えてみましょう。

テキストを入力すると有効になります