空集合のマテリアライズド集計は親レコード作成時に単位元を初期化する
データベース
データ整合性
集計
判断
運用
COUNT や SUM のような派生集計を別テーブルや検索インデックスへ保存し、子レコードの作成・更新・削除だけを再集計トリガーにすると、子を一度も持たない親は集計処理を一度も通らない。結果として「計算済みの 0」と「未計算で行がない状態」が混在し、表示・検索・数式参照で異なる意味として扱われる。
空集合に数学的な単位元がある集計(COUNT と SUM の 0 など)は、親レコードの作成完了を再集計トリガーに含め、初期値を永続化する。子の変更を待つ設計にしない。一方、MIN・MAX・AVERAGE や日付取得のように空集合の値が null となる集計は、null を行として保存するか行を持たないかをストレージ契約として明示し、0 に補完しない。
修正時は通常のフォーム作成だけでなく、一括 import、bulk upsert、自動生成など、同じ親状態を書き込む全経路を列挙する。通常経路だけ直すと入口によって再発する。更新経路を再計算対象に含めるかは、派生値の入力が変わるか、過去の欠落を自然修復させたいか、毎回の再集計コストを許容できるかで決める。
検証は、対象となる各作成経路で子が 0 件の親を作り、COUNT/SUM が 0 として永続化・応答・検索インデックスに反映されることを確認する。併せて null が正しい集計は行の欠落を不具合と誤認しない境界テストを置く。既存データには作成時トリガーが遡及しないため、go-forward 修正と backfill を別の完了条件として扱う。