コンテンツにスキップ

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 の入力欄は、設問の更新のたびに削除して作り直される