数据库归档与基于时间段的表/字段

时间:2009-07-08 05:41:07

标签: database software-design archiving

我正在开发员工目标网络应用程序。

领导/经理在与他们讨论后为团队成员设定目标。这是每年/每半年/每季度,取决于组织遵循的评估周期。

现在问题是添加基于时间段的字段或存档上一季度/年的数据的更好方法。当用户想要查看以前的目标(不是那么频繁的活动)时,属于该日期的存档可以在某个临时表中恢复并显示给员工。

开始的要点

归档:减少数据库大小,导致更简单的数据库查询,当有人试图查看旧数据时会增加开销。

基于时间段的字段/表:查询中的一个或多个额外连接,以前的数据被视为与当前数据类似,因此在检索旧数据时没有开销。

PS:这不是空间成本,我的观点是,如果我们可以在性能方面实现一些优化,因为这是一个Web应用程序,在高峰时段,组织中的所有员工都将查看/更新它。所以删除时间段使我的查询更简单。 感谢

3 个答案:

答案 0 :(得分:3)

假设您在谈论随时间变化的数据,而不是日志类型数据,那么我首选的方法是仅在主表中保留数据的“最新”版本,并自动将以前版本的数据复制到存档表中。此归档表将镜像主数据库,并添加版本化字段,例如时间戳。这种归档可以通过触发器完成。

我看到这种方法的主要好处是它不会危害您的数据库设计。特别是,您不必担心使用包含版本字段的复合键(实际上使用基于时间的字段,因为数据库甚至可能不允许使用键)。

如果您需要查看旧数据,可以对存档表运行select,并为查询添加版本约束。

答案 1 :(得分:1)

我会开始添加您的时间段字段,并等待大小成为问题。您所描述的数据类型听起来并不会占用大量存储空间。

如果它不受控制地增长,您可以随时查看存档方法 - 但编码所需的时间比仅将数据存储在相关时段上要长得多。

答案 2 :(得分:1)

在我看来,如果您要求用户可以在过去任意追溯,那么您必须确保数据可访问。

这是不可持续的:

  

属于该日期的存档可以在某个临时表中恢复并显示给员工。

我的建议是定期(在绝对必要时阅读)为此目的将“非常旧”的数据移动到另一个表中。此时磁盘空间非常便宜,因此保持这些数据并不像实现可以回到任意时间并恢复存档的系统那样昂贵。