记一次数据导入的想法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/nihaoa50/article/details/89683479

需求

项目于5月份上线支持。但是从3月份开始,公司就开展了实践,用Excel和文档来记录了两个月的相关数据。而且数据库的表之间是有关联关系的,并且是以数据库表自增的主键关联起来。现在需要把这两个月的数据导入到生产环境数据库,生产环境数据库只能运维的同事维护,不能自己做改动。

具体情况描述(以用户角色为例)

  • 业务部门给的excel表格如下:
    在这里插入图片描述
  • 数据库表结构如下
    在这里插入图片描述
  • 要求:
    根据excel的信息将用户信息以及用户角色信息导入到数据库中。

解决方案

1、借助于java代码和临时表来实现,适用于大规模多次的导入。

方案流程图:
在这里插入图片描述

  1. 在开发数据库中创建一个与Excel表格中字段一直的excel_temp临时表用来存储从excel中读取的数据。因为excel中的数据会比较杂乱,这一层起到了过滤的作用。不要读Excel后直接存储到开发环境的user和user_role表中,这样不好处理,出了问题难以定位。
  2. 通过java代码写逻辑,将数据从excel_temp表中获取,然后将数据根据用户角色规则插入到user和user_role表中。
  3. 数据已经存储到两张表中了。由于user_role和user是用主键进行关联的,那么如果直接用本来的主键,到生产中就很有可能与生产环境中原本数据的主键冲突。
  4. 于是,我们在生产环境中多建了1:1的两张临时表user_temp,user_role_temp,这样以便将我们上述步骤生成的数据输入到生产环境数据库中。
  5. 然后通过java代码,将数据转移到user和user_role表中。这样就不会出现主键重复的问题了。

2、方法较为简单,适合关联关系较简单的数据库

  1. 笔者依旧使用了java代码获取了excel数据并存储到excel_temp临时表中。
  2. 还是用excel_temp表的数据注入到开发环境数据库的user表中。
  3. user表的数据是初始值,所以只要插入user信息后续通过唯一的user_account就可以获取主键user_id。
  4. 于是就可以导出user数据,手动将主键字段去掉,直接可以插入到生产环境中。
  5. 而通过java代码查询excel_temp表就可以批量生成添加数据到user_role的sql语句。
INSERT INTO user_role(user_id,role_id,role_name)VALUES((SELECT user_id FROM user WHERE user_account = '10061***'),1,'管理员');
  1. 这样比上一种方法较为简单,也符合需求。

其实该项目的表应该直接以user_account这个唯一值来关联上述的两张表,这样的设计才合理。吸取教训。


划重点(∩_∩)



本人程序媛一枚,因为离港澳较近,周末兼职港澳人肉代购。

欢迎各位大佬添加本人微信,还会经常有点赞活动送价值不菲的小礼品哦。

即使现在不需要代购,等以后有了女(男)朋友、有了宝宝就肯定会需要的喽。

动动手指头,扫码一下,就当是对本博文的支持嘛,也是对一个平凡、勤劳、勇敢、秀外慧中等等优点的程序媛莫大的支持哈。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/nihaoa50/article/details/89683479