在SQL中跟踪用户提交的评级

时间:2010-02-17 20:42:02

标签: sql

考虑一个用户可以为游戏评分的网站。可用的评级为:None,Liked或Disliked。代码将跟踪评级很好。目前的问题是用户可以对游戏进行评级并只是对其进行重新评级。

如果我想存储特定游戏的用户评级,SQL表格会如何?不应允许每个用户/游戏的重复评级。

2 个答案:

答案 0 :(得分:3)

您可以使用以下表格:

user:
  id
  name
  ...

game:
  id
  name
  ...

user_rating:
  user_id
  game_id
  rating

其中user_idgame_id指的是用户和游戏。它们都形成PRIMARY KEY,因此模型不会多次支持用户评级。

rating包含-10+1,可以将其相加以获得游戏的分数。

答案 1 :(得分:2)

CREATE TABLE ratings(
    user_id      int,
    game_id      int,
    rating_value int
);

ALTER TABLE ratings ADD CONSTRAINT pk_ratings 
                    PRIMARY KEY(user_id, game_id);

组合主键创建的唯一索引将保证在数据库级别上没有用户可以在同一游戏上投票两次。此外,您的应用程序可以轻松检查用户是否已经为特定游戏投票。

您可能还想在game_id上创建索引,以便检查游戏评分的查询将能够使用索引。您可能希望在此索引中包含rating_value字段,使其成为covering index,以获得更好的效果:

CREATE NONCLUSTERED INDEX ix_ratings
                          ON ratings(game_id, rating_value);