external_logics
概要
外部ツールから取り込んだ分岐ロジック(CS の logic)を保管するテーブル。1 つの logic が設計ツールの「1 つの分岐ルール」に相当する。
テーブル定義
| 論理名 |
物理名 |
カラム名 |
データ型 |
主キー |
リレーション |
ユニーク |
NULL許可 |
デフォルト値 |
備考 |
| 外部分岐ロジック |
external_logics |
id |
uuid |
◯ |
|
|
|
gen_random_uuid() |
|
|
|
external_question_id |
uuid |
|
external_questions:id (cascade) |
|
|
|
|
|
|
external_id |
bigint |
|
|
|
|
|
CS 側の logic ID |
|
|
order_index |
integer |
|
|
|
◯ |
|
評価順。上位優先。CS の並べ替えはこの値の書き換えで行う |
|
|
action_question_external_id |
bigint |
|
|
|
◯ |
|
分岐先の設問 ID(logic_action.question_id) |
|
|
action_is_random |
boolean |
|
|
|
|
false |
分岐先をランダムにするか(logic_action.is_random) |
|
|
raw |
jsonb |
|
|
|
|
|
logic オブジェクトの生 JSON |
リレーション
- external_question_id → external_questions.id (onDelete: cascade)
- 参照される側:
external_logic_items.external_logic_id(cascade)
インデックス
- 主キー (id)
- UNIQUE INDEX: external_logics_question_external_id_idx (external_question_id, external_id)
CS の分岐構造との対応
| CS |
設計ツール |
1 つの logic |
1 つの分岐ルール |
logic 内の複数 logic_item |
ルール内の複数条件(AND) |
同一設問の複数 logic |
複数のルール(OR) |
logic.order_index |
ルールの sort_order(先勝ち評価) |
logic_action.question_id |
分岐先の設問コード |
logic_action.message |
ルールの message |
注記
- AND / OR の表現: CS には 1 つの
logic 内で AND と OR を混在させる構造がない。設計ツールと同じフラット構造
- 排他設定:
logic_action.question_id に自分自身の設問 ID を指定し、logic_action.message にメッセージを入れると、進行を止める排他設定になる
- 分岐先ランダム:
action_is_random と logic_random_destinations は CS に存在するが、本システムでは対応しない(is_random: false を送るのみ)
- 削除のセマンティクス: CS では
PUT /questions/{id}/logics/import は送った logic の更新のみを行い、送らなかった logic は削除されない。削除には専用の DELETE /logics/{id} を使う
raw には logic_action.message やランダム分岐先の構造も含まれる