external_surveys
概要
Creative Survey(CS)などの外部ツールから取り込んだ調査票を保管するテーブル。取り込んだ生の JSON をそのまま保持する。
テーブル定義
| 論理名 | 物理名 | カラム名 | データ型 | 主キー | リレーション | ユニーク | NULL許可 | デフォルト値 | 備考 |
|---|---|---|---|---|---|---|---|---|---|
| 外部調査票 | external_surveys | id | uuid | ◯ | gen_random_uuid() | ||||
| source | varchar(50) | 取得元の識別子。現在は creative_survey | |||||||
| external_id | bigint | 外部ツール側の調査票 ID | |||||||
| origin | varchar(255) | 取得元のオリジン(例: https://4dsd.svy.ooo) | |||||||
| name | text | 調査票の名前 | |||||||
| raw_survey | jsonb | CS の調査票オブジェクトの生 JSON | |||||||
| raw_questionnaire | jsonb | ◯ | CS の設問構成オブジェクトの生 JSON | ||||||
| generate_order | jsonb | ◯ | ページ構成。設問 ID の二次元配列 | ||||||
| fetched_at | timestamptz | ◯ | 拡張が CS から取得した日時 | ||||||
| imported_at | timestamptz | now() | 取り込み日時 | ||||||
| imported_by | uuid | users:id (set null) | ◯ | 取り込み実行者 |
リレーション
- imported_by → users.id (onDelete: set null)
- 参照される側:
external_questions.external_survey_id(cascade) - 参照される側:
question_library_items.source_external_survey_id(cascade)
インデックス
- 主キー (id)
- UNIQUE INDEX: external_surveys_source_external_id_idx (source, external_id)
注記
- 再取り込み時の挙動:
(source, external_id)が既存の場合、その行を削除してから再投入する。配下の設問・選択肢・分岐は連鎖削除されるため、取り込みを何度実行しても重複しない - 生 JSON を保持する理由: CS の API 仕様は非公開のため、正規化した列だけでは取りこぼしが起きる。生 JSON を残しておくことで、後から仕様が判明した際に再解析できる
generate_orderは CS のページ構成(どの設問が同じページに束ねられているか)を表す- 取り込みと同時に、各設問が question_library_items へ外部由来データとして登録される