最近项目的用户,提出一个棘手的需求。因业务变化不定,导入的EXCEL格式表头不是固定的,用户希望系统能兼容所有格式,并且对导入数据进行展示与分析,最后导出报表。用户原文:适应表单数据灵活变化,根据客户需要制作表单。
需求可以分解为:
1、用户无法固定待导入表单;如A表表头为A1、A2、A3…… 而B表表头为B1、B2、B3……
2、用户需要将动态表单导入到系统中处理;
3、用户需要将处理之后的数据根据动态格式导出;
该需求棘手的地方有两点:
1、oracle、sqlserver等常用数据库表头字段是固定的,无法直接根据动态业务数据建表;
2、导出的数据受到导入数据的影响,也是动态格式,无法预先指定;
针对该需求,兄弟们集体发动脑细胞,给出了三种解决方案:
1、使用[非关系型]数据库,如MongoDB,动态建表; 优点:无缝实现动态建表需求; 缺点:属于新技术,组内木有专业[非关系型DBA](自创名词);需耗时研究其部署、集成方式;风险较大;
2、程序动态建表。导入之前,在java后台获取表单格式,用后台代码建表。建表信息由一个固定数据表进行管理维护; 优点:任何格式都可以导入;操作数据方便; 缺点:表的数量无法预知,会大量创建动态表; 不方便跨表统计;
3、将表单拆分为:1、表头属性;2、表单模板;3、数据存储。 模板里面存入一般性的固定信息如批次号、客户名称、债项开始日期、债项截止日期、信访地址等; 属性中抽象出一些一般化的信息如属性编码(保证唯一性)、属性名称、显示类型(只读文本、输入框、下列框、)、输入类型(数字、字符串、日期)等。属性由模板动态组织、包装起来,根据动态格式生成表单或者导出表单; 数据存储表中存入与指定模板下某属性对应的值,该表的字段为:模板外键、属性外键、属性编码、属性值等。 优点:可以实现导入动态格式的需求; 最终数据存于数据表中,方便统计与版本控制; 缺点:数据存储表的记录随业务量增大而迅速增大;
综合考虑下,因用户业务量较小(月平均几百单),最终敲定了第三种方案。
如各位看官对该方案有建议,欢迎拍砖,咱们一起探讨优化方案。
需求可以分解为:
1、用户无法固定待导入表单;如A表表头为A1、A2、A3…… 而B表表头为B1、B2、B3……
2、用户需要将动态表单导入到系统中处理;
3、用户需要将处理之后的数据根据动态格式导出;
该需求棘手的地方有两点:
1、oracle、sqlserver等常用数据库表头字段是固定的,无法直接根据动态业务数据建表;
2、导出的数据受到导入数据的影响,也是动态格式,无法预先指定;
针对该需求,兄弟们集体发动脑细胞,给出了三种解决方案:
1、使用[非关系型]数据库,如MongoDB,动态建表; 优点:无缝实现动态建表需求; 缺点:属于新技术,组内木有专业[非关系型DBA](自创名词);需耗时研究其部署、集成方式;风险较大;
2、程序动态建表。导入之前,在java后台获取表单格式,用后台代码建表。建表信息由一个固定数据表进行管理维护; 优点:任何格式都可以导入;操作数据方便; 缺点:表的数量无法预知,会大量创建动态表; 不方便跨表统计;
3、将表单拆分为:1、表头属性;2、表单模板;3、数据存储。 模板里面存入一般性的固定信息如批次号、客户名称、债项开始日期、债项截止日期、信访地址等; 属性中抽象出一些一般化的信息如属性编码(保证唯一性)、属性名称、显示类型(只读文本、输入框、下列框、)、输入类型(数字、字符串、日期)等。属性由模板动态组织、包装起来,根据动态格式生成表单或者导出表单; 数据存储表中存入与指定模板下某属性对应的值,该表的字段为:模板外键、属性外键、属性编码、属性值等。 优点:可以实现导入动态格式的需求; 最终数据存于数据表中,方便统计与版本控制; 缺点:数据存储表的记录随业务量增大而迅速增大;
综合考虑下,因用户业务量较小(月平均几百单),最终敲定了第三种方案。
如各位看官对该方案有建议,欢迎拍砖,咱们一起探讨优化方案。