コンテンツにスキップ

survey_version_question_branch_rules

概要

分岐ルールを管理するテーブル。1 設問に複数のルールを持てる。ルールは並び順に評価され、最初に成立したものが採用される(先勝ち)。

テーブル定義

論理名 物理名 カラム名 データ型 主キー リレーション ユニーク NULL許可 デフォルト値 備考
分岐ルール survey_version_question_branch_rules id uuid ◯ gen_random_uuid() 設問の更新のたびに新しい値が振られる
question_id uuid survey_version_questions:id (cascade)
sort_order integer 0 評価順。小さいほど先に評価される
logical_operator branch_logical_operator AND / OR
destination_question_code varchar(100) ◯ 分岐先の設問コード。特殊コードも入る
message text ◯ 条件成立時に表示するメッセージ
created_at timestamptz now()
updated_at timestamptz now()

リレーション

  • question_id → survey_version_questions.id (onDelete: cascade)
  • 参照される側: survey_version_question_branch_conditions.branch_rule_id(cascade)

インデックス

  • 主キー (id)
  • UNIQUE INDEX: survey_version_question_branch_rules_question_order_idx (question_id, sort_order)

分岐先の特殊コード

destination_question_code は enum ではなく varchar のため、通常の設問コードに加えて次の特殊コードを取り得る。

コード 意味
SO 全問完了(アンケート終了)
SC セクション完了(次セクションの先頭へ)
SX スクリーンアウト(条件不適合として離脱)
自設問のコード 排他設定。その設問に留まり message を表示する(進行不能)

注記

  • message の役割: 通常の分岐でも条件成立時のメッセージとして使えるが、分岐先が自設問のときは「排他設定(差し戻し)」として機能する。CS の logic_action.message に対応する
  • AND / OR の表現: 1 ルール内の条件は logical_operator で結合される。ネストや混在はできない。CS でも同じフラット構造(AND = 1 logic 内の複数 logic_item、OR = logic を複数作る)
  • 評価順: sort_order の昇順に評価し、先に成立したルールを採用する。CS の「上位優先・競合時は下位無効」と同じ意味論
  • 分岐先の範囲: 同一セクション内の後続の非 intro 設問、および特殊コード。セクションをまたぐ分岐先は SC 経由の「次セクション先頭」のみ
  • 設問を更新すると分岐ルールは削除されて作り直されるため、id は安定しない
  • 排他選択肢や「その他」を設定すると、対応するルールが frontend で自動生成される