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 で自動生成される