2010-08-17 46 views
0

我有一个任务跟踪应用程序,这是非常基本的。它目前有许多任务,随着任务完成而更新进度,从0到100%。任务报告数据库架构

的问题是,这些数据都非常短暂,我想在任务的顶部添加报表,所以像:

  • 两个日期
  • 任务数之间增加任务数两个日期
  • 多的努力(因此,这是总工作量对任务,通过100个分和timesed由变化完成)两个日期

之间完成 等等。

您如何冻结数据以便进行这种报告?

这些是我想过的迄今为止的想法:

理念1.永远不要更改任务定义,但添加包含粒状的更新任务取得进展的“TaskProgress”表 - 然后你可以“总结它们”以获得当前状态或在两个日期之间记录这两个日期之间取得的进展。值得注意的是,这将会对报告要求进行合理的改变,但不利的一面是,获取当前任务的进度将需要更多的查询工作。

想法2.创建一个表来存储进度变化。每次任务更新时,还要添加一条记录,其中包含由更改引起的计算的移位。这些报告只是在所需日期之间选择记录并对其进行总结的一种情况。最重要的是,这不会对现有的功能产生很大的影响,并且不会造成太多的查询工作,不利的一面是,如果它不包含您想添加到报告中的信息,则必须更改此表。

想法3.想法3将创建来自想法1的“TaskProgress”表,但是仍然保持对任务的总计当前进度。这意味着任务进度项目的总和将作为总量再次存储在任务本身中,但读取这些值的速度会比计算它们更快,并且为稍后更改报告提供了更大的灵活性。

任何对这些想法的评论,或更好的建议都非常受欢迎。

回答

0

我不确定我是否理解你的想法,但如果问题能够报告瞬态数据,那么为什么不使用数据库的副本?由于性能方面的原因,我们通常会复印副本,但它会解决您的问题。备份数据库,然后将其还原到另一个数据库,执行报告,然后删除数据库。

+0

我会尽力解释一下。目前任务数据与任务的当前状态有关。即“百分比完成:100,状态:完成”。但要获得报告,您需要知道两个日期之间有多少变化。例如,在第1天它是“PercentageComplete:80”,在第2天它是“PercentageComplete:90”,因此在那个时期有10%的进展。我可能使用数据复制来运行报告,但这与支持报告本身所需的模式无关(即,如果我想报告它,我需要将每个更改存储在任务状态中) – Fenton 2010-08-17 14:19:54

+0

现在我我懂了。您将需要某种审计表来存储更改。我个人会保持任务表不变,但添加一个审计表的东西沿线思想2。每当更改进度列时,您都会在审计表中添加一行,其中包含任务ID,日期时间,旧值和新值。您可以使用触发器轻松完成此操作。 这样做的好处是您仍然可以轻松获取当前进度值,并且报告问题与主表分离。 – 2010-08-17 15:28:47

+0

好的,这就是我正在做的事情...每次保存任务时,都会触发任务进度表的添加,记录更改。然后可以使用它来计算任务的进度(或未进度),并且可以从两个日期之间的任务进度表中获取记录,以查看该时间段内的所需信息。干杯。 – Fenton 2010-08-20 13:02:53