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