有关此问题的数据库数据表设计的任何建议吗?

时间:2010-07-08 03:23:20

标签: database-design ms-access-2003

这有点复杂。我会努力尽可能清楚。

这是一份工作计划。我们估计任务所需的总时间,比如100小时,并将其分解为月份。例如,3月份应该30小时,4月份20小时,5月份50小时。每个月之后,计划可以更改。我需要在DB中保留计划的更新版本和历史版本,以查看趋势并预测未来。

每项任务的剩余小时数之和很重要(要绘制故障图表,您可能已经看到我们正在使用scrum模型)。我不确定如何设计它是最灵活的。我计划使用Access 2003.如果记录数量增长太快,我对性能有点担心。

对我有什么建议吗?非常感谢。

2 个答案:

答案 0 :(得分:0)

我会将每个月预测集合作为一组行进行设计。要支持历史数据,请添加“创建日期”字段。所以类似的东西(这是T-SQL语法,我很久以前放弃了Access):

CREATE TABLE dbo.TaskEstimates
(
    DateCreated         datetime    NOT NULL,
    EstimateYearMonth   datetime    NOT NULL,
    HoursRequired       decimal     NOT NULL,

    CONSTRAINT PK_TaskEstimates PRIMARY KEY CLUSTERED
    (
        DateCreated     ASC,
        EstimateMonth   ASC
    )
);

例如,DateCreated字段对于今天输入的估计集的所有成员都是相同的。 EstimateYearMonth字段仅包含年份和月份(日= 1,时间部分= 0:00:00.000)。

汇总函数和分组标准的组合允许检索您需要的任何数据组合。

除了DateCreated字段之外,您还可以使用针对每个集合递增的GroupID。所以第一组都有GroupID == 1,下一组== 2,依此类推。如果您被问到计数查询问题而不是日期查询问题,这可能更容易进行历史选择;例如“给我第三个周期估计”,而不是“给我6月份做的估计”。

顺便说一句,我通常使用datetime来表示所有与日期和时间相关的数据,而不是将其分为年,月等。所以我只需要规范化一些选择标准,而不是摆弄类型转换为每一行。

答案 1 :(得分:0)

TaskMaster
   tid
   datecreated
   estimatehours

TaskBreak
   tid
   dateupdate
   month
   hours

这里,在TaskBreak(tid,dateupdate)中是主键。当您更新任务时,在TaskBreak表中创建一个新条目。因此,这样您将拥有更新版本和任务的原始版本 如果您仅在一个月内更新一次任务计划,那么您只能将月份和年份存储在dateupdate表的TaskBreak列中。