Form表单域的动态设计-竖表方式存储数据的优势(3)

在前面(1)(2)中分析了表单域的动态实现。也就是说表单域或者说页面显示的每一个控件不是写死的html标签。而是根据检索数据作循环以及判断动态生成的表单。

那么这种设计的优势在于可以通过直接改变数据库中对表单域的表进行修改来实现页面显示的的表单域的修改。那么这个动态的表单提交以后,数据的记录又该怎样存储呢?

首先看一下表单域的来源数据表以及页面表单的表现形式:

数据表:

页面的显示:

很显然页面的显示的表单域都是来源于上一张截图的数据表。那么就有如下的问题:

当提交表单的时候这些表单的数据应该如何存储呢?

1.设计包括表单域中28个字段的一张表?但是这样的动态的表单域的设计就是为了能够使表单可以随着不同的需求进行变化 。

如果删除了表单域中的字段到是影响不是太大,如果增加了或是修改表单域的字段,那么表单提交存储到数据库中的时候必然会丢失字段,严重的情况会造成程序的运行错误。

2.采用竖表的方式:

采用竖表的方式分析如下:简历一张专门存储表单value的表。如下图:

这个表单value的表核心的字段是fied_id 和value。

这样一来,当在表单提交的时候,将每一个表单域和value值作为一条记录存储到数据库中。每一次表单提交,实际上是向这个表中插入了多条记录,而这个多条记录组成了表单一次提交的一条数据。

也就说,数据的存储有传统的横向存储,转变成了纵向存储。这样以来就解决了前面第一种方案所不能解决的问题。也使得这样的设计做到了完全的动态话。

在数据显示的时候,只要将根据设定的主键将竖表转换成横向显示就可以了(sql语句实现)

简单的说:竖表存储解决了一个问题:使得动态数据不受横表字段数目固定的限制。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
首先,动态表单数据存储方式可以使用 EAV(Entity-Attribute-Value)模型,它可以灵活地存储不同表单数据,但是在查询时需要进行多个的联结,效率较低。另一种存储方式是使用 JSON 字段,将表单数据存储为 JSON 格式的字符串,但是在查询时需要使用 JSON 函数,也会影响效率。 下面是一个基于 EAV 模型的动态表单数据存储结构设计: 1. 表单定义(form_definition): | 字段名 | 类型 | 描述 | | ------ | ---- | ---- | | id | int | 表单定义 ID | | name | varchar | 表单名称 | | description | varchar | 表单描述 | 2. 字段定义(field_definition): | 字段名 | 类型 | 描述 | | ------ | ---- | ---- | | id | int | 字段定义 ID | | form_id | int | 表单定义 ID | | name | varchar | 字段名称 | | type | varchar | 字段类型(文本、数字、日期等) | | is_required | boolean | 是否必填 | | other_properties | json | 其他属性(例如最大长度、正则达式等) | 3. 表单数据(form_data): | 字段名 | 类型 | 描述 | | ------ | ---- | ---- | | id | int | 表单数据 ID | | form_id | int | 表单定义 ID | | created_at | datetime | 数据创建时间 | 4. 字段数据(field_data): | 字段名 | 类型 | 描述 | | ------ | ---- | ---- | | id | int | 字段数据 ID | | form_data_id | int | 表单数据 ID | | field_id | int | 字段定义 ID | | value | varchar | 字段值 | 使用这种结构设计,可以实现灵活的动态表单数据存储和查询。当需要查询某个表单数据时,可以通过联结表单定义、字段定义表单数据,再关联字段数据,以获取完整的表单数据

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hymKing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值