我目前正在为我的项目建立一个评分表。
每个项目都有一个分数,因此数据库(postgres)可以按分数对项目进行排序并将它们返回给用户。
目前,该产品的总分由以下公式确定:
- 新鲜度分数(由流程A计算)
- 人气分数(由流程B计算)
- 相关性分数(由流程 C 计算)
总计 = 0.5 * 新鲜度 + 0.25 * 流行度 + 0.25 * 相关度
流程 A、B、C 将运行几个小时并生成 (item_id, score, type),其中 type 可以是“新鲜”、“流行”或“相关”。
请注意,我必须保留这些值,因为它们是由不同的过程产生的。
我需要做什么才能执行SELECT * FROM items JOIN scores ON items.id == scores.item_id ORDER BY <total_score ??> DESC LIMIT 10 OFFSET 0;
编辑
type = total
一个明显的答案是为所有项目生成另一个进程。这行得通,但这很麻烦,因为其中任何一个分数的每一次变化都需要更新总分。此外,它几乎可以将我的数据存储量从 25% 增加到 100%。我不认为这是一个最佳解决方案,因为整合它需要相当多的维护。
更新
这是我的分数表:
Column | Type | Modifiers | Storage | Description
---------------+-----------------------------+-----------------------------------------------------------+----------+-------------
created_at | timestamp without time zone | | plain |
updated_at | timestamp without time zone | | plain |
id | integer | not null default | plain |
score | double precision | not null | plain |
type | character varying | not null | extended |