SQL数据库设计问题:多对一关系与完全分离

时间:2018-12-09 13:20:42

标签: sql database-design relational-database

我正在设计一个简单的数据库来容纳两种类型的数据:

  • 任务(工作单元):与用户的多对一关系
  • 任务后汇总统计信息(有关已完成工作的汇总数据):与用户的一对一关系。

当前数据流的工作方式:在第一个表中创建了许多任务,当它们完成后,会计算一些任务后的统计信息,然后将其附加(与一些公式汇总)到任务单的“任务后聚合统计信息”行中。具有相同用户的第二个表。然后删除原始任务。

为了清楚起见,下面是一个带有数据值的示例:

任务:

{
  id: {uuid}
  user: {user_id}
  create_time: {timestamp}
  last_modified_time: {timestamp}
  description: {string}
  completion_time: {int}
  length: {int}
  difficulty: {int}
  cost: {int}
  ...
}

任务后汇总统计

{
  id: {uuid}
  user: {user_id}
  total_completed_tasks: {int}
  avg_completion_time: {double}
  avg_task_length: {double}
  avg_task_difficulty: {double}
  avg_task_cost: {double}
  ...
}

是否有更好/更智能的方法来设计此类数据的状态。我考虑过的事情:

  • 完成后不删除任务(只需将其标记为完成),并建立多对一(汇总统计)关系
  • 不聚合统计信息,而是在任务与单个任务后的统计信息之间创建一对一的关系,然后查询统计信息表并根据需要对其进行汇总

1 个答案:

答案 0 :(得分:1)

如果您没有太多的卷,这可能会对性能造成问题,那么我建议您不要将汇总的统计数据具体化到表中,而是在//-Here I want my update like this--update({"_id":key},{$set:{field:values.value}}); return something; 表的顶部创建一个汇总的视图。这样,当您查询视图时就可以动态地动态计算聚合,而无需进行额外的聚合过程。

PostgreSQL中的示例:

task