我需要一个5级层次结构来管理注册到网站的用户。每个用户都是由其他用户邀请的,我需要知道每个用户的所有后代和祖先。
我已经有两种解决方案:
- 使用一个关系表来维护这种结构,使用闭包表格:
ancestor_id descendant_id distance
1 1 0
2 2 0
3 3 0
4 4 0
5 5 0
6 6 0
2 3 1
- 拥有这个关系表。在一个表中保存5级祖先。一个“祖先”表:
user_id ancestor_level1_id ancestor_level2_id ancestor_level3_id ancestor_level4_id ancestor_level5_id
10 9 7 4 3 2
9 7 4 3 2 1
这些是好的想法吗?
我知道“邻接列表模型”和“修改的前序树遍历算法”,但对于一个“推荐”系统来说,这些是否是好的解决方案呢?
我需要在这棵树上执行以下查询:
- 频繁地添加新用户
- 当用户购买物品时,他们的推荐人会获得一定比例的佣金
- 每个用户都应该能够找出他们推荐的人数(以及由他们推荐的人推荐的人数……)在每个级别上