1

我知道这篇文章,但我觉得我的问题略有不同且不那么复杂。

MySQL评级数据库结构

如果我有五十个不同的项目,并且我想为这些项目创建一个评级数据库,这仅仅是拥有一个 id 列和一个 score 列的问题吗?

因此,每次输入新评级时,项目的 id 和评级都会在数据库中创建一个新行。

然后,当我想查询单个项目的结果时,我只需查询"WHERE id =xyz "然后平均评分或对项目做任何我需要做的事情。

随着时间的推移,我最终会得到一个庞大的 ID 和评级数据库,我想这似乎有点草率,但给每个项目和单独的列等显然是大材小用。

或者,是否有更好的方法我错过了或其他我没有考虑的事情?

4

1 回答 1

1

您可能需要一个rater列,以便同一个人不能提交多个评级。如果您不打算使用登录名,则可以使用保存在 cookie 中的随机字符串。当有人尝试提交评分时,您会检查 cookie。如果 cookie 存在,您可以覆盖旧评级或禁止重新评级,但您希望处理它。如果它不存在,则生成随机字符串并将其保存在 cookie 中。

如果您不需要跟踪每个单独的评分,您可以在每个项目表中仅使用两列来完成所有操作。列将是avg_ratingnum_ratings。提交新评级时,您可以使用以下公式更新平均评级:

UPDATE item_table
SET avg_rating = @new_rating/(num_ratings+1) + avg_rating*(num_ratings/(num_ratings+1)),
    num_ratings = num_ratings + 1
WHERE item_id = @item
于 2013-05-10T19:27:31.313 回答