Хранение иерархических данных (MySQL) для реферального маркетинга

Мне нужно иметь пятиуровневую иерархию для пользователей, зарегистрированных на веб-сайте. Каждый пользователь приглашен другим, и мне нужно знать всех потомков пользователя. А еще предки для пользователя.

Я имею в виду 2 решения.

  1. Таким образом ведется таблица с отношениями. Таблица закрытия:

    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
  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

Это хорошие идеи?

Я знаю о «модели списка смежности» и «модифицированном алгоритме обхода дерева предварительного порядка», но являются ли это хорошими решениями для системы «рефералов»?

Запросы, которые мне нужно выполнить по этому дереву:

  • частое добавление новых пользователей
  • , когда пользователь что-то покупает, их рефералы получают процентную комиссию
  • , каждый пользователь должен иметь возможность узнать, сколько людей они направили (и сколько людей было направлено людьми, которых они направили ....) на каждом уровне
6
задан Ken Bloom 16 May 2011 в 17:34
поделиться