美文网首页
需求分析与数据库设计

需求分析与数据库设计

作者: 西城丶 | 来源:发表于2020-05-29 16:52 被阅读0次

需求

在一些场景中,我们需要用到pdf文件作为表单模板,移动端可以获取到这个pdf文件的表单,在移动端填写完表单后,填充表单数据并生成新的pdf文件作为附件可做预览。

需求分析

理解完上面的需求,我们大致有几个工作要做

  1. 管理pdf模板,但是同一个pdf可以有多个版本,版本之间可切换
  2. 存储pdf模板的表单字段可供查询
  3. 存储提交上来的表单数据到每个版本的数据表
  4. 填充pdf模板数据并生成附件文件

数据库设计

在设计数据库之前,我们先来考虑几个问题

  1. pdf可能会有多页,该如何处理

    有些pdf模板是不止一页的,而且某些页数也是根据表单字段填写的长度来进行续页,比如一个字段有2000字,而我第二页都是这个字段,但是放不下2000个字,那么就要采用续页的形式继续填写,这时候总页数就会变。所以如果是多页的情况,我们需要对这个模板进行拆分,所以我们需要把每一页当成一个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='模板字段详情';
    
  • 各个模板数据表

    这个在进行模板创建的时候,由程序构造建表语句,执行sql语句创建数据表。我们表名的格式就定为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;
    
  • 字段分类和模板分类表

    字段分类以及模板归类,这里只是简单实现了,把字段加在了表里,后续考虑分类表独立

结语

有些字段还未说明是怎么用的,我们后续文章继续讲解,有写的不对的欢迎指正。

下篇

数据库设计好了,下面我们开始定义接口

相关文章

网友评论

      本文标题:需求分析与数据库设计

      本文链接:https://www.haomeiwen.com/subject/ihkfzhtx.html