我有一个需求是为了分辨多个用户之间是否是分身(需求背景是为了防止新注册用户薅羊毛,优惠力度挺大的,是分身的用户只要一人享受了优惠,其他人不能再次享受), 所以我要将多个用户之间人为的去关联,比如用户 A 关联了 B ,A 和 B 互为分身;用户 B 再关联了 C ,B 和 C 互为 分身,C 和 A 也互为分身,因为有中间人 B ,以此类推,中间人的层级不限,这种用推荐使用什么算法实现呢?
我自己想到的是多存数据将这种层级平铺:
当用户 A 直接关联用户 B 时,我们在 associations
表中插入两条记录:
associations 表结构:user_id 关联用户 ID ,associated_user_id:被关联用户 ID ,is_direct:是否是直接关联
INSERT INTO associations (user_id, associated_user_id, is_direct) VALUES (A 的用户 ID, B 的用户 ID, TRUE);
INSERT INTO associations (user_id, associated_user_id, is_direct) VALUES (B 的用户 ID, A 的用户 ID, TRUE);
当用户 B 再直接关联用户 C 时,不仅插入 B 和 C 之间的直接关联记录,还插入 A 和 C 之间的间接关联记录:
INSERT INTO associations (user_id, associated_user_id, is_direct) VALUES (B 的用户 ID, C 的用户 ID, TRUE);
INSERT INTO associations (user_id, associated_user_id, is_direct) VALUES (C 的用户 ID, B 的用户 ID, TRUE);
INSERT INTO associations (user_id, associated_user_id, is_direct) VALUES (A 的用户 ID, C 的用户 ID, FALSE);
INSERT INTO associations (user_id, associated_user_id, is_direct) VALUES (C 的用户 ID, A 的用户 ID, FALSE);
需要用到的场景有: 取消关联某两个用户之间的关联 查询给定用户的所有分身
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.