建议数据库表设计,估计表

时间:2016-09-02 10:02:28

标签: c# mysql sql database-design relational-database

我是数据库设计的新手(虽然已阅读了几本教程)。

在我的程序中,我需要存储时间估计的记录。 工作包的估计值包括36个时段(月)的小时估计值。

我的计划是拥有以下列:

  • id INTEGER(主键)
  • workpackageId INTEGER(外键)
  • compendId INTEGER(外键)
  • M36 SMALLINT UNSIGNED
  • M35 SMALLINT UNSIGNED
  • M34 SMALLINT UNSIGNED
  • .....
  • M1 SMALLINT UNSIGNED
  • 创建了DATETIME
  • 修改DATETIME

M1至M36实际上是对一个月的工作时间的估计。 可以在一个日历月中实施的工作包仅在M1列中具有估计值。 一个至少需要6个日历月的工作包将在M1-M6栏中进行估算。

我可能需要在那里获得更多数据,并为每个时间段单独添加MIN(LIKELY)MAX估计值的分离值。

我确信有更明智的方法可以做到这一点,但我不知道如何......

任何建议都会受到极大关注......

最好的问候// Claes

2 个答案:

答案 0 :(得分:0)

这将是我的方法

Table Jobs
JobID -- Don't just use ID
workpackageId 
competendId 
CreatedOn
ModifiedOn


Table TimePeriod
TimePeriodID
TimePeriodDesc -- this is your M1, M2, etc

Table Times
TimeID
JobID  -- fk to Jobs
TimePeriodID -- fk to TimePeriod
EstimateType -- Min, Max, etc
EstimateValue INT -- pop your estimate in here
CreatedOn  -- No modify, just use the most recent created for each to allow audit history

答案 1 :(得分:0)

我猜M1-26是一些估计...... 您可能希望将其提取到另一个表格,这样您就可以对其进行更多调整。

请参阅此示例以了解我正在谈论的内容并根据您的需求进行调整:

表WRKPKGS

  • id INTEGER(主键)
  • workpackageId INTEGER(外键)
  • compendId INTEGER(外键)
  • wrk_time_id INTEGER(外键)

表TIMEPERIODS

  • id INTEGER(主键)
  • 名称VARCHAR
  • estimated_time SMALLINT UNSIGNED

表TIME_WRKPKGS

  • id(主键)
  • id_time
  • id_wrkpkg

这是多对多关系,阐明了您的数据库架构。 现在,当您想要添加例如M20估算时,您需要执行以下操作:

  1. 将工作添加到WRKPKGS(记住id)
  2. 添加名称为M20的TimePeriod(记住id)
  3. 在TIME_WRKPKGS中添加链接记录(使用上面生成的ID)
  4. 你有你想要的东西。现在修改这个很容易 - 如果你想添加最小/最大估计,你只需要扩展Timeperiods表就可以了。