Многоуровневая вложенность БД?

Всем добрый день! Подскажите пожалуйста в какую сторону копать, чтобы максимально эффективно реализовать схему с рефералкой. 20 уровней вложенности.

Выглядит это вот так:
Андрей
	(LVL1) Дмитрий
	(LVL2)	(LVL1) Максим
	(LVL3)			(LVL1) Валентин
	(LVL4)					(LVL1) Олег


Допустим по ссылке Андрея зарегестрировался Дмитрий. Он становится первым приглашенным Андреем пользователем. И имеет LVL1, следовательно получает N бонусов.
Дальше по ссылке Дмитрия зарегестрировался Максим. Для Дмитрия он приносит N бонусов как и Дмитрий для Андрея. Но вот для Андрея он имеет LVL2 и получает N-1 бонусов.

По какому принципу строиться такая вложенность? Спасибо за ваши советы!
  • Вопрос задан
  • 779 просмотров
Решения вопроса 1
AlekseyNemiro
@AlekseyNemiro
full-stack developer
Добавить ссылку на пользователя-родителя (parent_id).

А чтобы иметь быстрый доступ ко всей цепочки и не извращаться, можно сделать дополнительное поле, в котором прописать эту самую цепочку. Для пользователя Максим ref_chain = Андрей/Дмитрий. В таблицу добавить триггеры для проверки обновления цепочки. При начислении бонусов, можно разбивать ref_chain и начислять каждому в зависимости от уровня (индекса). Если запросов будет много, то можно сделать отдельную таблицу, в которой будут прописаны связи, явным образом для каждого пользователя (чтобы избежать динамического построения связей):
Андрей  | level 0 | null
Дмитрий | level 1 | Андрей
Максим  | level 1 | Дмитрий
Максим  | level 2 | Андрей
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Zlobnost
Ищущий
Копать вам надо в сторону хранения данных. Для хранения подобной структуры подойдет и одна таблица и две таблицы и таблица с вьюхами и что угодно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы