2010-07-30 18 views
0

Je construis un système d'affiliation et j'ai empilé avec la conception de la base de données en une partie. Je ne sais pas comment suivre qui a recruté qui. Disons que nous avons quelque chose comme ceci:Conception de base de données pour le système d'affiliation

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

Tout cela va de cette façon: 1.Jon a recruté Alex, Alex a recruté Jim, Marko et Johny. 2.Jon a recruté Pit, Pit Recruited Sara, Gabriella et Antonio. 3.Jon recruté Maja, Maja recruté Agon. Agon peut recruter quelques ongles et que l'on peut recruter quelqu'un ells, cela va dans une profondeur infinie.

Est-ce que quelqu'un a une idée de comment résoudre ce problème. Comment concevoir des tables?

Répondre

2

Il suffit d'utiliser une table de référence de soi-même, avec un identifiant et un recruitedbyid:

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

Vous n'avez pas mentionné quelle base de données que vous utilisez, mais SQL Server 2008 a un type de données hiérarchique adapté à seulement ces situations, hierarchyid.

+0

désolé je suis en utilisant MySQL – AXheladini

+0

Ce sera le tableau général des utilisateurs ou je besoin de créer une autre table que pour cette question? – AXheladini

+0

@AXheladini - ce serait la seule table, comme votre exigence semble être que n'importe quel utilisateur peut être un recruteur. Les utilisateurs qui n'ont pas été recrutés auront un «null» pour RecruitedBy. – Oded

1
  • Une table pour "entités" vous traiter (personnes, entreprises)
  • Une table "EntityRelation" relations déterminantes

Ainsi, Alex Dell a une relation à JonSmith qu'il l'a engagé. C'est une approche CRM assez standard.

1

Créer deux colonnes:

  • int userId: clé primaire et AUTO_INCREMENT si votre base de données supporte. Chaque utilisateur recevra un numéro unique.
  • int referrer: Il s'agit de l'ID utilisateur de la personne qui a référé l'utilisateur actuel. Il peut être défini sur 0 ou NULL si l'utilisateur n'est pas un affilié d'un autre utilisateur.

Les diagrammes d'arbres peuvent être facilement créés avec quelques lignes de code.

EDIT: Puisque vous avez demandé, voici du code pour un diagramme en arbre. J'ai choisi PHP MySQL car les requêtes sont faciles à mettre en œuvre, mais le concept peut facilement être fait en Java, C, Ruby, Python, etc.

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, "") 

Je suis sûr à 80% la logique fonctionnera lorsqu'elles sont appliquées correctement. Il devrait retour:

/* 
Jon smith 
* Alex Del 
* * Jim West 
* * Marko Polo 
* * Johny Bravo 
* Pit Sampras 
* * Sara Mat 
* * Gabriella white 
* * Antonio Santo 
* Maja Grozdanova 
* * Agon Xheladini 
*/ 
+0

Pouvez-vous écrire un pseudo-code pour ce diagramme en arbre? – AXheladini

+0

Bien sûr. J'ai modifié mon message. – Vortico

+0

ce que je fais mal ici: AXheladini