动态表单存储设计(动态表单存储设计方案)

前言

Flowable, Activiti 等开源解决方案所提供的表单引擎是没有业务表单数据持久化的功能(即自动创建表,将表单数据持久化功能),只提供动态表单创建以及渲染功能。目前来看表单引擎服务主要功能如下:

  • 动态表单配置以及渲染(主要在于前端实现)
  • 表单数据库持久化

以下是目前实现业务表单数据持久化的几种方案:

以下方案都以请假流程的表单为例,比较简单就请假天数(days)以及请假理由(reason),动态表单如下所示:

动态表单存储设计(动态表单存储设计方案)

方案一:动态添加字段

一个表单对应数据库的一张或多张物理表(主从表)

针对请假流程如何操作呢?给请假流程表单创建一张数据表,包含字段 days 以及 reason 。其他业务表单也是如此操作。

create table leave_data( days int default 0 null comment '请假天数', reason varchar(250) null comment '请假理由')comment '请假流程业务数据';

该方案存在的问题:

  • 一个表单对应数据库的一张或多张物理表,随着业务的增多,数据库的物理表会不断膨胀。
  • 业务表单字段需要修改时(比如给请假流程添加一个开始时间字段,就需要调整物理表结构),其对应的物理表结构也需要修改,在物理表很多数据时,改变物理表scheme会锁表。

方案二:预留空白字段,动态分配

业务数据存储表:

create table data( name varchar(250) null comment '业务表单名', field_0 varchar(250) null comment '字段0', field_1 varchar(250) null comment '字段1', field_2 varchar(250) null comment '字段2', field_3 varchar(250) null comment '字段3')comment '业务数据';

业务表单属性表:

create table table_config( name varchar(250) null comment '表单名', field_name varchar(250) null comment '字段名', field_map varchar(250) null comment '字段映射')comment '表配置';

实际操作下来,存储是这样哒:

动态表单存储设计(动态表单存储设计方案)动态表单存储设计(动态表单存储设计方案)

那么动态字段变更需要修改表字段配置表即可。
缺点:

  • 操作数据的时候都需要先去 map 中转以下才能查询(程序层面可以解决)
  • 如果一张业务表保存所有的数据话,不利于优化(可以进行扩展,配置多张业务表,不过这样也可能会出现方案一中物理表爆炸的问题)

方案三:属性使用 Key/VALUE 格式存储

将表单数据全部都用 Key/Value 的格式来存储。参考如下:

create table attributes( f_id varchar(250) null comment '关联id', key varchar(250) null comment '属性', value varchar(250) null comment '属性值', field_2 varchar(250) null comment '字段2', field_3 varchar(250) null comment '字段3')comment '属性';

具体操作后即是:

动态表单存储设计(动态表单存储设计方案)

动态添加属性字段只需要添加 Key/value。题外话,reddit 的数据库就两张表,也是这样的设计方案,不过现在已经改掉了,成为历史。
缺点:

  • 不太好支持关联子表
  • 程序中处理取值不方便

方案四:MongoDB 方案设计

MongoDB 方案的话,只需要将前端发过来的JSON写入即可,这里还是以请假流程为例:

动态表单存储设计(动态表单存储设计方案)

集合内数据允许动态添加字段:

动态表单存储设计(动态表单存储设计方案)

集合类似于关系型数据库中的表,可以存储不规则的数据,只能说 Mongodb 擅长干这种事情。

总结

以上方案设计生产环境使用还需要改进使用,目前市面上用的多得应该是方案二,MongoDB 也是一个不错选项,仅在数据持久化这块,具体业务场景下使用 MongoDB 关系型数据库的设计也可以是一个备选的方案。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2024年7月8日 下午5:11
下一篇 2024年7月8日 下午5:23

相关推荐

  • 上线“财政投资评审业务管理系统”(财政投资评审中心)

    这两天,南昌县城投公司房建部的陈胜感到工作压力小了不少,今年起,他再也不用像以前一样,每到负责的项目需要财审,就搜集整理几箱子资料赶着送到财政局了。现在,他只需要把电子版传输到系统…

    科研百科 2022年11月10日
    340
  • 进度计划工具

    进度计划工具: 帮助提高工作效率和准确性 进度计划工具是一种可以帮助人们管理和跟踪进度的工具,它可以帮助人们更好地组织自己的工作和时间,提高工作效率和准确性。 使用进度计划工具,人…

    科研百科 2024年5月30日
    65
  • 山东省考笔面双第一小红书

    山东省考笔面双第一小红书 在山东省考笔面双第一的好成绩之后,我感到非常自豪和兴奋。这是我不断努力和付出的结果,也是我一直以来的梦想。 作为一名年轻人,我一直渴望成为一名优秀的医生。…

    科研百科 2024年10月28日
    1
  • 协同办公管理系统报价(协同办公招标)

    协同办公招标:寻找高效协作的办公伙伴 随着数字化时代的到来,协同办公已经成为企业日常运营不可或缺的一部分。然而,随着协同办公的需求不断增加,企业对于协同办公伙伴的需求也在不断提高。…

    科研百科 2024年6月3日
    57
  • 省级课题没结题怎么办

    省级课题没结题怎么办? 省级课题是一个非常重要的项目,可以帮助研究人员深入研究某个领域。然而,如果省级课题没结题,可能会影响研究人员的声誉和项目的质量。因此,必须采取一些措施来解决…

    科研百科 2024年10月17日
    1
  • 光华股份:已建立完善的内部控制体系和公司治理结构,确保规范运作和及时准确的信息披露

    金融界5月10日消息,光华股份披露投资者关系活动记录表显示,公司已建立了完善的内部控制体系和公司治理结构,并承诺规范运作和及时准确的信息披露。为确保内部控制体系和公司治理结构在日常…

    科研百科 2024年5月11日
    89
  • 四川省用于科研资源开放共享的年度预算总额

    四川省用于科研资源开放共享的年度预算总额 近年来,四川省政府高度重视科研资源开放共享工作,旨在推进科技创新,提高科技创新能力。为更好地发挥科研资源的作用,提高科研资源的利用效率,四…

    科研百科 2024年10月4日
    24
  • 如何维护客户关系,七个步骤,建立完善的客户关系维护体系

    维护客户关系,主要有以下几个方面的工作: 1、建立客户资料库:建立客户资料库,对客户进行标记、区分,完善客户信息 2、分管客户维护:根据销售服务等情况分配客户负责人,各自分管客户的…

    科研百科 2022年11月25日
    246
  • 公司行政经费管理制度

    公司行政经费管理制度 随着公司的不断发展,行政经费也逐渐成为公司财务中的重要一项。为了有效地管理公司行政经费,公司制定了一套严格的行政经费管理制度。本文将介绍公司的行政经费管理制度…

    科研百科 2024年7月12日
    36
  • 工程项目管理好不好

    工程项目管理的好坏对项目的成功与否有着至关重要的影响。一个好的工程项目管理可以确保项目在预定的时间、预算和范围内完成,同时也可以减少项目失败的风险。本文将探讨工程项目管理的重要性,…

    科研百科 2024年8月28日
    27