冻结前几年的数据

时间:2011-02-16 13:08:39

标签: asp.net database-design

我有一个数据库,可以跟踪当前年度和前几年的员工数据。 在下面的示例中,我将使用日历年(从1月开始到12月结束) - 情况并非总是如此,有些用户的年份从7月到6月或4月到3月等等。

有许多表格,通过一些繁重的计算,可以在此时查看员工的数据。

本年度的数据主要是用户看到的数据。但是,前几年的数据对今年产生了影响(因此,对2008年数据的改变将对2009年产生影响,然后到2010年产生影响,今年也会如此)。

显然,这会在查看报告时对性能产生负面影响,因为查看今年的数据将意味着在前几年中跋涉 - 计算和创建视图,直到找到最终结果。随着应用程序的老化,这个问题将变得越来越糟 - 比如在2015年,任何使用该系统从一开始(2008年)的人都将等待很长时间才能获得他们的数据。

我们计划冻结前几年的数据,而不是拥有2008年,2009年,2010年的数据和今年的数据 - 我们将有一个块与前一年的数据(所有计算完成前几年)和今年的数据

通过这种方式,我们可以获得前一年所有已计算的最终结果数据,我们只需要在今年添加以获得最终结果。

显然,我们必须阻止用户在过去几年中输入/更新数据。

我的问题是实现这一目标的最佳方法是什么?我认为你需要一些等到新的一年并进行一些计算的过程。

提前致谢,

ViperMAN。

3 个答案:

答案 0 :(得分:1)

您描述的方法通常称为数据存档,您可以在新年派对之后的第一个工作日每年手动运行DBA,以便准备和存储计算出的数据。

此外,如果我做对了,你的应用程序需要拒绝用户修改前几年的数据。

答案 1 :(得分:1)

我想的一种方法如下:

  1. 创建一个包含前几年计算结果的表。
  2. 从应用层阻止前几年的所有添加/删除/更新。
  3. 更改报告,以便查询可以参考此表而不是跋涉,每次都计算出所有内容。
  4. 有一个日常流程: 检查今天是否是雇员年度的第一天 - 如果是,请获取所有已过去年份的数据并将其添加到前几年。
  5. 显然,这是一个简化的版本 - 但我认为可以使用。

    思想?

答案 2 :(得分:0)

如果您有不应编辑的数据,并且您可以定义该数据是什么,那么我将使用存储过程和安全设置的组合来确保旧数据保持准确。

如果您使用存储过程作为过滤器,则可以在存储过程中使用逻辑来检查当前DateTime的记录,并且只有在符合您要求的所有内容时才允许更新。