【问题标题】:Freezing Previous Years Data冻结前几年的数据
【发布时间】:2011-02-17 17:22:21
【问题描述】:

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

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

今年的数据是用户最关注的数据。但是前几年的数据会影响今年(因此,对 2008 年数据的更改会在 2009 年产生连锁反应,然后到 2010 年,以此类推今年)。

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

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

这样一来,我们就可以计算出所有上一年的最终结果数据,我们只需要添加到今年即可得到最终结果。

显然,我们必须阻止用户输入/更新前几年的数据。

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

提前致谢,

毒蛇人。

【问题讨论】:

    标签: asp.net database-design


    【解决方案1】:

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

    此外,如果我没记错的话,您的应用程序需要拒绝用户修改前几年的数据。

    【讨论】:

    • 嗨,Davide,这并不是真正令人讨厌的效果——所有前几年的数据结合起来形成了今年的数据。所以我们需要保留这些数据——而不是归档它。举个简单的例子:假设一个员工在 2009 年初被赋予了 20 的值。在整个 2009 年,这个数字有很多变化:2 被删除,1 被添加到它。然后在 2009 年底,这个数字是 19。然后在 2010 年,这个数字是 5。 2011年这个数字是14。我想要的是把数字14作为前几年的结果,而不是每次都计算出结果。
    【解决方案2】:

    我想到的一种方法如下:

    1. 创建一个包含前几年计算结果的表。
    2. 防止应用层对往年的所有添加/删除/更新。
    3. 更改报告,以便查询可以查阅此表,而不是每次都计算所有内容。
    4. 有一个日常流程: 检查今天是否是员工一年的第一天- 如果是,请获取所有过去年份的数据并将它们添加到所有以前的年份。

    显然,这是一个简化版本,但我认为它可以工作。

    想法?

    【讨论】:

      【解决方案3】:

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

      如果您使用存储过程作为过滤器,则可以在存储过程中设置逻辑,根据当前日期时间检查记录,并且仅在一切符合您的要求时才允许更新。

      【讨论】:

      • 谢谢贾斯汀,我认为阻止用户更新旧记录将是问题中最简单的部分。对我来说,有两个主要问题: 1 .找到最好的方法来保持所有员工以前的数据计算并准备好使用。 2. 新的一年开始时,将最近经过的数据添加到组合中。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-21
      • 1970-01-01
      • 2018-06-02
      • 1970-01-01
      • 2022-01-19
      • 2021-07-02
      • 2017-04-06
      相关资源
      最近更新 更多