MCD - Gestion de votes

Fermé
M_Tufux - Modifié le 19 avril 2017 à 11:02
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 - 20 avril 2017 à 09:56
Bonjour,

Dans le cadre d'un examen sur 80 heures je dois réaliser une application web qui fonctionne en gros comme doodle. Le principe de l'application est de créer des sondages contenant plusieurs choix qui vont être votés par des personnes.

J'aurais besoin d'avis externe concernant mon MCD.
Je pense faire une table SONDAGE contenant les colonnes ID, Titre, Description, Choix1, Choix 2, ..., Choix 5.

Je pense imposer une limite à 5 choix sinon ça devient vite compliqué et lors de la création du sondage, le créateur peut ne définir que 2 choix qui seront affichés au votant.

Et ICI ma question: Pour la 2e table, j'ai pensé à l'appeler "Vote" et elle contiendrait les colonnes ID, NomVotant, Choix1, Choix2, ..., IDSondage.

Si je fais ça, je crée une table "vote" par sondage. Après 10K sondages, j'aurai 10K tables "vote". Est-ce que c'est vraiment une bonne idée de faire un système comme ça?

Vos avis sont les bienvenus! Merci!

2 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
Modifié le 19 avril 2017 à 18:17
Bonjour,

Personnellement ... je verrai plutôt ça comme ça :



Un sondage .. est composé de questions ....
Le fait d'avoir une table question à part te permettra de réutiliser les questions dans plusieurs sondages si besoin sans avoir à les recréer ...

Une question aura n réponses possibles.
Le "type_reponse" te permettra de définir si tu veux du choix unique ou du réponse "multiple" ou même "réponse libre".

La table "sondage_reponses" sera celle qui contiendra le résultat des "votes".

Avec cette structure tu peux aussi bien créer des votes ... que des questionnaires (QCM ou autres... )


PS: la table qui se trouve toute seule à droite de l'image.... n'est pas à prendre en compte .. c'est un loupé lors de mon copier/coller

Cordialement, 
Jordane                                                                 
1
M_Tufux Messages postés 70 Date d'inscription dimanche 11 octobre 2015 Statut Membre Dernière intervention 6 juin 2017
19 avril 2017 à 20:37
Hello, merci beaucoup pour ta réponse.

Je pense comprendre où tu veux en venir, mais ce n'est pas exactement ça dont , j'ai besoin.

Je vais essayer de mieux expliquer: Lorsque qqn crée un sondage, j'aimerais qu'il mette le titre, description et surtout qu'il écrive dans des inputs les choix possibles. (je peux pas insérer d'image...). Les choix peuvent, par exemple, être le nom des candidats pour une élection. Lorsque le formulaire est créé, l'admin du sondage est redirigé sur la page qui affiche en direct les résultats du sondage, ça s'actualise dès que qqn vote. Il peut voir qui a voté quoi.

Depuis cette page d'admin il a accès à un lien généré automatiquement (à voir comment je le génère), qui est envoyé aux votants. Ce lien redirige sur la page de votes qui affiche un petit formulaire avec le titre, la description et les noms des candidats avec une liste déroulante depuis laquelle ils vont pouvoir donner leur ordre de préférence entre les candidats.

Dès qu'ils valident le formulaire de vote, je pensais écrire leurs votes dans la table "vote". Les votes vont de 1 à 5 (5 = candidat parfait et 1 = candidat nul"). Dans la BD on verra dans la colonne "choix1" la valeur 5, dans "choix2" la valeur 2 par ex.

Cela n'est donc pas utile de pouvoir utiliser les mêmes critères plusieurs fois.

Est-ce que j'ai été plus clair et est-ce que l'idée de faire une table par vote est toujours/pas une bonne idée?

Dans tous les cas merci pour votre intérêt!
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650 > M_Tufux Messages postés 70 Date d'inscription dimanche 11 octobre 2015 Statut Membre Dernière intervention 6 juin 2017
19 avril 2017 à 20:46
Est-ce que j'ai été plus clair et est-ce que l'idée de faire une table par vote est toujours/pas une bonne idée?

Non toujours pas !

Et ... la structure que je te propose fonctionne parfaitement pour ce que tu veux faire .... elle est juste plus flexible si jamais tu veux t'en servir pour autre chose .. (mais qui peut le plus.. peut le moins... )


Lorsqu'on manipule des BDD ... on ne doit pas avoir à changer la structure (ajouter une table) en cours d'utilisation....
On défini la structure une bonne fois pour toutes ... et ensuite on ne fait que "jouer" avec les relations entre les tables.....
N'oublie jamais ça !
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > M_Tufux Messages postés 70 Date d'inscription dimanche 11 octobre 2015 Statut Membre Dernière intervention 6 juin 2017
19 avril 2017 à 22:06
je suggère ainsi:
table sondages:
id
titre
description

table choix:
id
id_sondage
nom

table votants:
id
nom

table votes:
id_choix
id_votant
vote (1 à 5)
0
M_Tufux Messages postés 70 Date d'inscription dimanche 11 octobre 2015 Statut Membre Dernière intervention 6 juin 2017
Modifié le 19 avril 2017 à 23:19
Hello yg_be, merci pour ta réponse!

Je ne sais pas si une table "votants" serait utile sachant que les personnes qui voterons sur les différents sondages n'ont rien à voir entre elles. Cela aurait été utile si j'avais voulu faire un système de login? A moins que tu ne pensais à autre chose?

Par contre, Jordane45, encore une fois merci pour ta réponse. J'ai pas encore eu le temps de bien relire ton MCD mais je le prendrai demain. Cependant je viens de trouver une idée:

Je fais la table "Sondage" qui contient les colonnes ID, Titre, Description, Choix1, Choix2, Choix3, Choix4, Choix5
Les choix peuvent être null ou = 0 s'ils ne contiennent rien (si on vote entre 2 options par ex)


Je fais la table "Vote" qui contient les colonnes ID, Nom, Choix1, Choix2, Choix3, Choix4, Choix5, Sondage_ID

les colonnes Choix de cette table vont contenir ce que le votant a voulu. Ex: Choix1 = 5; Choix2 = 1; Choix 3 = 2.
Les autres colonnes s'il y en a qui n'ont pas été utilisées vont contenir 0 ou null. Dans tous les cas, si le sondage ne comprend que 2 questions, les 3 restantes seront à 0 ou nulles dans les 2 tables.

Pour afficher les votes plus tard, je n'aurai qu'à ajouter un IS NOT NULL dans ma requête SQL et je ferai correspondre les 2 lignes provenant de Sondage et de Vote (les faire correspondre par l'ID tous les choix, vous suivez?)

Ce système me permettra 2 choses, utiliser 2 tables peu importe le nombre de sondages que les utilisateurs créent car même si les résultats sont mélangés dans la table Vote, si 50 votes ont été entrés pour le sondage no5, ils auront tous le même Sondage_ID dans la table Vote. Si dans un futur éventuel on aimerait augmenter le nombre de choix possible, au n'aura qu'à créer les colonnes Choix 6, Choix 7 etc dans les 2 tables avec comme valeur par défaut null ou 0.

Ce qui serait intéressant de faire c'est de pouvoir proposer 5 inputs pour les options par défaut (donc depuis la page de création de sondage), et si l'utilisateur le souhaite, lui laisser la possibilité d'en créer plus. En faisant ça , s'il souhaite entrer 50 candidats pour des votes, à moi de me débrouiller pour concaténer Choix avec 5, 6, 7 etc. que je créerai comme champs dans la BD, toujours avec la valeur par défaut null ou 0; j'en déciderai une des deux que j'appliquerai partout hein.
Je précise que je ferais ce que j'ai dit dans ce paragraphe tout à la fin, si j'ai du temps, mais l'idée est là.

J'ai un peu réfléchi en écrivant haha

Okok, vos avis?
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650 > M_Tufux Messages postés 70 Date d'inscription dimanche 11 octobre 2015 Statut Membre Dernière intervention 6 juin 2017
19 avril 2017 à 23:53
Si dans un futur éventuel on aimerait augmenter le nombre de choix possible, au n'aura qu'à créer les colonnes

... tu ne veux vraiment pas comprendre ......
NON ... on n'ajoute pas de nouvelles colonnes .......
Moins tu dois modifier la structure de tes tables mieux c'est !
C'est source d'erreurs .... et ce n'est pas "pratique" si, un jour, tu souhaites gérer les questions/réponses /sondages via une interface web.
0
Nanashi17 Messages postés 193 Date d'inscription mardi 28 mars 2017 Statut Membre Dernière intervention 19 juin 2017 99
19 avril 2017 à 11:19
Bonjour,

Je pense que c'est une bonne idée de mettre de procéder ainsi. Relier la table Sondage à la table Vote par une clé étrangère de cardinalité 1-n est ce qu'il y a de plus pratique et de plus simple.

Bon courage pour la suite !
0