Мне нужно иметь 5-уровневую иерархию для пользователей, зарегистрированных на веб-сайте. Каждый пользователь приглашен другим, и мне нужно знать всех потомков пользователя. А также предков для пользователя.
Я имею в виду 2 решения.
- Ведение таблицы с отношениями таким образом. Заключительная таблица:
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
Это хорошие идеи?
Я знаю о «модели списка смежности» и «модифицированном алгоритме обхода дерева предварительного заказа», но являются ли они хорошими решениями для «реферальной» системы?
Запросы, которые мне нужно выполнить для этого дерева:
- частое добавление новых пользователей
- когда пользователь что-то покупает, его рефереры получают процентную комиссию
- каждый пользователь должен иметь возможность узнать, сколько людей они порекомендовали (и сколько людей порекомендовали люди, которых они порекомендовали....) на каждом уровне