需求分析與數據庫設計

需求

在一些場景中,我們需要用到pdf文件作為表單模板,移動端可以獲取到這個pdf文件的表單,在移動端填寫完表單后,填充表單數據并生成新的pdf文件作為附件可做預覽。

需求分析

理解完上面的需求,我們大致有幾個工作要做

  1. 管理pdf模板,但是同一個pdf可以有多個版本,版本之間可切換
  2. 存儲pdf模板的表單字段可供查詢
  3. 存儲提交上來的表單數據到每個版本的數據表
  4. 填充pdf模板數據并生成附件文件

數據庫設計

在設計數據庫之前,我們先來考慮幾個問題

  1. pdf可能會有多頁,該如何處理

    有些pdf模板是不止一頁的,而且某些頁數也是根據表單字段填寫的長度來進行續(xù)頁,比如一個字段有2000字,而我第二頁都是這個字段,但是放不下2000個字,那么就要采用續(xù)頁的形式繼續(xù)填寫,這時候總頁數就會變。所以如果是多頁的情況,我們需要對這個模板進行拆分,所以我們需要把每一頁當成一個pdf模板的一個子表數據,并且需要有判斷這一頁是否多頁的條件。

  2. 每一頁的字段需要有很多屬性

    比如說這個字段最大輸入長度是多少,因為在模板上我們設置文本域的時候,它是一個框,如果文字超過了框的長度,我們就需要換行顯示或者截斷這個文本框的內容。所以把每一頁的字段當成每一頁的子表數據。

我們大致可以設計這幾張表

  • 模板管理表base_template

    主要pdf模板文件的版本和數據表表名(這個作為同一個pdf模板的唯一標識)

CREATE TABLE `base_template` (
  `id` varchar(50) NOT NULL,
  `name` varchar(200) DEFAULT NULL COMMENT '名稱',
  `version` varchar(20) DEFAULT NULL COMMENT '版本號',
  `table_name` varchar(200) DEFAULT NULL COMMENT '表名',
  `is_default` tinyint(1) DEFAULT NULL COMMENT '是否默認版本',
  `create_user` varchar(50) DEFAULT NULL,
  `create_time` datetime DEFAULT NULL,
  `update_user` varchar(50) DEFAULT NULL,
  `update_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='模板管理表';
  • 模板詳情表base_template_item

    存儲pdf模板每一頁的數據,存儲文件信息以及是否多頁的條件判斷存儲

    CREATE TABLE `base_template_item` (
      `id` varchar(50) NOT NULL,
      `is_multi` tinyint(1) DEFAULT NULL COMMENT '是否多頁1是0否',
      `condition_field` varchar(100) DEFAULT NULL COMMENT '多頁的判斷字段',
      `multi_condition` varchar(500) DEFAULT NULL COMMENT 'spring表達式判斷條件',
      `display_num` tinyint(2) DEFAULT NULL COMMENT '排序號',
      `fields` varchar(3000) DEFAULT NULL,
      `file_name` varchar(500) DEFAULT NULL COMMENT '文件名',
      `file_size` int(11) DEFAULT NULL COMMENT '文件大小',
      `file_path` varchar(200) DEFAULT NULL COMMENT '文件路徑',
      `parent_id` varchar(50) DEFAULT NULL COMMENT '模板id',
      `create_user` varchar(50) DEFAULT NULL,
      `create_time` datetime DEFAULT NULL,
      `update_user` varchar(50) DEFAULT NULL,
      `update_time` datetime DEFAULT NULL,
      PRIMARY KEY (`id`),
      KEY `idx_parentId` (`parent_id`) USING BTREE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='模板詳情';
    
  • 模板字段詳情表base_template_item_info

    存儲字段的詳細信息

    CREATE TABLE `base_template_item_info` (
      `id` varchar(50) NOT NULL,
      `name` varchar(200) DEFAULT NULL COMMENT '字段名',
      `field_size` int(11) DEFAULT NULL COMMENT '字段最大長度',
      `is_required` tinyint(1) DEFAULT NULL COMMENT '是否必輸',
      `field_type` tinyint(2) DEFAULT NULL COMMENT '字段類型',
      `multi_line_field` varchar(100) DEFAULT NULL COMMENT '多行取值的字段名',
      `parent_id` varchar(50) DEFAULT NULL COMMENT 'pdf模板文件',
      `condition` varchar(500) DEFAULT NULL COMMENT '多行的截取字段的表達式',
      `field_remark` varchar(500) DEFAULT NULL COMMENT '字段備注,例如是下拉框的時候,備注寫的是下拉框的值列表',
      `is_default_take` tinyint(1) DEFAULT NULL COMMENT '是否默認取值,移動端使用',
      `default_take_name` varchar(50) DEFAULT NULL COMMENT '默認取值的字段名,請用駝峰',
      `pre_name` varchar(200) DEFAULT NULL COMMENT '字段名,移動端左側顯示的名稱',
      `hint_name` varchar(200) DEFAULT NULL COMMENT '字段輸入提示語',
      `classify_name` varchar(200) DEFAULT NULL COMMENT '分類名稱',
      `classify_display_num` int(2) DEFAULT NULL,
      `display_num` int(2) DEFAULT NULL,
      `create_user` varchar(50) DEFAULT NULL,
      `create_time` datetime DEFAULT NULL,
      `update_user` varchar(50) DEFAULT NULL,
      `update_time` datetime DEFAULT NULL,
      `fields_info` varchar(5000) DEFAULT NULL,
      PRIMARY KEY (`id`),
      KEY `idx_parentId` (`parent_id`) USING BTREE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='模板字段詳情';
    
  • 各個模板數據表

    這個在進行模板創(chuàng)建的時候,由程序構造建表語句,執(zhí)行sql語句創(chuàng)建數據表。我們表名的格式就定為base_template的table_name+version

  • 數據中間表

    存儲數據表和模板表的中間數據,每一條數據都有一條

    CREATE TABLE `base_template_data_info` (
      `id` varchar(50) NOT NULL,
      `template_name` varchar(64) DEFAULT NULL COMMENT '模板名稱',
      `version` varchar(50) DEFAULT NULL COMMENT '模板版本',
      `table_name` varchar(50) DEFAULT NULL COMMENT '表名前綴',
      `data_id` varchar(36) DEFAULT NULL COMMENT '數據表的id',
      `file_path` varchar(200) DEFAULT NULL COMMENT '存儲的文件路徑',
      `create_user` varchar(50) DEFAULT NULL,
      `create_time` datetime DEFAULT NULL,
      `update_user` varchar(50) DEFAULT NULL,
      `update_time` datetime DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
  • 字段分類和模板分類表

    字段分類以及模板歸類,這里只是簡單實現了,把字段加在了表里,后續(xù)考慮分類表獨立

結語

有些字段還未說明是怎么用的,我們后續(xù)文章繼續(xù)講解,有寫的不對的歡迎指正。

下篇

數據庫設計好了,下面我們開始定義接口

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容