2014-03-31 38 views
0

我想找出最好的方法来设计一个数据库,允许用户排名一些项目。对于多个排名,一个好的mySQL数据库设计是什么?

该项目是由所有用户排名。

每个项目在开始时会自动分配一个等级。所以当我创建一个用户时,排名表将被自动填充。

因此,像这样:

users (id, name) - 100,000+ entries 
items (id, name) - never more than 1,000 entries 

我目前能想到的容纳排名的唯一事情是这样的:

rankings (id, user_id, item_id, ranking) 

但是,这感觉错了,因为我有100万项在rankings表中。我不知道这没关系?我还可以使用其他什么选项?

回答

1

每个用户可以为每个项目分配零或一个排名吗?还是她可以给一个给定的项目分配多个排名?

如果是零或一,你的排名表应具有这些列

user_id INT 
item_id INT 
ranking INT 

的主键应该是复合键(user_id, item_id)。这将禁止同一用户对同一项目进行多次排名,并且效率会很高。把一个单独的ID放在这张桌子上是不对的。

为了提高查询效率,我建议您也创建覆盖索引(user_id, item_id,ranking)(item_id, user_id, ranking)

如果您可以让您的成千上万的用户对所有1000个项目进行排名,那将非常棒。这是任何Web应用程序开发人员都喜欢拥有的问题。

这张表的行数相当小,而且我提到的索引在小规模和添加用户时都应该表现良好。

+0

感谢您的建议。排名从0到1(0.25,0.33 ...),并且每个用户只能对所有项目排名一次。我会尝试一下! –

+0

如果您的排名为0到1,您应该考虑在'排名'列中使用'FLOAT'范围[0-1]或'INT',其中0代表0.0,1000代表1.0。 –

相关问题