标准答案
- 软删除通常用 deleted_at 或状态字段表示,所有业务查询都必须明确只读有效记录,不能依赖开发者临时记忆。
- 原有唯一键可能阻止创建同名新记录;需要根据业务决定复用旧记录、把删除标记纳入唯一约束,或单独维护有效性索引。
- 索引要匹配常见过滤,例如 tenant_id、deleted_at 与业务查询字段的组合,避免每次都先扫大量历史记录。
- 恢复前要检查是否已存在新的有效记录、关联数据是否仍完整、权限是否允许恢复。
- 软删除不是永久保存策略,涉及隐私、合规或容量时仍要有延迟物理删除和备份清理流程。
题目解析
软删除适合需要误删恢复、审计追溯或短期撤销的实体,不适合拿来逃避真正的数据生命周期设计。若一张表积累多年已删除数据,所有索引、备份和查询都会为它付出成本。
唯一性是最容易被忽略的边界。例如一个邮箱删除后重新注册,系统必须明确是恢复旧账号、创建新账号还是拒绝;三种选择对应不同的约束和安全含义。
常见误区
- 在 ORM 默认查询里漏掉软删除条件,删除的资源仍被接口或后台任务读取。
- 把 deleted_at 拼进唯一键却没有考虑 NULL 语义和数据库实现差异。