Дизайн базы данных для партнерской системы - PullRequest
0 голосов
/ 30 июля 2010

Я строю партнерскую систему, и я собрал дизайн базы данных в одну часть.Я не знаю, как следить за тем, кто кого завербовал.Допустим, у нас есть что-то вроде этого:

  • Джон Смит
    • Алекс Дель
      • Джим Уэст
      • Марко Поло
      • ДжонниБраво
    • Яма Сампрас
      • Сара Мат
      • Габриэлла белая
      • Антонио Санто
    • Maja Grozdanova
      • Agon Xheladini

Все это происходит так: 1.Jon завербовал Алекса, Алекс завербовал Джима, Марко иJohny.2. Джон завербовал Яму, Яму завербовал Сара, Габриэлла и Антонио.3.Jon завербовал Maja, Maja завербовал Agon.Agon может завербовать кого-то, и кто-то может завербовать кого-то, это идет в бесконечную глубину.

Есть ли у кого-нибудь идеи, как решить эту проблему.Как оформить стол?

Ответы [ 3 ]

2 голосов
/ 30 июля 2010

Просто используйте таблицу со ссылками на себя, с идентификатором и recruitedbyid:

ID  Name       RecruitedBy
1   Jon Smith  null
2   Alex Del   1
3   Marko Polo 1
...

Вы не упомянули, какую базу данных вы используете, но SQL Server 2008 имеет иерархический тип данных, подходящий именно для этих ситуаций., иерархия .

1 голос
/ 30 июля 2010

Создать два столбца:

  • int userId : PRIMARY KEY и AUTO_INCREMENT, если ваша база данных поддерживает это. Каждому пользователю будет присвоен уникальный номер.
  • int referrer : это идентификатор пользователя, который ссылался на текущего пользователя. Можно установить значение 0 или NULL, если пользователь не является аффилированным лицом какого-либо другого пользователя.

Древовидные диаграммы можно легко создать с помощью нескольких строк кода.

РЕДАКТИРОВАТЬ: Так как вы спросили, вот некоторый код для древовидной диаграммы. Я выбрал PHP, потому что запросы MySQL просты в реализации, но концепцию легко реализовать на Java, C, Ruby, Python и т. Д.

function listUsers($handler, $id, $prefix) {

    // Please use MySQLi extension with prepared statements or your code
    // becomes SQL injection paradise
    $results = mysql_query("SELECT `user`, `referrer` FROM `users` WHERE `referrer` = $id");

    while ($row = mysql_fetch_row($results) {
        echo $prefix . $row[0];
        listUsers($handler, $$row[1], $prefix . "* ");
    }
}


$handler = mysql_connect(. . .);
listUsers($handler, 0, "")

Я на 80% уверен, что при правильной реализации логика будет работать. Это должно вернуть:

/*
Jon smith
* Alex Del
* * Jim West
* * Marko Polo
* * Johny Bravo
* Pit Sampras
* * Sara Mat
* * Gabriella white
* * Antonio Santo
* Maja Grozdanova
* * Agon Xheladini
*/
1 голос
/ 30 июля 2010
  • Одна таблица для "сущностей", с которыми вы имеете дело (люди, предприятия)
  • Одна таблица "EntityRelation", определяющая отношения

Итак, Алекс Делл имеет отношение к Джонсону, что он нанял его. Это довольно стандартный подход CRM.

...