■ 1. 主張の概要
- 外部キー制約をすべてのリレーションシップに無条件で適用する慣行に対する警鐘
- 「制約すると良さそうに見えるものが、深く考えずに適用すると問題を引き起こす」という立場
■ 2. 一貫性境界(トランザクション境界)の概念
- 外部キー制約が有効に機能するのは、同一の一貫性境界内に限られる
- 一貫性の種類:
- 強整合性(トランザクション整合性): 変更が不可分に同時に発生する
- 弱整合性(結果整合性): 変更が独立したタイミングで発生する
■ 3. 具体例: 販売システムにおける境界の扱い
- テーブル構成: 商品(Products)、売上(Sales)、売上明細(SaleDetails)
- 境界内の関係:
- 売上と売上明細は同時に更新されるため、外部キー制約が適切
- 境界をまたぐ関係:
- 売上明細から商品への参照には外部キー制約を設けるべきでない
- 商品と売上はライフサイクルが異なるため、商品の削除・廃番時に外部キー制約が障害となる
■ 4. 解決策: 非正規化の活用
- 境界をまたぐ参照には、IDのみを保持するのではなく関連データを売上明細に直接持たせる
- 例として、商品価格を売上明細に直接格納することで、商品データの変更による参照整合性の問題を回避する
■ 5. ドメイン駆動設計(DDD)との関連
- 本概念はDDDの集約(Aggregate)の考え方と一致する
- 外部キー制約は集約の内部では有効
- 集約をまたぐ参照に外部キー制約を設けることは設計上の誤り