Hello,

J'ai mis en place un système de follow (oui comme twitter :) ) sur un de mes sites.
J'ai opté à l'origine pour une structure de BDD qui me semble la plus évidente :

  • 1 table de liaision FOLLOW reliée aux users (id, follower_id, following_id, created_at)

exemple de fonctionnement : lorsque l'utilisateur qui a l'id 1 suit l'utilisateur qui a l'id 2,
une entrée se crée dans la table comme suit :
id => 1
follower_id => 1
following_id => 2

Cette méthode fonctionne, cependant y aurait une autre façon (plus performante) d'organiser un système de follow en BDD ?

5 réponses


arnich
Réponse acceptée

salut

Dans la table follow je ne vois pas l'intérêt de mettre un id.
Ta clef primaire serai le couple id_follower, following_id.

Le plus important celon moi est de mettre un index sur l'id_follower.

Pour commencer je pense que c'est déjà pas mal. Par la suite il y a d'autres optimisations de bdd qui existent mais je ne sais pas si c'est implémenté dans MySQL et je ne connais pas le nom

Déjà tu pourrais (pour vraiment faire comme Twitter ou Facebook) utiliser de l'Ajax.
Histoire de rendre les requêtes PHP asynchrone.
Tu évite donc un rechargement de la page à chaque "Follow".
Graf' a fait un tuto (dispo ici) sur le sujet.

heuuu oui c'est déjà fait @mika445 (le follow se passe déjà en Ajax sur mon projet :) ) , mais c'est pas la question : On n'est bien sur l'organisation en BDD, pas sur une question de requête sinon j'aurai posté sur le forum JS ou PHP ;)

Je rejoins Arnich,

Vu que tu es sur du mysql, tu n'as pas non plus 36.000 solutions :)

J ai mis un id pour une question de logique : On n a qu une entrée si un user suit un autre user (il ne peut pas le suivre 2 fois). et je m en sers pour supprimer cette entrée lors d un unfollow.

Merci de la piste que tu donnes @arnish , Je vais y réfléchir.

En revanche Ce ne serait pas plutôt sur le following_id (le suivi) qu il faudrait mettre l index ? sachant que la requête sera le plus souvent de chercher tous les followers_id associés à un following_id (en clair afficher les followers d une personne)