使用者自訂問卷,欄位數量、名稱、型態皆不固定,傳統關聯式資料表難以直接對應。
-- 問卷基本資料
CREATE TABLE survey (
id INT PRIMARY KEY,
title VARCHAR(255),
created_at DATETIME
);
-- 題目定義
CREATE TABLE question (
id INT PRIMARY KEY,
survey_id INT,
type ENUM('radio','checkbox','text','textarea'),
title TEXT,
sort_order INT
);
-- 選項(單選/多選用)
CREATE TABLE option (
id INT PRIMARY KEY,
question_id INT,
label VARCHAR(255),
sort_order INT
);
-- 使用者作答
CREATE TABLE answer (
id INT PRIMARY KEY,
survey_id INT,
user_id INT,
question_id INT,
option_id INT, -- 單選/多選
text_value TEXT, -- 填空題
created_at DATETIME
);
CREATE TABLE survey_response (
id INT PRIMARY KEY,
survey_id INT,
user_id INT,
answers JSON, -- 結構:{"q1": "選項A", "q2": ["選項B","選項C"], "q3": "文字內容"}
created_at DATETIME
);
優點:結構彈性、查詢簡單(JSON 函數)、無需多表 JOIN。
缺點:欄位級索引、型別約束較弱,適合「寫多讀少、結構頻變」場景。