对动态数据的操作以及处理
最近在做一个项目,需要对动态数据进行处理,这里分享一下自己的个人经验,仅作参考,积累经验。这里只写一些想法,为大家提供一个思路。
数据库的设计
对数据库的设计如果以前没有涉及到动态数据的处理可能会觉得不好拿捏,因为动态数据没有固定的字段,数据类型,长度,字段的个数,甚至连表名都不知道。那我们应该怎样去构造一个动态的数据库呢?首先,我们用一个对象code与数据库code唯一标识数据,用字段属性(item)表去存字段的属性,如:字段中英文名、字段编码、字段的数据类型(整数,枚举,小数,时间)、字段长度、是否必须字段、是否公式字段、默认值等等。如:{“code”:“user_id”,“typeData”:“txt”,“length”:“100”,“isRequired”:“1”,“name”:“用户ID”,“nameEn”:“user ID”,“isVisible”:“1”}。
再用表去存储枚举,枚举值等数据。这样便可以确定数据的字段,根据对象code与数据库code创建数据库,表的字段便是前面item表中设计的字段。管理员设计好字段后进行同步,对比设计的字段与真实数据库,同步后,对真实数据库进行修改属性。如:新增了一个user_name字段,则会在对应数据表中新增字段。这样就能够动态的去构造数据了。
动态数据的处理
-
用一个map去处理动态数据 ,因为我们不知道动态数据的固定属性字段,但我们能根据字段属性表返回一个map,一个map就是一条数据,如:{“user_id”:“123”,“user_name”:“abc”,“pwd”:“123”,“sex”:“2”},进行修改,新增时也是用<String,Object>的数据结构去操作;
-
通过item表去过去字段的属性,以及校验规则对于动态数据的校验,可以通过item表过去字段属性的去查询出数据的约束,如是否必选,是否可编辑,长度,时间,枚举,小数位数等等。获取每种可能数据类型的校验参数,对动态数据进行逐个校验;
-
导出,下载模板可以直接通过item表获取其字段属性,若有枚举值,查询枚举列表并设置下拉枚举值。导出和查询差不多,但会加入,获取动态数据的code—值的map与表头名称—code的map,map的顺序就是表头的顺序。最后还有动态枚举值的回写,如果有国际化需求还要进行国际化处理。
-
导入:导入首先通过item表,表头名称与语言获取code—数据的map,再通过item字段属性进行数据校验,对每种可能的数据进行不同的校验,最后进行相应的业务处理即可。
最后,我只是用写博客来记录自己的工作心得,如果有更好的解决方案欢迎私聊我。