首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

問卷調查網站資料庫設計:動態欄位採用 EAV 或 JSON 方案

     編輯:程式設計綜合問答

核心挑戰

使用者自訂問卷,欄位數量、名稱、型態皆不固定,傳統關聯式資料表難以直接對應。

方案一:EAV(Entity-Attribute-Value)模型

-- 問卷基本資料
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
);

方案二:JSON 欄位(MySQL 5.7+/PostgreSQL 9.4+)

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。
缺點:欄位級索引、型別約束較弱,適合「寫多讀少、結構頻變」場景。

建議選型

  • 需複雜統計分析、跨題目查詢 → **EAV**。
  • 重點在收集、匯出、簡單篩選 → **JSON** 開發效率更高。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved