Besy方式存储有关已存储在数据库中的数据的数据


Besy way to store data about data that is already stored in a database?

我正在努力在我的网站上创建一个收藏夹部分,用户可以简单地将某些项目存储在他们的收藏夹部分以便于访问。每个项目都已明确定义并具有多个属性。所以我的问题是,假设我有 10,000 个用户,我想实施一个"收藏夹"系统,跟踪每个用户添加了哪些收藏夹项目的最佳方法是什么?

我正在考虑以以下方式实现这一点:将每个收藏的项目ID链接到用户名,然后运行查询是否具有特定用户名的用户已登录,而不是通过该用户名检索所有收藏的项目。

我感谢任何帮助,以找出一个好方法来做到这一点。我的目标是以一种以后易于检索和使用数据的方式进行存储,并最大限度地减少冗余信息。

这很简单,您需要创建一个包含 3 个字段的新表:

id
favoriteID
userID

每次用户添加新收藏夹时,它都会向此表添加新记录,同时存储收藏夹的 ID 和用户的 ID。没有冗余信息,通过实现join查询可以轻松检索收藏夹或用户的详细信息。这就是关系数据库的用途。

在RDBMS中,你可能会有一个包含用户ID和文章ID的多对多表。您不需要独立的 id 列:

创建表favourites(user_id int、article_id int);

这些当然引用您的用户表和文章表。(或者任何你用来代替文章的东西。

然后,当想要显示单个用户的收藏夹时,您需要检索该用户的所有行。您可能还希望在列上创建组合的 UNIQUE 索引以防止重复。

使用Cassandra之类的东西,您可能会有更快的响应,您可以简单地根据user_id的键进行检索,并在一个简单的位置获得所有收藏夹。但是你正在处理残缺不全的系统。

我听说过,但没有机会研究,MySQL现在可以支持类似于Cassandra的键值系统,这可能是你最好的选择。