我目前正在为处理产品的小型微服务设计数据库模式。
该服务包含一个简单的 REST API,它允许用户执行产品的基本管理以及一些端点来查询有关产品的完整审计历史记录。Schema 已经包含一个基于快照的产品审计表,以支持存储每个产品的完整审计跟踪。
除了具有单独的审计历史端点之外,每个产品特定的 REST API 响应还必须包括 createdAt、createdBy、updatedAt、updatedBy 字段。我在这里想知道的是我应该将这些字段添加到产品表中还是直接从产品审计表中查询这些字段的信息更好?不知何故,当可以从审计表中查询相同的数据(甚至更多)时,我觉得将这些字段添加到产品表中似乎有点矫枉过正。
编辑
对产品表的每个 CREATE、UPDATE 和 DELETE 操作也会将一个新条目附加到审计表中。此审计表包含与实际产品表相同的列,以及用于审计事件的时间戳、用户 ID 和类型(ADD、MOD、DEL)的附加列。管理操作的频率非常低。
如果您要遵循在每次插入后插入审计表的模式,则无需保留创建/更改时间戳,因为它们存在于审计表中。
但是,如果模式只是在更新/删除后插入审计表(这更常见),那么您将需要保留任何相关的时间戳/用户信息和数据,以便可以将原始数据复制到审计中桌子。
通常,除非有一个非常具体的用例,否则没有必要存储创建于/创建的信息,因为这很容易从审计信息本身导出。
“上次更新”可用于检测写入冲突,其中不同用户同时读取、更改和写入一个值。在数据表中有这个值会使检测稍微简单一些。此用例不需要日期时间值,在某些极端情况下可能会出现问题。