我试图找出设计数据库的最佳方法,该数据库允许用户对多个项目进行排名。
所有用户都对这些项目进行了排名。
每个项目都会在开头自动分配一个等级。因此,当我创建用户时,排名表将自动填充。
这样的事情:
users (id, name) - 100,000+ entries
items (id, name) - never more than 1,000 entries
我目前唯一能想到的排名是:
rankings (id, user_id, item_id, ranking)
但这感觉不对,因为我在rankings
表中会有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个项目进行排名,那就太棒了。这是任何网络应用程序开发人员都希望拥有的问题。
这个表的行相当小,而且我提到的索引应该在较小的规模和添加用户时表现得相当不错。