survey_version_sections
概要
版に属するセクション(大問)のスナップショット。案件ではなく版にぶら下がるため、版ごとに行が複製される。
テーブル定義
| 論理名 | 物理名 | カラム名 | データ型 | 主キー | リレーション | ユニーク | NULL許可 | デフォルト値 | 備考 |
|---|---|---|---|---|---|---|---|---|---|
| セクション | survey_version_sections | id | uuid | ◯ | gen_random_uuid() | 版が変わると新しい値が振られる | |||
| survey_version_id | uuid | survey_versions:id (cascade) | |||||||
| stable_section_id | uuid | gen_random_uuid() | 安定 ID。版の複製時にそのまま引き継がれる | ||||||
| title | varchar(255) | セクションタイトル | |||||||
| description | text | '' | 説明 | ||||||
| generated_by | varchar(255) | manual | 生成元。manual / 類似セクション生成 など | ||||||
| sort_order | integer | 版の中での並び順 | |||||||
| created_at | timestamptz | now() | |||||||
| updated_at | timestamptz | now() |
リレーション
- survey_version_id → survey_versions.id (onDelete: cascade)
- 参照される側:
survey_version_questions.section_id(cascade)
インデックス
- 主キー (id)
- UNIQUE INDEX: survey_version_sections_version_order_idx (survey_version_id, sort_order)
注記
- 安定 ID の役割:
idは版ごとに変わるため、版をまたいでセクションを同一視するにはstable_section_idを使う。質問ライブラリが古い版のスナップショットを指していても、この ID を辿れば最新版の対応するセクションを見つけられる - 並べ替え時の一意制約回避:
(版 ID, 並び順)に一意インデックスがあるため、並び順を入れ替える際は一時的な値を経由してから確定させる - セクションを削除すると、配下の設問・選択肢・分岐ルール・表示ロジックも連鎖削除される(物理削除)。過去の版のスナップショットは残るため、ロールバックで復元できる