标准答案
- created_at 记录首次创建时间,通常只写一次;updated_at 记录业务行最后一次有效变更,避免被无意义触碰频繁改写。
- 时间应统一使用 UTC 或明确带时区的规范,并在应用边界完成展示转换,避免不同服务各自解释本地时间。
- deleted_at 用于表示软删除时间,NULL 与非 NULL 的语义要固定;需要恢复时还应记录恢复操作和冲突处理。
- version 用于乐观锁或变更检测,更新语句必须把旧版本作为条件,而不是只在内存中递增。
- 常见查询要配套索引,例如按租户和创建时间分页、只查未删除数据或按更新时间增量同步。
题目解析
审计字段最常见的失败是“有字段但不可用”:不同表混用秒和毫秒、某些更新不改 updated_at、软删除后查询忘加条件。这样的字段既不能帮助排查,也可能让增量同步遗漏或重复。
迁移期间尤其需要可追踪性。新增字段、回填批次、切流时间和回滚边界都应该能通过时间、版本或迁移标记确认,而不是靠人工回忆哪次脚本跑到了哪里。
常见误区
- 把应用服务器本地时间直接写库,跨时区或夏令时切换后排序和排查出现歧义。
- 软删除后只在部分查询加 deleted_at 条件,导致已删除数据重新出现在列表或统计里。