survey_version_pointers
概要
案件がどの版を「最新版」としているかを指すポインタテーブル。案件と種別の組で 1 行になる。
テーブル定義
| 論理名 | 物理名 | カラム名 | データ型 | 主キー | リレーション | ユニーク | NULL許可 | デフォルト値 | 備考 |
|---|---|---|---|---|---|---|---|---|---|
| 版ポインタ | survey_version_pointers | survey_id | uuid | ◯ | surveys:id (cascade) | ||||
| version_id | uuid | survey_versions:id (cascade) | 指し先の版 | ||||||
| pointer_type | varchar(50) | ◯ | 現在は latest のみ |
リレーション
- survey_id → surveys.id (onDelete: cascade)
- version_id → survey_versions.id (onDelete: cascade)
インデックス
- 主キー (survey_id, pointer_type) の複合主キー
制約
- CHECK:
survey_version_pointers_pointer_type_check—pointer_type in ('latest')
注記
- 案件の作成時に
latestポインタが作られ、保存・ロールバックのたびに新しい版を指すよう更新される - 複合主キーにより、1 つの案件が同じ種別のポインタを複数持つことはない
pointer_typeを varchar + CHECK 制約にしているのは、将来「公開版」などのポインタ種別を追加する余地を残すため。現時点で使われている値はlatestのみ- 実装上は
surveys.latest_version_noと併用して最新版を特定している