【问题标题】:Rating System Database Structure评级系统数据库结构
【发布时间】:2010-06-01 05:51:41
【问题描述】:
我有两个实体组。餐厅和用户。餐厅可以由用户评分(1-5)。每个用户的评分应该是可检索的。
餐厅(id,姓名,.....,total_number_of_votes,total_voting_points)
用户(id、姓名……)
评分(id、restaurant_id、user_id、rating_value)
我是否需要存储平均值以便不需要每次都计算?哪个表是存储 avg_rating、total_no_of_votes、total_voting_points 的最佳位置?
【问题讨论】:
标签:
database-connection
relational-database
rating
rating-system
【解决方案1】:
好吧,如果您将平均值存储在某处;它只会在您上次计算时才准确。 (即您有 5 条评论;然后将平均值存储在某处。您又获得 5 条新评论,然后您保存的平均值不正确)。
我认为这种逻辑非常适合中层。计算平均值不应该占用大量资源,并且真的不应该影响性能。
如果你真的想把它存储在数据库中;我可能会将它们存储在自己的表中,并通过触发器更新这些值。但是,这可能比在中间层计算更耗费资源。
【解决方案2】:
某些数据库(例如 PostGreSQL)允许您将数组存储为行的一部分。例如
create table restaurants (
...,
ratings integer[],
...
);
因此,例如,您可以将最后 5 个评分与餐厅保持在同一行。获得新评分后,将旧评分向左洗牌,在末尾添加新评分,然后计算平均值。