哪个是跟踪工具的更好的数据库架构?

时间:2011-12-26 18:11:22

标签: database database-design

我必须生成一个显示每月跟踪的视图。最终的观点将是这样的:

|人|任务| Jan |二月|三月|四月|五月|六月。 。
|乔|屋顶工作| 100%| 50%| 50%| 25%|
|乔|地下室工作| 0%| 50%| 50%| 75%|
|汤姆|地下室工作| 100%| 100%| 100%| 100%|

我已经有以下表格:

  1. 任务
  2. 我现在在上面的2个表中创建一个新的外键表,我试图弄清楚创建1或2个表的优缺点。

    选项1:

    使用以下列创建一个新表:

    1. 编号
    2. PERSONID
    3. 的TaskID
    4. Jan2012
    5. Feb2012
    6. Mar2012
    7. Apr2013
    8. 选项2:

      有2张单独的表格

      只有一张表

      1. 编号
      2. PERSONID
      3. 的TaskID
      4. 和另一个表格仅供以下列

        1. 编号
        2. PersonTaskId(上表中的id)
        3. MonthYearKey
        4. MonthYearValue
        5. 所以示例记录将是

          | 1 | 13 | 2011年1月| 100%|

          其中13表示特定的唯一人员和任务组合。第二种方法可以避免不得不创建新列以继续(这似乎是正确的)但我也想避免过度杀伤。

          这将是一种更具伸缩性的方式来拥有此架构。此外,任何其他建议或更优雅的方式也会很棒?

2 个答案:

答案 0 :(得分:2)

您可以拥有一个包含数据列的m2m表。我没有看到为什么你不能将MonthYearKey,MonthYearValue与PersonId和TaskId放在同一个表上的原因

Id
TaskId
PersonId
MonthYearKey
MonthYearValue

您可能希望将MonthYearKey移动到他们自己的表中,它实际上归结为常见查询以及此数据的用途。

我会注意到,您永远不想设计一个由于时间而添加列的架构。第一个选项需要一直维护,并且也很难查询。

答案 1 :(得分:1)

选项2肯定更具可扩展性并且不会过度。

选项1要求您每月添加一个新列,并且无法对数据进行简单的基于日期的查询,例如:告诉我去年任何一个月至少工作90%的人。

最终视图将从特定查询或数据视图生成。