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 も併用する