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

什么是一个好的mySQL数据库设计的多排名?,mysql,database-design,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) 但这感觉不对,因为在排名

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

所有用户都会对项目进行排名

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

比如说:

users (id, name) - 100,000+ entries
items (id, name) - never more than 1,000 entries
目前我唯一能想到的排名是:

rankings (id, user_id, item_id, ranking)

但这感觉不对,因为在
排名表中,我将有1亿个条目。我不知道这样行吗?我还可以使用什么选项?

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

如果是0或1,您的排名表应该有以下列

 user_id   INT   
 item_id   INT
 ranking   INT
主键应该是复合键
(用户id,项目id)
。这将禁止对同一用户的同一项目进行多个排名,而且效率相当高。在这张桌子上放一个单独的id不是正确的做法

为了提高查询效率,我建议您也创建覆盖索引
(user\u id,item\u id,ranking)
(item\u id,user\u id,ranking)

如果你能让成千上万的用户对所有1000个项目进行排名,那就太好了。这是任何web应用程序开发人员都希望遇到的问题


此表的行相当小,使用我提到的索引,无论是在较小的规模上还是在添加用户时,它都应该表现得相当好。

谢谢您的建议。排名从0到1(0.25,0.33…),所有项目将仅为每个用户排名一次。我要试试看!如果你的排名是0到1,你应该考虑使用你的<代码>排名列,或者在[0-1 ]范围内的<代码>浮点< /代码>或<代码> int <代码>,其中0表示0,1000表示1。