我的工作中有几种类型的多对多表。我有将单词与其他单词(ngram)相关联的应用程序,以及可以将用户与其他用户(朋友/关注者)相关联的数据库。
我想知道如何与这些数据建立关系,以便为我的应用程序推荐和我的用户找到有用的联系。
采用以下简单的数据库表,其中包含将节点链接到另一个节点的外键。
id | node1 | node2
--------------------
1 | 1 | 2
2 | 1 | 3
3 | 1 | 4
4 | 2 | 1
5 | 2 | 3
6 | 2 | 5
7 | 3 | 1
例如,在上表中,很明显“1”是最受欢迎的,因为它被链接到最多(2 和 3)。很明显,也许“2”应该与“4”相关联,因为“2”与“1”有很多关系(并且“1”与“4”相关联)。
因此,例如,我可以找到:
- 将节点连接到其他节点的路径。
- 基于相似性的有益联系(建议)
- 共享相关连接的节点组
user <=> friends
其他常见的关系形式有or 之类的东西blog_post <=> tags
。
我正在寻找可以由前端直接运行的 SQL 查询,或者可以在每晚运行以从这些数据中提取关系的 map-reduce 作业。