Mysql A「;“建议”;表结构

Mysql A「;“建议”;表结构,mysql,sql,database-design,Mysql,Sql,Database Design,你知道人们是如何看待类似或推荐的电影或电视节目的吗 看看它在底部是如何分享推荐的动画的,它们作为推荐相互链接,所以如果你在B上链接A到B,你也可以看到A,并且 从A到B B到C C-不是-A 我的问题是如何最好地处理这些条目 表 列表id 列表标题 列表内容 表 列表\u id\u A 列表\u id\u B 虽然我认为这种方法会导致大量重复,但我认为查询也会有点混乱。非常感谢您的建议。您所指的是一个相对简单的推荐引擎。对于手动分配建议的小数据集,如果a点指向B,B点指向C,这将很好地

你知道人们是如何看待类似或推荐的电影或电视节目的吗

看看它在底部是如何分享推荐的动画的,它们作为推荐相互链接,所以如果你在B上链接A到B,你也可以看到A,并且 从A到B B到C
C-不是-A

我的问题是如何最好地处理这些条目

  • 列表id

  • 列表标题

  • 列表内容

  • 列表\u id\u A

  • 列表\u id\u B


虽然我认为这种方法会导致大量重复,但我认为查询也会有点混乱。非常感谢您的建议。

您所指的是一个相对简单的推荐引擎。对于手动分配建议的小数据集,如果a点指向B,B点指向C,这将很好地工作,但是这不是一种非常可扩展的方法。在我看来,一旦你使用了超过一小部分的产品,它就变得太难维护了

你可能会发现使用一些更复杂的东西对你更好。看看人们是如何使用谷歌的预测api之类的东西的(http://code.google.com/apis/predict/docs/samples.html#demos)做这种预测。在这种情况下,您不会存储实际的链接,而是存储用户喜欢的内容,然后查看这些信息来构建您的建议

虽然预测API并不是一个适合所有人的完美解决方案,但它将为您提供一种非常简单的方法来构建站点的推荐部分,而无需深入学习机器学习技术

对于上面的表结构,如果这样做,就不需要复制数据。相反,我建议您在表中的两列中查找您所在的元素

例如,如果“建议表”中有以下记录

您可以通过使用查询获取与“2”相关的所有内容,例如:

select list_id_A from recommendations_table where list_id_B = 2
union
select list_id_B from recommendations_table where list_id_A = 2
此外,还可以添加一些sql以确保只返回唯一的结果。但最后,您如何填充这些信息,因为这可能比任何事情都更重要

如果你想更进一步,使用一种不同的技术,比如像Cassandra这样的nosql数据存储,你可以有一个名为Recommensions的列族,你的关键是你正在观看的电影。随后的列名将是推荐的电影ID。在这种情况下,结构会有如下内容:

Key, columns.....
Movie A, 4, 5, 67,1, 9,3
Movie B, 3, 4, 1
在这种情况下,您将提取特定键的所有列名,这将是您的推荐列表


在不知道如何填充数据的情况下,所有这些都是非常学术的。

如果(list\u id\u A,list\u id\u B)是表的主键,则不会有任何副本。另外,如果希望链接是双向的,那么在向表中插入新行时,比如(a,B),还必须插入(B,a)。触发器在这种情况下会有所帮助

或者,您可以只插入(A,B)或(B,A)并使用dmcnelis建议的查询:

select list_id_A from recommendations_table where list_id_B = 2
union
select list_id_B from recommendations_table where list_id_A = 2

我认为另一种解决方案更好,因为在表中存储的数据更少。但是,在这种情况下,如果表中已经有一行(a,B),那么也插入一行(B,a)是没有用的。为了防止这种情况,您可以再次使用触发器。

感谢您的详细回复!我很感激。如果这对我有帮助的话,我打算让它和我链接到的网站几乎一模一样:除了电影,而不是推荐的注释,它只会是图片、标题和简要的细节。如果MySQL是在Cassandra选项结构中设置的,它能处理事情吗?是的,我想要一个合适的缩放方法,因为它会变得很大。再次感谢当我建议像Cassandra这样的东西时,我这么做并不是因为我认为它必然是SQL的替代品。相反,它将为您提供一个查找ID的位置,查找您希望在推荐中显示的内容。因此,您可以使用Cass之类的工具获取ID,然后将关系信息存储在SQL中,并根据从备用数据存储中提取的ID查找与SQL相关的信息。
select list_id_A from recommendations_table where list_id_B = 2
union
select list_id_B from recommendations_table where list_id_A = 2