survey_version_questions
概要
セクションに属する設問のスナップショット。設問タイプごとの属性(選択数制限・マトリクスの単一選択・サブ設問)もここで持つ。
テーブル定義
| 論理名 | 物理名 | カラム名 | データ型 | 主キー | リレーション | ユニーク | NULL許可 | デフォルト値 | 備考 |
|---|---|---|---|---|---|---|---|---|---|
| 設問 | survey_version_questions | id | uuid | ◯ | gen_random_uuid() | 版が変わると新しい値が振られる | |||
| section_id | uuid | survey_version_sections:id (cascade) | |||||||
| stable_question_id | uuid | gen_random_uuid() | 安定 ID。版の複製時にそのまま引き継がれる | ||||||
| question_code | varchar(100) | 設問コード。分岐条件・分岐先の参照キー。案件内で一意 | |||||||
| question_type | question_type | single / multi / free_text / matrix / intro / pulldown | |||||||
| prompt_text | text | 設問文 | |||||||
| note_text | text | ◯ | 注記 | ||||||
| is_required | boolean | false | 回答必須かどうか | ||||||
| is_linked_to_previous | boolean | false | 前の設問と同じページに表示するか | ||||||
| is_single_matrix_select | boolean | ◯ | マトリクスの単一選択。TM 以外では null | ||||||
| min_selections | integer | ◯ | MA の最小選択数。null = 制限なし | ||||||
| max_selections | integer | ◯ | MA の最大選択数。null = 制限なし | ||||||
| sub_questions | jsonb | ◯ | サブ設問のラベル一覧。順序が選択肢の sub_question_index に対応 | ||||||
| sort_order | integer | セクション内での並び順 | |||||||
| created_at | timestamptz | now() | |||||||
| updated_at | timestamptz | now() |
リレーション
- section_id → survey_version_sections.id (onDelete: cascade)
- 参照される側:
survey_version_question_options.question_id(cascade) - 参照される側:
survey_version_question_branch_rules.question_id(cascade) - 参照される側:
survey_version_question_visibility_rules.question_id(cascade)
インデックス
- 主キー (id)
- UNIQUE INDEX: survey_version_questions_section_order_idx (section_id, sort_order)
注記
- 設問コードが参照キー: 分岐条件の参照元(
source_question_code)と分岐先(destination_question_code)はこのquestion_codeを指す。設問の複製時は新しいコードが振られ、自設問への参照は新コードへ付け替えられる - 並びが変わると振り直される: 並べ替え・削除・複製・流用のあと、案件全体の
question_codeが連番(introはT、それ以外はQ)へ振り直される。分岐・表示ロジックの参照コードも同じトランザクションで付け替えられる(設問コードの振り直し) - サブ設問の構造:
sub_questionsにはラベルのみを保持し、各サブ設問の選択肢は survey_version_question_options 側にsub_question_index付きで格納する。対象は SA / MA / プルダウン - 選択数制限: MA 専用。設問タイプを
multi以外に変更すると破棄される。サブ設問付きの場合は各サブ設問に同じ制限が適用される introの制約: 提示ステップは回答欄を持たないため、分岐条件の参照元には指定できない(指定すると API が 400 を返す)- 選択肢・マトリクスの行列・FA の入力欄は、設問の更新のたびに削除して作り直される