我有一个包含三列的表:
用户 varchar,状态 varchar,rep int
status 和 rep 经常更新,其中一项要求是:
给定每个用户在给定日期的日期时间值视图状态和代表值。
我可以在表中添加一个 updated_at 日期时间列,并使用同一用户插入新行而不是更新现有行,但是表变大了,我需要将查询结果加入到其他表的类似结果中,因此我需要一个快速查询.
在 SQL Server 中解决此问题的最佳解决方案是什么?
我有一个包含三列的表:
用户 varchar,状态 varchar,rep int
status 和 rep 经常更新,其中一项要求是:
给定每个用户在给定日期的日期时间值视图状态和代表值。
我可以在表中添加一个 updated_at 日期时间列,并使用同一用户插入新行而不是更新现有行,但是表变大了,我需要将查询结果加入到其他表的类似结果中,因此我需要一个快速查询.
在 SQL Server 中解决此问题的最佳解决方案是什么?
根据您将如何使用报告信息,最好创建一个历史表,在更新主表之前,将当前值写入历史表,添加时间戳。
如果您真的只从历史中挑选特定的日期/用户/状态,那将是最好的
我会将此存储为一个单独的相关表,因为我假设大多数时候您只会在加入时查询当前状态。如果您将进行大量此类查询并将此类数据添加到许多表中,而不仅仅是此表,我将创建一个单独的 OLAP 数据库用于报告。
顺便说一句,只要您这样做,您可能会考虑是否要记录谁进行了更改。那么你基本上已经构建了一个审计解决方案。
一种选择是使用两个单独的表:“当前值”表和历史表。当前值表将包含每个用户的唯一最新值,这将使其保持小且易于连接。历史表将包含您列出的三列以及时间戳列,并将跟踪值随时间的变化。每当您想更改当前值表中的值时,您将同时使用 gettime() 作为时间戳向历史表中添加一行包含新值的行。