1

我有两个实体组。餐厅和用户。餐厅可以由用户评分(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 的最佳位置?

4

2 回答 2

3

好吧,如果您将平均值存储在某处;它只会在您上次计算时才准确。(即您有 5 条评论;然后将平均值存储在某处。您又获得 5 条新评论,然后您保存的平均值不正确)。

我的观点是,这种逻辑非常适合中间层。计算平均值不应该是资源密集型的,并且真的不应该影响性能。

如果您真的想将其存储在数据库中;我可能会将它们存储在自己的表中,并通过触发器更新这些值。但是,这可能比在中间层计算它更耗费资源。

于 2010-06-23T11:37:53.143 回答
0

某些数据库(例如 PostGreSQL)允许您将数组存储为行的一部分。例如

create table restaurants (
    ...,
    ratings integer[],
    ...
);

例如,您可以将最后 5 个评分与餐厅保持在同一行。当你得到一个新的评分时,把旧的评分向左洗牌,然后在最后加上新的评分,然后计算平均值。

于 2016-02-18T20:06:38.230 回答