Schéma SQL de Galactica

Galactica est la nouvelle plate-forme de vote Espace Win qui entrera en fonction pour le vote de septembre.

Spécifications techniques

Les spécifications techniques peuvent être téléchargées sur Espace Win.

Description du schéma SQL

Le présent texte recopie une explication donnée sur #Win. Il n’a donc aucune prétention de qualité, présente un ton informel et de conversation.

Galactica_Elections

Lorsqu’on crée un nouveau vote, l’on y ajoute un enregistrement avec un nouvel election_id qui est autoincrémentant.

election_start et election_end sont les dates de début et de fin de la période durant laquelle on peut voter

election_titre et election_description sont utilisés pour la page d’accueil de l’élection

Galactica_Questions

Alors ensuite donc pour une élection donnée, il y a plusieurs questions

Par exemple pour notre élection de septembre, la première question sera “Quels candidats jugez-vous acceptable pour siéger au Conseil d’Administration ?”
et la seconde question sera “Qui souhaitez-vous voir Président de #Win ?”

On reprend l’election_id de l’élection et on attribue dans l’ordre des question_id : 1, 2.

C’est pour ça que la clef primaire est sur election_id / question_id

Alors question_mode je me suis basé sur les spécifications techniques
mode 0 : question à choix unique
mode 1 : question à choix multiples ( de x à y choix )
mode 2 : idem mode 1, possibilité pour des options invisibles

Si l’on peut voter pour x à y choix, il y a lieu de stocker quelque part x et y
==> deux champs question_x, question_y (champs nuls en mode 0)

Galactica_propositions

C’est là qu’on va écrire les différentes options de vote, les différentes propositions.

Exemple pour notre question 1 :

StarRain
lighty
ct_web
progz
Dereckson
JeRoMe-

Pour la question 2 :

Dereckson

Ei on l’utilise pour un référendum, on pourra avoir des phrases, voilà pourquoi j’ai mis un TEXT et non un VARCHAR.

Cette proposition c’est une possibilité de réponse à une question
à quelle question ? question_id / election_id

Faut-il l’afficher ou non sur la page ? oui si proposition_visible = 1
(Note : inutile de vérifier proposition_visible si le mode est différent de 2)

Ah, en mode 2, il faudra donc permettre à l’utilisateur de rajouter une option et de vérifier si l’option qu’il a choisie est ou non dans la liste invisible => si oui, hop il bénéficie d’une nouvelle ligne avec une case à cocher et sa nouvelle proposition 🙂

Tu as une page avec les choix électoraux et si jamais tu veux voter pour quelqu’un qui n’est pas dans la liste, tu as une case en bas pour le rajouter.
Afin de ne pas ajouter n’importe qui le système vérifie que c’est bien une proposition invisible

Galactica_Ballots

Maintenant que le scrutin est prêt, nos électeurs peuvent remplir leurs bulletins de vote.

Ces bulletins sont décrits dans Galactica_Ballots.

C’est dans cette table que SurfBoard fera son INSERT du token délivré

ballot_created est la date de création du token (du bulletin de vote plutôt)
ballot_validated la date à laquelle l’électeur a validé son bulletin

Si ballot_validated est NULL (par défaut), cela veut dire qu’il n’a pas encore validé son bulletin de vote.

Si la config de l’élection lui interdit de modifier son bulletin après validation, on vérifie si oui ou non il y a eu validation en récupérant la valeur de ballot_validated.

Galactica_Votes

Donc Galactica_Ballots, les bulletins de vote, et enfin ce que l’électeur inscrit sur son bulletin, c’est Galactica_Votes.

Une proposition votée donne une ligne d’enregistrement token | n° de la question | la proposition de son choix

ATTENTION, dans le cadre d’une question à choix multiple, il y aura autant n’enregistrement que de vote.

Schéma SQL

2 Replies to “Schéma SQL de Galactica”

  1. Ajoutons un question_mode 3 permettant d’ajouter des choix REELLEMENT LIBRES et non plus prédéfini comme dans le question_mode 2.

    Je viens de préparer un script de consommation de la classe de dépouillement PAV qu’asturyan nous code,

    if (!in_array($row[‘question_mode’], array(1, 2, 3)) {
    //error : can’t apply PAV to this mode
    }

  2. Je vais également ajouter une vue présentnat les résultats par élection, de façon à éviter de lourdes requêtes multitables dans les modules de calcul des résultats électoraux.

    Constante à utiliser dans les scripts : VOTES_VIEW
    Champs : election_id token question_id proposition_id

Leave a Reply

Your email address will not be published.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.