【问题标题】: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 个评分与餐厅保持在同一行。获得新评分后,将旧评分向左洗牌,在末尾添加新评分,然后计算平均值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-03
        • 1970-01-01
        • 2023-03-14
        • 2012-07-06
        • 2012-09-02
        • 1970-01-01
        • 1970-01-01
        • 2023-04-06
        相关资源
        最近更新 更多