Bonjour à tous.

J'aimerai créer un système de vote pour des photos. Sachant qu'un utilisateur ne peut voter qu'une fois par jour par photo (il pourra revoter le lendemain par contre, c'est des votes, pas des "j'aime" à la facebook)

J'ai donc penser à une table de liaison entre users et photos, comprenant l'id de la photo, l'id de l'utiliateur et la date du dernier vote.

Plusieurs choses

  • n'ayant pas besoin de savoir tout les votes d'un utilisateur j'ai pensé pour alléger les choses de mettre simplement un compteur au niveau de la photo, de vérifier si l'utilisateur a déjà voté pour la photo, si oui vérifier la date (si non pas besoin de la vérifier), et si tout est ok on incrémente le compteur, et on crée (ou modifie) en prenant soin de mettre la date du jour. Je pourrai aussi compter le nombre de liaisons qu'il y a, le truc c'est que admettons que j'ai beaucoup de membres ça va générer beaucoup de lignes inutiles dans ma base de données; 100 users qui votent pour 30 photos et ce sur 10 jours ben ça me ferait déjà 30.000 lignes dans cette table de liaison. Tandis qu'avec un compteur je ne garde qu'une seul ligne par user/photo (n'ayant besoin de vérifier que la date du dernier vote). Est ce une bonne solution ?

  • Ensuite j'ai dû mal à bien définir quelle relation ça pourrait être. Je penche pour une HABTM mais sans certitude

Merci d'avance.

2 réponses


Si tu n'as pas besoin de faire de stats (nombre de votes par jour par utilisateur etc ...), un seule ligne suffit en faisant comme tu as dit. Autres solutions, gérer ça avec un cookie ou avec le localeStorage.

Pour la liaison, ça sera plus une hasMany Through qu'une HABTM !

Je dirais plus un hasMany sur une table avec les champs suivant :
id, image_id, user_id, last_vote
last_vote étant un datetime.

Avant d'afficher le bouton pour voter, tu recherche dans cette table s'il y a un vote dans les dernières 24h avec l'utilisateur courant sur l'image. S'il a voté dans les 24 dernières heures, tu n'affiches pas le bouton.

A toi de mettre ça en place.