【问题标题】:Database Schema For Task Reporting任务报告的数据库模式
【发布时间】:2010-08-17 12:29:55
【问题描述】:

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

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

  • 两个日期之间添加的任务数
  • 两个日期之间完成的任务数
  • 两个日期之间的工作量(所以这是针对任务的总工作量,除以 100 并乘以完成百分比的变化)

等等。

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

这些是我目前想到的想法:

想法 1. 永远不要更改任务定义,而是添加一个“TaskProgress”表,其中包含任务进度的粒度更新 - 然后您可以“总结它们”以获取当前状态或获取记录在两个日期之间查看两个日期之间取得了多少进展。好处是,这将在报告要求的合理变化中存活下来,坏处是获得任务的当前进度将需要更多的查询工作。

想法 2. 创建一个表来存储进度更改。每次更新任务时,还要添加一条记录,其中包含由更改引起的计算班次。然后,报告只是选择所需日期之间的记录并将它们汇总的情况。好的一面是,这不会对现有功能产生很大影响,也不会造成太多的查询工作,缺点是如果该表不包含您想要添加到报告中的信息,您将不得不更改它.

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

非常欢迎任何关于这些想法的 cmet 或更好的建议。

【问题讨论】:

    标签: database-design reporting progress-reports


    【解决方案1】:

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

    【讨论】:

    • 我会尽量解释得更好一点。目前,任务数据与任务的当前状态相关。即“百分比完成:100,状态:完成”。但要获得报告,您需要知道两个日期之间有多少变化。例如,在日期 1 为“PercentageComplete:80”,在日期 2 为“PercentageComplete:90”,因此在此期间有 10% 的进度。我可能会使用数据复制来运行报告,但这与支持报告本身所需的架构无关(即,如果我想报告任务状态,我需要将每个更改存储在任务状态中)
    • 现在我明白了。您将需要某种审计表来存储更改。我个人会保持 Tasks 表不变,但按照想法 2 添加一个审计表。每次更改进度列时,您都会在审计表中添加一行,其中包含任务 ID、日期时间、旧值和新值。您可以使用触发器轻松完成此操作。这样做的好处是您仍然可以轻松获得当前进度值,并且报告问题与主表分离。
    • 好吧,这就是我正在做的……每次保存任务时,它都会触发对任务进度表的添加,记录更改。然后可以使用它来计算任务的进度(或未进度),您可以从两个日期之间的任务进度表中获取记录,以查看您在该期间到达的位置。干杯。
    猜你喜欢
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    • 2021-01-16
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多