2015-06-16 21 views
0

我需要每週記錄一次項目進度,但我還需要在這些時間間隔中存儲預期進度以便將來進行比較。MySQL存儲日誌進度和預期進度

通常,每個項目都有多個不同持續時間的任務,這些任務構成項目的總持續時間。

當一個項目第一次存儲時,我會知道開始和結束日期,因此我會將每週間隔存儲在日誌表中。然後,我可以根據這些任務來映射這個任務,以在每個時間間隔存儲預期的進度。然後,我計劃使用cron作業來記錄每週的實際進度。

我不覺得這個解決方案容易。如果項目的計劃日期發生變化怎麼辦?如果存儲了另一個任務並延長了項目的整個持續時間,則原始存儲時間間隔可能不匹配。另外,如果任務在週中開始會怎樣?這不符合項目的時間間隔?

我該如何在MySQL的範圍內執行此操作?

+0

我將離開進展間隔最多的用戶(或的cronjob)。無論任務或項目的開始/結束日期如何,只需在給定日期添加一個存儲任務進度的表。例如,日期將被設置爲工作完成的日期。您以後可以隨時在分析時將信息連接在一起。 – Sebas

回答

1

一些提示:

  1. 不要存放在工作表中聚集任務數字。由於任務數據可能會發生變化,因此只能將其存儲在歷史快照表中,並應計算聚合。
  2. 可能存在影響計劃的結束日期是應該存儲還是僅計算的商業因素。例如。項目經理可能有一個固定的日期,他們已經同意,只有在與客戶達成一致之後才能更改(也許與添加/刪除任務分開)。計算當前預期結束日期也可能很有用,但前一點適用於此。
  3. 會建議一個簡單的「快照」表,它不會規定何時進行快照,而是允許在特定時間記錄特定任務的當前數字。
  4. 存儲任務的原始估計值以及當前記錄的時間和剩餘估計值可能很有用。如果是這種情況,則原始估計值不需要存儲在快照表中,因爲它假定不改變並且可以簡單地被引用。

這裏有一個簡單的模式作爲首發十:

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`)); 
+1

感謝您的提示。我得出的結論是,原先的建議對於數據完整性並不好,正如你所建議的那樣。 所以我提出了一個解決方案,它涉及到更多的計算在服務器端計算計劃預算佔總預算的百分比。 –

+0

完全沒問題,聽起來像你正確的方式 - 很高興幫助。 –