我有两个实体组。餐厅和用户。餐厅可以由用户评分(1-5)。每个用户的评分应该是可检索的。
餐厅(身份证,姓名,......,total_number_of_votes,total_voting_points)用户(身份证,姓名......)
评分(id、restaurant_id、user_id、rating_value)
我是否需要存储平均值以便不需要每次都计算它?哪个表是存储 avg_rating、total_no_of_votes、total_voting_points 的最佳位置?
我有两个实体组。餐厅和用户。餐厅可以由用户评分(1-5)。每个用户的评分应该是可检索的。
餐厅(身份证,姓名,......,total_number_of_votes,total_voting_points)用户(身份证,姓名......)
评分(id、restaurant_id、user_id、rating_value)
我是否需要存储平均值以便不需要每次都计算它?哪个表是存储 avg_rating、total_no_of_votes、total_voting_points 的最佳位置?
好吧,如果您将平均值存储在某处;它只会在您上次计算时才准确。(即您有 5 条评论;然后将平均值存储在某处。您又获得 5 条新评论,然后您保存的平均值不正确)。
我的观点是,这种逻辑非常适合中间层。计算平均值不应该是资源密集型的,并且真的不应该影响性能。
如果您真的想将其存储在数据库中;我可能会将它们存储在自己的表中,并通过触发器更新这些值。但是,这可能比在中间层计算它更耗费资源。
某些数据库(例如 PostGreSQL)允许您将数组存储为行的一部分。例如
create table restaurants (
...,
ratings integer[],
...
);
例如,您可以将最后 5 个评分与餐厅保持在同一行。当你得到一个新的评分时,把旧的评分向左洗牌,然后在最后加上新的评分,然后计算平均值。