对数据库表设计、估算表提供建议

本文关键字:数据库 | 更新日期: 2023-09-27 18:05:23

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

在我的程序中,我需要存储时间估计的记录。工作包的估计是由36个时间段(月)的以小时为单位的估计组成的。

我的计划是有以下列:

  • id INTEGER(主键)
  • workpackageId INTEGER(外键)
  • competendId 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

对数据库表设计、估算表提供建议

这就是我的方法

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

我猜M1-26是一些估计…你可能想把它提取到另一个表中,这将给你更多的可能性来调整。

看这个例子,了解我在说什么,并根据你的需要调整它:

表WRKPKGS

  • id INTEGER(主键)
  • workpackageId INTEGER(外键)
  • competendId INTEGER(外键)
  • wrk_time_id INTEGER(外键)
表TIMEPERIODS

  • id INTEGER(主键)
  • name
  • estimated_time SMALLINT UNSIGNED
表TIME_WRKPKGS

  • id(主键)
  • id_time
  • id_wrkpkg

这是一个多对多关系,它阐明了你的数据库模式。现在,当您想要添加例如M20估计时,您需要执行以下操作:

  1. 添加作业到WRKPKGS(记住id)
  2. 添加名称为M20(记住id)的时间段
  3. 在TIME_WRKPKGS中添加链接记录(使用上面生成的id)

你得到了你想要的。现在修改这个很容易-如果你想添加最小/最大估计,你只需要扩展时间周期表,你就完成了