联盟系统的数据库设计

时间:2010-07-30 07:34:58

标签: mysql database affiliate

我正在建立一个联盟系统,我已经将数据库的设计叠加在一起。我不知道如何跟踪招募谁的人。可以说我们有类似的东西:

  • Jon Smith
    • Alex Del
      • Jim West
      • Marko Polo
      • Johny Bravo
    • Pit Sampras
      • Sara Mat
      • Gabriella white
      • Antonio Santo
    • Maja Grozdanova
      • Agon Xheladini

这一切都是这样的: 1.Jon招募Alex,Alex招募Jim,Marko和Johny。 2.Jon招募了Pit,Pit Recruited Sara,Gabriella和Antonio。 3.Jon招募了Maja,Maja招募了Agon。 Agon可以招募一些人,而且可以招募一些人,这种情况无限深入。

是否有人知道如何解决这个问题。如何设计表格?

3 个答案:

答案 0 :(得分:2)

只需使用自引用表,其中包含ID和recruitedbyid:

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

您没有提到您正在使用的数据库,但SQL Server 2008具有适合这些情况的分层数据类型hierarchyid

答案 1 :(得分:1)

  • 您处理的“实体”的一个表(人员,企业)
  • 确定关系的一个表“EntityRelation”

因此,Alex Dell与JonSmith有关系,他雇用了他。这是一种非常标准的CRM方法。

答案 2 :(得分:1)

创建两列:

  • int userId :如果您的数据库支持PRIMARY KEY和AUTO_INCREMENT。将为每个用户分配一个唯一的编号。
  • int 引荐来源:这是引用当前用户的人的userId。如果用户不是任何其他用户的关联公司,则可以将其设置为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
*/