2013-02-20 45 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