# 数据库清理盘点(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关闭状态。