2013-02-20 36 views
0

我正在爲項目管理設計Access .accdb。項目合同爲每個項目規定了若干里程碑,並附有相關日期。里程碑的確切數量取決於項目規模的「要麼/或」的情況下,但最多6多個日期字段數據庫設計

我的僱主想跟蹤[Forecast]日期,[Actual]日期和[Paid]日期爲每個里程碑,這意味着大型項目結果與它關聯的24個日期,通常重複(如果一個項目運行時間,所有四個日期將相同)

目前,我有tblMilestones,其中有一個FK鏈接到tblProject和記錄每個里程碑,將4個關聯的日期作爲記錄中的字段以及將里程碑標記爲完整或當前的字段。

我覺得我們正在收集,存儲和輸入很多毫無意義的數據 - 尤其是我們從項目經理收集數據的[Forecast]日期(不是最可靠的數據)。一旦里程碑完成並輸入日期,則[Forecast]日期相當無意義

我寧願在一張表中輸入合同日期,設置用戶標記里程碑完成時的實際日期並從交易記錄中繪製付款日期。

這是一個更好的設計方法嗎?數據庫很小 - 不到50個項目,所以我認爲我會讓事情比他們需要的更復雜,特別是在所需的額外用戶界面方面。

+0

你知道預測日期將用於什麼嗎?你可能認爲這是毫無意義的,但對於未來的分析,它可能非常重要。 – Oded 2013-02-20 22:44:08

+0

謝謝!我擔心我的設置不適合未來的分析。預測日期是PM認爲實現里程碑的日期。在里程碑的活躍階段,這很重要:瞭解項目如何按計劃運行是很好的。它將隨着PMs的月度報告而變化,因此更接近里程碑完成,預測日期將與實際值越接近。我目前的簡單tbl不會跟蹤預測日期的變化。 – KDJ 2013-02-20 23:17:52

回答

0

採取一個頁面了三維數據倉庫的設計和存儲日期在自己的表與DateID:

DateID DateValue 
------ ---------- 
    1 2000-01-01 
    ...  ... 
    9999 2012-12-31 

那麼把你的所有日期字段 - 預測,實際的支付,等等 - 成外鍵引用日期表的DateID字段。

要填充的日期表,你可以去兩種方式:

  1. 使用一些VBA產生大量的日期集,說要2005-01-01 2100年12月31日,並將其插入到日期表作爲一次性操作。

  2. 每當有人輸入新日期時,檢查日期表以查看它是否已經存在,如果沒有,插入它。

無論採用哪種方式,您都需要DateValue上的索引。

從實際問題退後一步,我意識到您正試圖將兩種不同的用途放到同一個數據庫中 - 定期交易使用(作爲您的項目管理應用程序)和分析使用(跟蹤幾種不同的里程碑的日期 - 換句話說,里程碑完成日期是一個漸變維度)。您可能需要考慮將這兩種用途分爲常規事務數據庫和數據倉庫進行分析,並設置ETL過程以在它們之間移動數據。

通過這種方式,您只能跟蹤交易數據庫中的里程碑完成日期和付款日期,數據倉庫將隨時間捕獲完成日期的更改。並允許您對此進行分析和預測,而不會使交易(應用程序)數據庫的性能下降。

+0

謝謝你理解我的窘境,我想我明白你的建議。剛剛谷歌搜索ETL,這是有道理的。我意識到我的問題總是會引發新的問題:將日期與項目關聯起來,允許用戶輸入,然後以他們理解/需要的形式將數據呈現給用戶。不過,我寧願將數據正確地表格化,然後將剩下的工作放在一邊。再次感謝你,明天我會試試這個。 – KDJ 2013-02-21 14:14:21

+0

只有一個問題:所以我會有一個tblmsmge數據指針日期表上的日期,並執行一些任何數據更改存儲爲另一個tbl作爲我的「倉庫」? – KDJ 2013-02-21 14:20:23

+0

@KDJ - 最好的問題是導致更多問題的問題。因此,要回答您的問題:是的,如果您希望採用混合方法跟蹤里程碑完成日期,那麼您的操作表格中應包含DateID作爲外鍵。如果您希望採用純數據倉庫方式,那麼您最好將日期本身存儲在事務數據庫中(但不包括預計日期,第二次預計日期,實際日期等)。然後,您可以定期運行ETL流程(比如說,每晚),以便使用 – Yawar 2013-02-22 01:12:49