Appearance
正規化 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に聞く前に、自分の頭で考えてみましょう。
テキストを入力すると有効になります