我正在设计一个简单的数据库来容纳两种类型的数据:
数据流当前的工作方式:在第一个表中创建许多任务,当它们完成时,计算一些post任务统计数据,然后将其附加到第二个表的单个Post聚合统计数据行中,并与同一个用户一起使用。然后删除原来的任务。
为了清晰起见,下面是一个数据值的示例:
任务:
{
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}
...
}
是否有更好/更明智的方法来设计这种类型的数据的状态。我考虑过的事情:
发布于 2018-12-09 07:34:55
如果您没有太多的卷(这在性能上可能是一个问题),我建议您不要将聚合的统计信息具体化到一个表中,而是在task
表的基础上创建一个聚合视图。这样,在查询视图时动态地计算聚合,而不需要处理额外的聚合过程。
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;
https://stackoverflow.com/questions/53692715
复制相似问题