コンテンツにスキップ

surveys

概要

案件(アンケート)を管理するテーブル。テーマ・ステータス・最新版番号を持つ。調査票の中身は保持せず、版のスナップショット側に置く。

テーブル定義

論理名 物理名 カラム名 データ型 主キー リレーション ユニーク NULL許可 デフォルト値 備考
案件 surveys id uuid ◯ gen_random_uuid()
title varchar(255) 案件タイトル
client_name varchar(255) クライアント名
objective text 調査目的。プリセット選択と自由入力を直列化した文字列
delivery_area varchar(255) 配信エリア。同上
category varchar(255) カテゴリ。同上
prompt_text text '' 自由記述
status survey_status 下書き 下書き / レビュー中 / 出力済み / アーカイブ
latest_version_no integer 1 最新版の版番号
created_by uuid users:id (restrict) 作成者。削除できるのは作成者本人と管理者のみ
updated_by uuid users:id (restrict) 最終更新者
created_at timestamptz now()
updated_at timestamptz now() 一覧のデフォルト並び順は更新日時の降順
deleted_at timestamptz ◯ 論理削除。null = 未削除

リレーション

  • created_by → users.id (onDelete: restrict)
  • updated_by → users.id (onDelete: restrict)
  • 参照される側: survey_permissions.survey_id(cascade)
  • 参照される側: survey_versions.survey_id(cascade)
  • 参照される側: survey_version_pointers.survey_id(cascade)
  • 参照される側: user_survey_favorites.survey_id(cascade)
  • 参照される側: question_library_items.source_survey_id(cascade)

インデックス

  • 主キー (id)

注記

  • 本システムで論理削除を行うのはこのテーブルのみ。参照系のクエリでは常に deleted_at IS NULL を条件に含める
  • objective / delivery_area / category は DB では 1 つの文字列だが、テーマ API では「プリセット選択」と「自由入力」に分解した構造で返す
  • status は JSON 出力(POST /api/surveys/{surveyId}/export)を実行すると自動的に 出力済み へ遷移する
  • latest_version_no は保存・ロールバックのたびに増加する。実際の最新版の特定には survey_version_pointers も併用する