DATABASE_CLEANUP_REVIEW.md 3.7 KB

数据库清理盘点(2026-09-10)

用户确认后,本次已限定清理 water 库中下列4张废弃表,未删除其他数据库。删除前完成全库备份及4张表的恢复演练,清理后剩余59张表。

当前项目

  • 当前实际连接数据库:water,清理前63张表,清理后59张表。
  • 新供水 sa_water_* 表、后台 sa_system_* 表及工具 sa_tool_* 表继续保留。空表不等于不用,例如供水设备、内容和角色关联均有代码用途。
  • 商户、旧设备、租赁订单/用户、会员、退押、小程序、代理档案等旧表仍有运行时代码引用。菜单隐藏未移除接口;若决定废弃旧业务,应先停用相应路由和依赖,再备份、分批清理,不能单独DROP表。
  • 原有15条供水预警测试数据和3条配送任务用于用户当前验收,未授权清除。

已删除表

表 实际行数 证据 当前结论
sa_device_operation_profile 0 项目记忆明确旧手填运营参数方案已撤下;当前PHP运行目录未发现引用,引用仅见历史SQL 已备份并删除
sa_article 8 当前项目运行代码无表名或article字面引用,仅安装SQL引用 已备份并删除
sa_article_banner 3 同上,仅安装SQL引用 已备份并删除
sa_article_category 4 同上,仅安装SQL引用 已备份并删除

检查范围和限制

  • scripts/audit_water_tables.php 输出当前库结构统计、静态代码引用路径和外键;不输出业务记录或凭据。
  • 运行引用扫描覆盖 server/app、server/config 及 saiadmin/saipackage 插件 app/config;另检查项目PHP、SQL、Vue、TS和文档中的候选表名。
  • 当前库未发现声明的外键;这不代表无逻辑依赖。MySQL TABLE_ROWS 是估算值,候选表及本表格使用单独COUNT确认。
  • 清理前复核运行代码、外键、视图、触发器、存储过程及事件依赖;备份后的表结构和数据再次比对一致才执行固定白名单DROP。
  • 本地WWW目录常见 .env / database.php / db.php / database.js / database.json 配置扫描仅发现本项目配置指向water;该扫描不代表已调查所有远程或自定义配置应用。

备份与恢复

  • 完整63表备份目录:C:\Users\ADMINI~1\AppData\Local\Temp\saiadmin-unused-tables-20260910-151528,同时记录在 unused-tables-backup-location.txt。
  • database.json.gz 含表结构及数据;database-manifest.json 含表行数和SHA256;cleanup-result.json 记录限定删除清单及结果。备份含系统账户等数据,不应放入网站公开目录或提交仓库。
  • SHA256:1ddd9016b150a99295cb4d54782df1cd319ea441425fcfc42ca415a548a695f5。
  • scripts/cleanup_unused_water_tables.php <备份目录> 默认只检查。已在独立临时表中恢复4张表并比对全部行,验证通过后使用 --apply 删除。
  • 需要恢复时在server目录运行 php scripts/cleanup_unused_water_tables.php <备份目录> --restore 先检查,再加 --apply 恢复这4张表;拒绝覆盖任何同名现有表。清理完成后恢复检查已通过,未执行正式恢复。

清理结果

  • 4张目标表已不存在,剩余59张表全部保留;删除前后所有非目标表的行数均一致。
  • water_business_test.php 69项、water_device_ingress_test.php 30项、device_operation_test.php 56项通过,测试数据全部回滚。
  • 现有15条供水预警(10+5分页)及2595元测试收款核对通过。
  • 浏览器刷新后登录会话与菜单正常,配送页保留3条任务,总览显示2595元、待完成配送3单、预警15条。验证码接口HTTP200,设备预留入口保持HTTP503关闭状态。