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

SQL Database Design Question: Many To One Relationship vs Full Separation

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

当前数据流的工作方式:许多任务是在第一个 table 中创建的,当它们完成时,会计算一些 post 任务统计数据,然后附加(使用一些公式汇总)到同一用户的第二个 table 的单个 Post-Task Aggregate Statistic 行。然后删除原始任务。

为清楚起见,这里有一个包含数据值的示例:

任务:

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

Post-任务聚合统计

{
  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}
  ...
}

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

如果您没有太多的容量,这可能会成为性能方面的问题,我建议您不要将聚合统计信息具体化为 table,而是在您的 task table。这样,当您查询视图时,您的聚合会动态计算,您无需处理额外的聚合过程。

PostgreSQL 中的示例:

create or replace view task_statistics as
select user
, count(distinct id) as total_completed_tasks
, avg(completion_time) as avg_completion_time
, avg(length) as avg_task_length
, avg(difficulty) as avg_difficulty
, avg(cost) as avg_cost
from task
group by user;