MySQL数据库结构,每个用户拥有无限项


MySQL database structure for infinite items per user

我有一个MySQL数据库,用户数量不断增加,每个用户都有一个他们想要的项目和他们拥有的项目列表,每个用户有一个特定的ID

当前的数据库是在一段时间前创建的,它目前在一个WANT或HAVE表中有每个用户的特定行,每行50列,用户id为主键,每个项目WANT或HAVE都有一个特定的id号。

目前,这限制了每个用户添加50个项目,并极大地使数据库的搜索和其他功能复杂化

当重做数据库时,是否可以简单地创建一个2列的WANT和HAVE表,每行都有用户ID和项目ID。这样,每个用户的项目就没有"理论"限制。

每次成员加载配置文件页面时,都会使用have或want表中的简单SELECT WHERE ID=#####语句编译他们想要和拥有的项的列表

此外,我需要对用户到用户的项目列表、最常见的项目、拥有大多数项目的用户、一个用户想要的项目和另一个用户拥有的项目的完整用户搜索进行比较…-等等等等

用户数量将在5000-20000 之间

每个用户平均约15-20个项目

这是一个可行的MySQL结构吗?还是我必须重新思考我的策略?

非常感谢你的帮助!

这在mysql中肯定是一个可行的结构。它可以处理大量的数据。但是,当您构建它时,请确保在用户/项目ID上设置了适当的索引,以便查询能够快速返回。

在数据库术语中,这被称为一对多关系。

Table1 holds:
 userName | ID
Table2 holds:
userID | ItemID

您只需在第二个表中放入所需数量的行即可。

在你的情况下,我可能会这样构建表格:

users
id | userName | otherFieldsAsNeeded
items
userID | itemID | needWantID

通过这种方式,您可以对needWantID进行简单查找,例如1表示Need,2表示Want。但稍后,您可以为愿望列表添加3。

编辑:只需确保您没有将项目信息存储在表items中,只需存储与项目的用户关系。将所有商品信息放在一个表中(例如itemDetails),其中包含您的描述、价格和您想要的任何其他信息。

我推荐两个表,一个Wants表和一个Have表。每个表都有一个user_id和product_id。我认为这是最规范的,为每个用户提供了"无限"的项目。

或者,您可以有一个具有user_id、product_id和类型('WANT'或'have')的表。我可能会选择选项1。

正如您在问题中提到的,是的,为WANTs和have单独设置一个表会更有意义。这些表可以有一个将行与用户相关联的Id列,以及一个实际指示WANT或have项的列。这种方法将允许更多的扩展空间。

需要注意的是,如果您有很多这样的行,您可能需要增加服务器的容量,以便保持快速查询。如果您有数百万行,它们将给服务器带来很大的压力(取决于您的设置)。

您的理论是一个非常合法的数据库结构。对于many to many关系(这正是您想要的),我看到的唯一方法是,就像您所说的,创建一个以user_id和item_it为列的关系表。你可以扩展它,但这是基本的想法。

这种设计更加灵活,可以为每个用户提供您想要的无限项目。

为了处理want和have,您可以创建两个表,或者只使用一个表并具有第三列,该列只包含一个字节,指示用户/项目匹配是want还是need。根据你项目的具体情况,两者都是可行的选择。

所以,你最终会得到至少以下表格:

Table: users
Cols:
  user_id
  any other user info
Table: relationships
Cols:
  user_id
  item_id
  type (1 byte/boolean)
Table: items
Cols:
  item_id
  any other item info

希望能有所帮助!