Partage
  • Partager sur Facebook
  • Partager sur Twitter

Organisation d'une BDD pour un système vote

Sujet résolu
    16 novembre 2010 à 23:39:35

    Bonjour

    Je travail actuellement sur un nouveau projet, je garde le thème secret on va dire pour vous situer un peu que ça ressemble dans la démarche, à un site qui présente des films vidéos.

    Pour rendre l'ensemble un peu plus convivial, je veux mettre en place un système de vote par étoile utilisant l'AJAX. Etant une bille en Javascript, je me suis lancé à la recherche d'un script faisant cette tâche.

    J'ai dans un premier temps trouvé celui ci , il n'est plus maintenu mais surtout il bug sur les navigateurs utilisant webkit.

    Du coups après quelques recherches j'ai trouvé un plugin jquery, qui fonctionne très bien sur tous les navigateurs , mais il ne gère pas l'accès à une base de donnée pour stocker le nombre de vote et la valeur des votes. Il ne renvoie qu'une variable avec la valeur du vote.

    Du coups j'ai commencé à coder la partie manquante. Ca fonctionne mais je n'ai pas pensé à empêcher une même personne de voter plusieurs fois. Et c'est ce qui m'amène ici.

    Le premier script que j'avais trouvé organise ça table de cette façon: id, total_votes, total_value, used_ips. une ligne dans la bdd représente une barre de vote et à chaque fois qu'une personne différente vote, il ajoute la nouvelle ip en la serialisant et en séparant chaque ip par un ;.

    Cette organisation rapportée à mon projet pourrait faire un truc du genre id, nom_film, description, date, total_votes, total_value, used_ips.

    Je me dis que si 2000 personnes votent, le champs used_ips contiendra beaucoup de données, beaucoup plus que les autres en tout cas.

    Du coup j'ai réfléchis à une autre possibilité d'organisation. Créer deux tables, l'une avec les données sur les films et l'autre pour le système de vote avec une structure pour ce dernier du genre id_film, total_votes, total_value, used_ips.

    la différence viendrai qu'a chaque fois qu'une personne nouvelle vote, une nouvelle ligne est créée, et lorsque l'on veut faire la moyenne on additionne toutes les valeurs des champs total_votes et total_value ayant la même id. Il ne reste plus qu'a diviser les valeurs obtenus pour avoir la moyenne, de plus mysql propose visiblement des fonctionnalités facilitant ce genre de calcul.

    Mais là aussi si 2000 personnes votent j'aurai un paquet de ligne dans la table dédié au vote.

    Je ne sais pas trop quelle solution choisir, je me dis que l'organisation des champs d'une table est importante. Il y a surement des bonnes pratiques que je ne connais pas et que l'organisation joue un rôle en terme de robustesse et d'optimisation. Ayant appris sur le tas, je n'ai jamais été confronté un problème de structure de BDD.

    Donc à votre avis quel serait la meilleure solution et pourquoi? Ou alors peut être que les deux sont bonnes et que la structure importe peu.

    Sinon j'ai toujours la possibilité de laisser les personnes voter autant de fois qu'ils le veulent car pour l'instant ça fonctionne très bien :D .

    Merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      17 novembre 2010 à 10:01:30

      Mieux vaut avoir beaucoup de lignes qu'un champ boiteux sur lequel tu dois ensuite faire 36 opérations pour récupérer l'info que tu veux. Sans oublier qu'un champ a toujours une taille maximum donc même si tu la mets à "très très grand", le jour ou ton site est "très très très fréquenté", tu vas avoir des problèmes.
      • Partager sur Facebook
      • Partager sur Twitter

      Organisation d'une BDD pour un système vote

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown