Database design 用于任务报告的数据库架构

Database design 用于任务报告的数据库架构,database-design,reporting,progress-reports,Database Design,Reporting,Progress Reports,我有一个任务跟踪应用程序,这是非常基本的。它当前有许多任务,并且随着任务的完成,进度会更新,从0%到100% 问题是,这些数据都是非常短暂的,我想在任务的顶部添加报告,因此: 两个日期之间添加的任务数 两个日期之间完成的任务数 工作量,这是任务的总工作量,除以100,乘以两个日期之间完成百分比的变化 等等 如何及时冻结数据以允许此类报告 到目前为止,我想到了以下想法: 想法1。永远不要更改任务定义,而是添加一个TaskProgress表,其中包含要对任务进度进行的细粒度更新,然后您可以将这些更新

我有一个任务跟踪应用程序,这是非常基本的。它当前有许多任务,并且随着任务的完成,进度会更新,从0%到100%

问题是,这些数据都是非常短暂的,我想在任务的顶部添加报告,因此:

两个日期之间添加的任务数 两个日期之间完成的任务数 工作量,这是任务的总工作量,除以100,乘以两个日期之间完成百分比的变化 等等

如何及时冻结数据以允许此类报告

到目前为止,我想到了以下想法:

想法1。永远不要更改任务定义,而是添加一个TaskProgress表,其中包含要对任务进度进行的细粒度更新,然后您可以将这些更新相加以获取当前状态,或者获取两个日期之间的记录,以查看两个日期之间的进度。好的一面是,这将在报告需求发生合理变化后继续存在,坏的一面是,获取任务的当前进度将需要更多的查询工作

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

想法3。想法3是从想法1创建TaskProgress表,但仍然保持与任务相对的当前总进度。这确实意味着任务进度项目的总和将作为总数再次存储在任务本身中,但读取这些值比计算它们要快,并且为以后更改报告提供了更大的灵活性


欢迎对这些想法提出任何意见或更好的建议。

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

我将尝试更好地解释。此时,任务数据与任务的当前状态相关。ie完成百分比:100,状态:完成。但要得到一份报告,你需要知道两个日期之间有多少变化。例如,在第1天,完成百分比为80,在第2天,完成百分比为90,因此在这段时间内,进度为10%。我可以使用数据复制来运行报告,但这与支持报告本身所需的模式无关,即我需要将每个更改存储在任务状态中,如果我想报告它,现在我明白了。您需要某种审计表来存储更改。我个人会保持Tasks表不变,但会按照Idea 2的思路添加一个审计表。每次更改“进度”列时,都会向审核表中添加一行,其中包含任务id、日期时间、旧值和新值。您可以使用触发器轻松地执行此操作。这样做的好处是,您仍然能够轻松获得当前进度值,并且报告关注点与主表分离。好的,这就是我正在做的。。。每次保存任务时,它都会触发对任务进度表的添加,并记录更改。然后可以使用它来计算任务的进度或取消进度,您可以从两个日期之间的任务进度表中获取记录,以查看您在这段时间内的进展情况。干杯