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

動態表單數據庫設計:主表+擴展表(EAV 模式)實現可變表頭

     編輯:程式設計綜合問答

需求

表單表頭用戶可自定義,字段數量、類型可變,且所有字段參與計算(加減乘除)。技術棧:Spring MVC + JPA,MySQL/Oracle。

設計方案:主表 + 擴展屬性表(EAV)

-- 主表:固定字段
CREATE TABLE form_main (
    id BIGINT PRIMARY KEY,
    form_code VARCHAR(50),      -- 表單編碼
    creator VARCHAR(50),
    create_time DATETIME,
    status INT
);

-- 擴展表:動態字段(數據字典模式)
CREATE TABLE form_field_value (
    id BIGINT PRIMARY KEY,
    form_id BIGINT,             -- 關聯主表
    field_code VARCHAR(50),     -- 字段編碼(如:amount, tax_rate)
    field_name VARCHAR(100),    -- 顯示名稱
    field_type VARCHAR(20),     -- 類型:string, number, date, formula
    field_value VARCHAR(500),   -- 統一存字符串,應用層轉換
    formula_expr VARCHAR(500),  -- 計算公式(如:amount * tax_rate)
    sort_order INT
);

關鍵機制

  1. 統一存字符串:field_value 用 VARCHAR,應用層根據 field_type 轉換為對應類型計算。
  2. 公式引擎:採用表達式解析庫(如 Aviator, JEXL, 或自寫遞歸下降解析器)運行 formula_expr,支持引用其他字段代碼。
  3. 元數據管理:單獨維護 form_field_def 表定義字段類型、校驗規則、默認值、是否必填等。

查詢與計算

  • 讀取時將擴展表按 form_id 聚合為 Map<field_code, field_value> 合併主表對象。
  • 計算階段按 sort_order 拓撲序執行公式,將結果回寫 field_value。

此模式靈活支持字段動態增減、類型擴展、公式計算,是動態表單的經典落地方案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved