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

在SQL中跟踪用户提交的评级,sql,Sql,考虑一个用户可以为游戏评分的网站。可用的评级为:无、喜欢或不喜欢。代码可以很好地跟踪评级。目前的问题是,用户可以对游戏进行评级,然后继续重新评级 如果我想存储某个游戏的用户评级,SQL表会是什么样子?不允许对每个用户/游戏重复评分。您可以使用以下表格: user: id name ... game: id name ... user_rating: user_id game_id rating 其中user\u id和game\u id指用户和游戏。它们

考虑一个用户可以为游戏评分的网站。可用的评级为:无、喜欢或不喜欢。代码可以很好地跟踪评级。目前的问题是,用户可以对游戏进行评级,然后继续重新评级


如果我想存储某个游戏的用户评级,SQL表会是什么样子?不允许对每个用户/游戏重复评分。

您可以使用以下表格:

user:
  id
  name
  ...

game:
  id
  name
  ...

user_rating:
  user_id
  game_id
  rating
其中
user\u id
game\u id
指用户和游戏。它们都构成
主键
,因此该模型不支持一次以上的用户评级


评级
包含
-1
0
+1
,可以求和得到游戏分数。

您可以使用以下表格:

user:
  id
  name
  ...

game:
  id
  name
  ...

user_rating:
  user_id
  game_id
  rating
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);
其中
user\u id
game\u id
指用户和游戏。它们都构成
主键
,因此该模型不支持一次以上的用户评级

评级
包含
-1
0
+1
,可以求和得到游戏分数

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\u id
上创建一个索引,以便检查游戏评级的查询能够使用索引。您可能希望在此索引中包含
评级\u值
字段,以使其成为更好的性能:

CREATE NONCLUSTERED INDEX ix_ratings
                          ON ratings(game_id, rating_value);
由组合主键创建的唯一索引将在数据库级别保证没有用户能够在同一个游戏上投票两次。此外,您的应用程序将很容易检查用户是否已经为特定游戏投票

您可能还希望在
game\u id
上创建一个索引,以便检查游戏评级的查询能够使用索引。您可能希望在此索引中包含
评级\u值
字段,以使其成为更好的性能:

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

很公平。也许有一点解释什么意思会有帮助,因为我觉得这是一个相当初级的问题…@Romain Muller:正在研究:)哇,这非常有帮助!谢谢你的支持!很公平。也许有一点解释什么意思会有帮助,因为我觉得这是一个相当初级的问题…@Romain Muller:正在研究:)哇,这非常有帮助!谢谢你的支持!“无”是一个真实的评级(如“中立”或“无强烈意见”),还是“无”意味着用户尚未查看游戏?无意味着没有对其进行评级,因此用户不能选择“无”。好的。Peter Lang在澄清之前回答了这个问题,他理应获胜,但你可能不会将“无”(“无审查”)作为一个特定的
评分
分数。相反,您可以将“无评论”表示为
(user\u id,game\u id)
对,该对不出现在
user\u rating
表中(使用Peter的表和列名)。“无”是真正的评级(如“中立”或“无强烈意见”),还是“无”表示用户尚未查看游戏?无表示游戏没有评级,因此用户无法选择“无”。好的。Peter Lang在澄清之前回答了这个问题,他理应获胜,但你可能不会将“无”(“无审查”)作为一个特定的
评分
分数。相反,您可以将“无评论”表示为
(user\u id,game\u id)
对,该对不出现在
user\u rating
表中(使用Peter的表和列名)。感谢您的索引程序。天哪,这里的每个人都有MLP!谢谢你的索引程序。天哪,这里的每个人都有MLP!