对数据库表设计、估算表提供建议
本文关键字:数据库 | 更新日期: 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(外键)
- id INTEGER(主键)
- name
- estimated_time SMALLINT UNSIGNED
- id(主键)
- id_time
- id_wrkpkg
这是一个多对多关系,它阐明了你的数据库模式。现在,当您想要添加例如M20估计时,您需要执行以下操作:
- 添加作业到WRKPKGS(记住id)
- 添加名称为M20(记住id)的时间段
- 在TIME_WRKPKGS中添加链接记录(使用上面生成的id)
你得到了你想要的。现在修改这个很容易-如果你想添加最小/最大估计,你只需要扩展时间周期表,你就完成了