好友关系用数据库怎么存?

2020-05-07 06:17:23 +08:00
 pinews
A 和 B 是好友,数据库存一条记录,

查询 A 的好友时,有这条记录,
查询 B 的好友时,也有这条记录,

怎么表达这种相等的关系?
我能想到的是存 2 条记录,

之前的九九乘法歌是举例
5035 次点击
所在节点    数据库
40 条回复
noqwerty
2020-05-07 08:40:53 +08:00
@pinews #16 建议了解一下 X-Y 问题,对大家帮你找到合适的答案很有帮助: https://coolshell.cn/articles/10804.html
CrazyMoon
2020-05-07 08:43:09 +08:00
在实践中,A 的好友是 B 不等于 B 的好友是 A,所以通常都是 2 条记录
jswh
2020-05-07 09:37:18 +08:00
知识图谱了解一下
epson3333
2020-05-07 09:48:04 +08:00
@CrazyMoon 加多个字段表示到底是 A->B,A<-B 还是 A<-->B
u6pM63mMZ34z32cE
2020-05-07 10:20:06 +08:00
路过问一下, 亲戚关系数据库怎么设计?
比如叔侄关系, 通过叔叔可以查到侄子, 通过侄子可以查到叔叔
imn1
2020-05-07 10:34:15 +08:00
这个,更多是算法问题,而不是存储问题
NoKey
2020-05-07 10:55:12 +08:00
如果用简单的方式存在 mysql 里
看看可以这样存不
关键字段 人物,朋友
每个人的好友关系,记录每个人自己的
比如 a 有朋友 b,c,那就两条记录 a-b a-c
然后 b 有朋友 x,y 那就记录 b-x b-y
在代码里自己去提取组合。
NoKey
2020-05-07 10:58:53 +08:00
@mebtte 叔叔,是妈妈那边的吧,爸爸这边的应该是伯伯?通过侄子,查找他的 mather id,找到他的妈妈,跟他妈妈有相同父 id 的男性,就是叔叔?这里面要是涉及到后妈什么的,估计还得有额外字段来标示一下。
tctc4869
2020-05-07 11:14:16 +08:00
用户好友关系特征适合用文档数据库弄么?把一个用户的好友 id 和用户自己与该好友关系的相关字段存在文档内部的某个子文档里?
@lihongming
coosir
2020-05-07 11:17:44 +08:00
@NoKey 你这个亲戚关系也太混乱了吧……舅舅是哪边的?
CrazyMoon
2020-05-07 11:23:52 +08:00
@epson3333 #24 来个对非对称关系的需求,比如楼上说的叔侄关系,1 条又难了。。
zxcslove
2020-05-07 11:25:36 +08:00
@mebtte 新增成员时更新关系,达到一定界限比如出了五服为止
NoKey
2020-05-07 11:44:05 +08:00
@coosir 😂,突然发现好像搞错了,意思表达了就可以了。。。
namelosw
2020-05-07 11:44:41 +08:00
RDBMS 就是递归关联,不用 CTE 不能一口气拿出来,很别扭,另外你说的 OR 和两条都行,取决于你的需求是有向还是无向
如果图数据库直接存取就行
如果 KV 或者 Document 就是一个大 document 存关系,然后另外的地方存 node 信息

如果高级点可以研究一下 Prolog 或者 Datomic/Datalog
epson3333
2020-05-07 11:44:47 +08:00
@CrazyMoon 加多个字段表明亲戚关系不行嘛
telun
2020-05-07 11:56:44 +08:00
@pinews 与曾今的想法似曾相识,好比一首歌,有的人听到觉得伤感,有的人听到想到爱情,有的人听到想到孤单,这其中的 tag 貌似没关系,又貌似有关系。哈哈。感谢楼主提出话题。
hantsy
2020-05-07 12:19:25 +08:00
最好是用 Neo4j 之类图形数据,好友关联路径比较容易查询,比 Linkedin 那种。
lihongming
2020-05-07 12:55:35 +08:00
@tctc4869 没问题啊,文档也是 nosql,根据业务特征合理设计即可
pythonee
2020-05-07 20:53:37 +08:00
学习了,以前微博饭否时代,这是 nosql 的典型场景吧
DJQTDJ
2020-06-09 17:59:04 +08:00
话说主键是我,外键是朋友,这不就成了?
一对多关系

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/669118

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX