三人脉关系怎么存储比较合理呢

2015-09-21 08:01:04 +08:00
 ohmyga
A 推荐 B 注册 B 就是 A 的一级人脉

B 推荐 C 注册 C 就是 B 的一级人脉, C 是 A 的二级人脉

C 推荐 D 注册 D 就是 C 的一级人脉, D 是 B 的二级人脉, D 是 A 的三级人脉

每注册一人数据库记录该人上级关系可行吗

D-C-1
D-B-2
D-A-3

C-B-1
C-A-2

B-A-1
4340 次点击
所在节点    PHP
23 条回复
BobLuo
2015-09-21 13:45:58 +08:00
可以考虑用图形数据库来做存储
raincious
2015-09-21 14:11:37 +08:00
可能我没理解这个问题。但是这样的静态数据不能用缓存来减少查询么?

比如建立一张表,`user_relation_registerinvitations`,结构就像:

(Primary Key ),
userID int,
inviters char

然后`inviters`里存这个用户的上一级邀请者数组,比如用户 D 的邀请者们是:用户 A,用户 B,用户 C

当有用户 E 通过这个用户 D 的邀请注册的时候,就将这个用户 D 的`inviters`数组读出来放到一个变量里, Shift 出最前的那个用户 A , Push 进用户 D 。然后用变量里的那个新的`inviters`数组为用户 E 建立`人脉表`的数据项,表示他们分别是用户 E 的第 X 级人脉(记得倒过来)。

最后,为用户 E 在`user_relation_registerinvitations`里新建一个项,数据是

`userID` = 用户 E 的 ID
`inviters` = 用户 B,用户 C,用户 D (新的`inviters`数组)

这样当这个用户也要请其他用户注册的时候,就可以延续了。
HanSonJ
2017-08-02 01:08:23 +08:00
@raincious #22 这样设计的缺点在于不利于查询,假若要查询 用户 C 下面的用户,总不能用 like 吧

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

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

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

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

© 2021 V2EX