数据删改规范

删除铁律

禁止程序物理删除数据

特别是商业数据,SaaS 产品,都不能通过系统直接物理删除。

软删除

  1. 根据删除条件,查询数据 ID,通过 ID 批量软删除;
  2. 禁止通过子查询、联表查询来更新数据(会存在性能问题,且数据不好批量还原);
  3. 所有删除数据的操作,必须有 jira 留痕;
  4. 同批数据涉及多个 jira 时,必须在当前 jira 备注历史 jira 地址。
-- modified_by 例如:Jira008-20180808-01
UPDATE `table` SET `is_deleted` = 1, `modified_by` = 'jira 编号 + 版本号',  `modified_on` = NOW() WHERE `is_deleted` = 0 AND `id` IN ('xxxxxxxxxxxx');

硬删除(物理删除)

避免数据库无效数据不断增长,定期清理软删除的历史数据。

除了物理删除历史数据,还有以下做法:
1. 分布式数据库(扩容)
2. 冷热数据存储(分离)
3. 增量备份,不停服处理

这里仅注重介绍物理删除的规范
  1. 提前通知交付、区域、客户;
  2. jira 留痕,备注执行流程;
  3. 提前发起停服公告(凌晨停服);
  4. 区分需要保留的历史数据;
  5. 凌晨停止对外服务并执行删除操作:
    1. nginx 跳转停服公告页面;
    2. 备份数据库;
    3. 导出被软删除 2 年以上的数据(历史备份),
    4. 物理删除被软删除 2 年以上的数据;
    5. 团队、区域及时验证数据。
  6. 验证通过恢复产品使用。

修改数据

  1. 必须通过 jira 留痕;
  2. 根据修改条件,备份原始数据(修改出错可马上还原);
  3. modified_by = 'jira 编号 + 版本号';
  4. 禁止通过子查询、联表查询来更新数据;
  5. 通过自定义脚本,生成更新 SQL;
  6. 如果需要还原,根据备份数据,生成还原 SQL。

你可能感兴趣的:(数据删改规范)