什么是多个排名的好的mySQL数据库设计?

时间:2014-03-31 14:54:04

标签: mysql database-design

我试图找出设计数据库的最佳方法,该数据库允许用户对多个项目进行排名。

所有用户都对这些项目进行了排名。

每个项目都会在开头自动分配一个等级。因此,当我创建用户时,排名表将自动填充。

这样的事情:

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

我目前唯一能想到的排名是:

rankings (id, user_id, item_id, ranking)

但这感觉不对,因为我在rankings表中会有1亿个条目。我不知道那可以吗?我还可以使用其他选项吗?

1 个答案:

答案 0 :(得分: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个项目进行排名,那就太棒了。这是任何网络应用程序开发人员都希望拥有的问题。

这个表的行相当小,而且我提到的索引应该在较小的规模和添加用户时表现得相当不错。