软删除模式
Soft Delete Pattern
用标志位替代物理删除,保留数据完整性并支持关联数据的优雅降级
子问题
1.is_deleted 标志位设计
2.关联数据级联处理
3.查询默认过滤已删数据
4.防止僵尸数据复活
5.订阅者感知删除状态
6.幂等迁移执行:ALTER TABLE 重复执行的错误静默处理
7.防僵尸查询设计:部分查询故意不过滤 is_deleted 以支持存在性检查
各项目的解法1 solutions
Signals
横向对比
| 维度 | ClawFeed |
|---|---|
| 删除策略 | 标志位软删除:is_deleted + deleted_at 双字段,UPDATE 替代 DELETE |
| 查询过滤 | listSources 硬编码 is_deleted=0,getSourceByTypeConfig 故意不过滤 |
| 级联处理 | 订阅关系保留不删,JOIN 携带 is_deleted 字段,前端降级展示 |
| 防僵尸机制 | Pack 安装时检查 existing.is_deleted,已删源 continue 跳过不复活 |
| 审计支持 | deleted_at 记录 UTC 时间戳,迁移幂等可重复执行 |
| 前端感知 | sourceDeleted 布尔字段驱动灰色半透明卡片 + 已停用标签 |
最佳实践
1.UPDATE 替代 DELETE 保留审计轨迹
2.查询 WHERE 默认加 is_deleted=0
3.Pack 安装跳过已删源防僵尸
4.迁移脚本逐语句 try-catch,duplicate column 错误静默忽略实现幂等
5.前端已删数据用 opacity+grayscale+pointer-events:none 降级展示