我正在开发一个类似reddit的站点,每个用户(而不是每个帖子)都可以存储投票。以下是我的相关模式:
内容
id | author_id | title | text
---|-----------|-------------|---
1 | 1 (adam) | First Post | This is a test post by adam
投票:任何人在任何职位上投过的所有票
id | voter_id | content_id | category_id
---|-------------|------------------|------------
1 | 1 (adam) | 1 ("First Post") | 1 (upvote)
2 | 2 (bob) | 1 ("First Post") | 1 (upvote)
投票计数:当前计数(“计数”)的总票数收到一个职位的所有用户
id | content_id | category_id | count
---|------------------|--------------|-------
1 | 1 ("First Post") | 1 (upvote) | 2
我已经定义了一个 voteCount
Objective.js模型中的关系 content
表格:
class Content extends Model {
static tableName = 'content';
static relationMappings = {
voteCount: {
relation: Model.HasManyRelation,
modelClass: VoteCount,
join: {
from: 'content.id',
to: 'vote_count.content_id'
}
}
}
}
但我最近(学习并)决定,我不需要保持(和更新)一个单独的 vote_count
表,而实际上我可以查询 vote
表的结果基本相同:
SELECT content_id
, category_id
, COUNT(*) AS count
FROM vote
GROUP
BY content_id
, category_id
所以现在我想摆脱 vote_count
整个table。
但这似乎会打破我的记忆 voteCount
因为不会有 VoteCount
模型(此处未显示,但它与 vote_count
表)也没有了(是吗?)
我该如何保持 voteCount
摆脱关系 vote_count
表(因此 VoteCount
模特(用它)?
有没有办法在关系中指定它应该查看查询的结果,而不是查看具体的表?或者可以为同一个类定义一个模型类吗?
我在postgresql中的底层数据库。
1条答案
按热度按时间htzpubme1#
感谢@belayer。观点正是解决这个问题的方法。
js支持在模型类中使用视图(而不是表),所以我所要做的就是基于上述查询创建一个视图。
我还使用knex的迁移策略来创建/版本数据库,尽管它(目前)不支持创建现成的视图,但我发现您可以只使用原始查询:
上面的迁移步骤将替换我的表
vote_count
对于等效视图,以及objective.js模型类(VoteCount
)像往常一样工作,不需要任何改变,关系也一样voteCount
上Content
班级。