MySQL存储记录的进度和预期进度

时间:2015-06-16 20:32:36

标签: mysql database database-design relational-database

我需要每周记录一个项目的进度,但我还需要在这些时间间隔存储预期的进度,以便将来进行比较。

通常,每个项目都有几个不同持续时间的任务,这些任务构成了项目的总持续时间。

首次存储项目时,我会知道开始日期和结束日期,因此我会将每周间隔存储在日志表中。然后,我可以将此映射与任务相对应,以存储每个时间间隔的预期进度。然后,我计划使用cron作业记录每周的实际进度。

我觉得这个解决方案并不容易。如果项目的计划日期发生变化怎么办?如果存储了另一个任务并延长了项目的总持续时间,则原始存储的时间间隔可能不匹配。另外,如果任务在周中开始怎么办?这与项目范围的间隔不符?

我如何在MySQL的范围内执行此操作?

1 个答案:

答案 0 :(得分:1)

一些提示:

  1. 不要在项目表中存储聚合任务数据。由于任务数据可能会发生变化,因此它们只应存储在历史快照表中,并应计算聚合。
  2. 可能存在影响计划结束日期是应存储还是仅计算的业务因素。例如。项目经理可能有一个他们同意的固定日期,只有在与客户达成协议后才能更改(可能与添加/删除任务分开)。计算当前预期的结束日期可能也很有用,但前一点适用于此。
  3. 会建议一个简单的“快照”表,它不会指示何时制作进度快照,而是允许在任何特定时间记录特定任务的当前数字。
  4. 存储任务的原始估计值以及记录的当前时间和剩余估计值可能很有用。如果是这种情况,原始估计也不需要存储在快照表中,因为假设它不会改变并且可以简单地被引用。
  5. 这是一个简单的架构作为10的启动器:

    CREATE TABLE `project`
    (`id` int auto_increment,
     `name` varchar(255),
     `startDate` datetime,
     `plannedEndDate` datetime,
    PRIMARY KEY (`id`));
    
    CREATE TABLE `task`
    (`id` int auto_increment,
     `project_id` int,
     `originalEstimate` int,
     `timeLogged` int,
     `remainingEstimate` int,
    PRIMARY KEY (`id`),
    KEY `FK_task_project` (`project_id`),
    CONSTRAINT `FK_task_project` FOREIGN KEY (`project_id`) REFERENCES `project` (`id`));
    
    CREATE TABLE `progress`
    (`id` int auto_increment,
     `task_id` int,
     `timestamp` datetime,
     `timeLogged` int,
     `remainingEstimate` int,
    PRIMARY KEY (`id`),
    KEY `FK_progress_task` (`task_id`),
    CONSTRAINT `FK_progress_task` FOREIGN KEY (`task_id`) REFERENCES `task` (`id`));