首页 > 解决方案 > 数据库设计 - 跟踪用户提交数据的最新快照

问题描述

我目前正在开发一个应用程序,它基本上允许用户在线提交数据并存储数据。我们为数据分配一个唯一的 ID,以便以后用户可以通过 ID 检索数据,并修改或删除数据。但大多数时候,我们希望用户继续提交新数据(并且我们为新数据分配一个新 ID)。我们需要跟踪所有历史数据,因此如果用户修改/删除数据,我们永远不会修改/删除原始数据,而是将数据的新快照保存到当前表中。我们总是检索数据的最新快照(每个唯一 ID)。

目前我们以这种方式获取最新的快照 - 按唯一 ID 对数据进行分组并按 db 主键排序,然后找到 Max(db primary key) 条目。我正在考虑向快照添加一个状态标志以指示哪个快照处于活动状态,以便我们可以简化 SQL 查询。但是我们的 DBA 告诉我们,这对性能不利(或使过程复杂化),因为这意味着每次用户修改数据时,我们都需要额外的步骤来停用当前快照,并且更新操作比搜索更昂贵用于数据库。但对我来说,获取数据的 SQL 查询现在变得太复杂了,因为我们对所有内容都有快照,所以我们需要对几乎所有数据的快照进行分组,而且当我们尝试检索多种类型的提交数据时也容易出错,并且数据是相关的(我们必须非常小心 sql 在哪里获取最新的快照)。所以我想就这个问题得到一些意见。有什么意见或建议吗?或者也许只是教育我为什么拥有状态标志是一个坏主意。

标签: sqldatabaseperformance

解决方案


状态标志是实现您想要的最佳方式之一。实际上,使用 Max(db primary key) 比尝试查找二进制值(0 或 1)使用更多的处理能力。


推荐阅读