实战:Excel大数据导入通用设计,通过规则处理数据(一)数据库设计分析

“ 实践是检验真理的唯一标准”

01.表设计基本原则

    个人觉得程序员应该具备两个比较重要的能力: 表设计 和 条例清楚的编码习惯。 

    表设计的基本规则是: 一对一时, 两个表都可以放对方的主键; 一对多时,在"多"方存放"一"方的主键; 多对多时, 需要建中间表来存放双方主键的关联关系。

    编写代码的基本原则: 一个方法只对应一个功能。任何复杂的需求都可以拆分成N个小功能点, 根据功能点编写成不同的方法, 既有利于阅读, 也有利于调整, 灵活性更强。

02.表设计的考虑点

  • 同一个文件多次导入时需要能区分,防止多次导入/多次入库

  • 一个Excel文件有多个sheet,治理的对象是sheet,不是文件

  • 同一个文件/同一个sheet支持多次治理

  • 相同格式的sheet文件可以共用之前设置的治理规则

  • 治理后数据中,相同格式的数据属于同一类数据, 这类数据要满足规则中的所有需求, 比如去重, 是拿所有相同格式的数据一起去重

  • 需要显示文件处理数据进度条,显示成功/失败/排除的条数

03.表设计介绍

1.创建时间、修改时间(mysql中这样配置,代码不需要做任何处理,会自动添加值、自动更新)

`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间'

2. 文件表(import_file)和Excel单元表(sheet_info)

  • 对于整个项目来说是以文件为维度的, 对于代码层面来说是以sheet为最小数据单元的. 所以设计了两个表

  • 文件表中包含字段file_md5,作用是用来区分文件,避免同一个文件重复上传, 重复数据上传

  • 单元表和文件表的关系是: 多对一的关系, 在单元表中保留文件id的冗余字段. 

  • 单元表是跟数据直接关联的, 所以增加了total字段,方便后续的文件处理时获取原数据总条数

3. 源数据表(source_data)跟单元表(sheet_info)

  • 源数据表和单元表是直接关系, 多对一的关系, 所以在源数据中有sheet_id字段

  • 源数据和文件表(import_file)是间接关系,可以增加冗余字段file_id,也可以不加

4.文件头映射表(header_info)

  • 字段data_type是用来区分源数据/治理后数据的, 治理后有可能导致源数据的映射表的字段发生变更:增加/减少, 所以需要将治理的头映射表保存一份

  • data_type=govern时为治理头映射的数据, 它跟治理数据表(govern_data)整体上来考虑也是:一对一, 我这里就根据字段来header_no进行关联,在治理数据表中增加了header_no字段

5.治理规则表(govern_rule)

  • 因为规则是跟字段挂钩了,所以规则表跟头映射表(header_info)密切相关

  • 相同格式的文件数据可以使用之前使用过的治理规则记录, 引用字段header_no来标识

  • 治理后的数据也要满足所有的header_no字段相同的治理规则

6.治理数据表(govern_data)

  • 它跟文件单元表(sheet_id)/文件头映射表(header_no)/治理规则表(rule_no) 直接关联

  • 具有相同的文件头映射表标识的字段(header_no)的记录, 也要满足 治理规则表(govern_rule) 中对应的规则

  • 冗余之前的源数据id(source_id)

7.治理记录表(govern_record)

  • 它跟跟文件单元表(sheet_id)/文件头映射表(header_no)/治理规则表(rule_no) 直接关联

  • 记录总条数(total_num), 成功条数(success_num), 异常条数(error_num), 筛选排除条数(filtration_num),方便后期增加进度条功能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值