{"id":44,"date":"2006-08-19T18:00:22","date_gmt":"2006-08-19T18:00:22","guid":{"rendered":"http:\/\/www.dereckson.be\/blog\/2006\/08\/19\/schema-sql-de-galactica\/"},"modified":"2017-02-06T21:13:36","modified_gmt":"2017-02-06T20:13:36","slug":"schema-sql-de-galactica","status":"publish","type":"post","link":"https:\/\/www.dereckson.be\/blog\/2006\/08\/19\/schema-sql-de-galactica\/","title":{"rendered":"Sch\u00e9ma SQL de Galactica"},"content":{"rendered":"<p>Galactica est la nouvelle plate-forme de vote Espace Win qui entrera en fonction pour le vote de septembre.<br \/>\n<!--more--><\/p>\n<h2>Sp\u00e9cifications techniques<\/h2>\n<blockquote><p>Les sp\u00e9cifications techniques peuvent \u00eatre <a href=\"http:\/\/www.espace-win.org\/EWOSP\/Galactica\/SpecificationsTechniques-1.pdf\" hreflang=\"fr\">t\u00e9l\u00e9charg\u00e9es sur Espace Win<\/a>.<\/p><\/blockquote>\n<h2>Description du sch\u00e9ma SQL<\/h2>\n<p><em>Le pr\u00e9sent texte recopie une explication donn\u00e9e sur #Win. Il n&#8217;a donc aucune pr\u00e9tention de qualit\u00e9, pr\u00e9sente un ton informel et de conversation.<\/em><\/p>\n<p><strong>Galactica_Elections<\/strong><\/p>\n<p>Lorsqu&#8217;on cr\u00e9e un nouveau vote, l&#8217;on y ajoute un enregistrement avec un nouvel election_id qui est autoincr\u00e9mentant.<\/p>\n<p>election_start et election_end sont les dates de d\u00e9but et de fin de la p\u00e9riode durant laquelle on peut voter<\/p>\n<p>election_titre et election_description sont utilis\u00e9s pour la page d&#8217;accueil de l&#8217;\u00e9lection<\/p>\n<p><strong>Galactica_Questions<\/strong><\/p>\n<p>Alors ensuite donc pour une \u00e9lection donn\u00e9e, il y a plusieurs questions<\/p>\n<p>Par exemple pour notre \u00e9lection de septembre, la premi\u00e8re question sera &#8220;Quels candidats jugez-vous acceptable pour si\u00e9ger au Conseil d&#8217;Administration ?&#8221;<br \/>\net la seconde question sera &#8220;Qui souhaitez-vous voir Pr\u00e9sident de #Win ?&#8221;<\/p>\n<p>On reprend l&#8217;election_id de l&#8217;\u00e9lection et on attribue dans l&#8217;ordre des question_id : 1, 2.<\/p>\n<p>C&#8217;est pour \u00e7a que la clef primaire est sur election_id \/ question_id<\/p>\n<p>Alors question_mode je me suis bas\u00e9 sur les sp\u00e9cifications techniques<br \/>\nmode 0 : question \u00e0 choix unique<br \/>\nmode 1 : question \u00e0 choix multiples ( de x \u00e0 y choix )<br \/>\nmode 2 : idem mode 1, possibilit\u00e9 pour des options invisibles<\/p>\n<p>Si l&#8217;on peut voter pour x \u00e0 y choix, il y a lieu de stocker quelque part x et y<br \/>\n==&gt; deux champs question_x, question_y (champs nuls en mode 0)<\/p>\n<p><strong>Galactica_propositions<\/strong><\/p>\n<p>C&#8217;est l\u00e0 qu&#8217;on va \u00e9crire les diff\u00e9rentes options de vote, les diff\u00e9rentes propositions.<\/p>\n<blockquote><p>Exemple pour notre question 1 :<\/p>\n<p>StarRain<br \/>\nlighty<br \/>\nct_web<br \/>\nprogz<br \/>\nDereckson<br \/>\nJeRoMe-<\/p>\n<p>Pour la question 2 :<\/p>\n<p>Dereckson<\/p><\/blockquote>\n<p>Ei on l&#8217;utilise pour un r\u00e9f\u00e9rendum, on pourra avoir des phrases, voil\u00e0 pourquoi j&#8217;ai mis un TEXT et non un VARCHAR.<\/p>\n<p>Cette proposition c&#8217;est une possibilit\u00e9 de r\u00e9ponse \u00e0 une question<br \/>\n\u00e0 quelle question ? question_id \/ election_id<\/p>\n<p>Faut-il l&#8217;afficher ou non sur la page ? oui si proposition_visible = 1<br \/>\n(Note : inutile de v\u00e9rifier proposition_visible si le mode est diff\u00e9rent de 2)<\/p>\n<p>Ah, en mode 2, il faudra donc permettre \u00e0 l&#8217;utilisateur de rajouter une option et de v\u00e9rifier si l&#8217;option qu&#8217;il a choisie est ou non dans la liste invisible =&gt; si oui, hop il b\u00e9n\u00e9ficie d&#8217;une nouvelle ligne avec une case \u00e0 cocher et sa nouvelle proposition \ud83d\ude42<\/p>\n<p>Tu as une page avec les choix \u00e9lectoraux et si jamais tu veux voter pour quelqu&#8217;un qui n&#8217;est pas dans la liste, tu as une case en bas pour le rajouter.<br \/>\nAfin de ne pas ajouter n&#8217;importe qui le syst\u00e8me v\u00e9rifie que c&#8217;est bien une proposition invisible<\/p>\n<p><strong>Galactica_Ballots<\/strong><\/p>\n<p>Maintenant que le scrutin est pr\u00eat, nos \u00e9lecteurs peuvent remplir leurs bulletins de vote.<\/p>\n<p>Ces bulletins sont d\u00e9crits dans Galactica_Ballots.<\/p>\n<p>C&#8217;est dans cette table que SurfBoard fera son INSERT du token d\u00e9livr\u00e9<\/p>\n<p>ballot_created est la date de cr\u00e9ation du token (du bulletin de vote plut\u00f4t)<br \/>\nballot_validated la date \u00e0 laquelle l&#8217;\u00e9lecteur a valid\u00e9 son bulletin<\/p>\n<p>Si ballot_validated est NULL (par d\u00e9faut), cela veut dire qu&#8217;il n&#8217;a pas encore valid\u00e9 son bulletin de vote.<\/p>\n<p>Si la config de l&#8217;\u00e9lection lui interdit de modifier son bulletin apr\u00e8s validation, on v\u00e9rifie si oui ou non il y a eu validation en r\u00e9cup\u00e9rant la valeur de ballot_validated.<\/p>\n<p><strong>Galactica_Votes<\/strong><\/p>\n<p>Donc Galactica_Ballots, les bulletins de vote, et enfin ce que l&#8217;\u00e9lecteur inscrit sur son bulletin, c&#8217;est Galactica_Votes.<\/p>\n<p>Une proposition vot\u00e9e donne une ligne d&#8217;enregistrement token | n\u00b0 de la question | la proposition de son choix<\/p>\n<p>ATTENTION, dans le cadre d&#8217;une question \u00e0 choix multiple, il y aura autant n&#8217;enregistrement que de vote.<\/p>\n<h2>Sch\u00e9ma SQL<\/h2>\n<pre>CREATE TABLE `galactica_elections` \r\n  ( \r\n     `election_id`          SMALLINT(6) NOT NULL, \r\n     `election_start`       INT(11) NOT NULL, \r\n     `election_end`         INT(11) NOT NULL, \r\n     `election_titre`       VARCHAR(255) NOT NULL, \r\n     `election_description` TEXT NOT NULL, \r\n     `election_oneshot`     TINYINT(4) NOT NULL DEFAULT '0', \r\n     PRIMARY KEY (`election_id`) \r\n  ) \r\nengine=myisam \r\nDEFAULT charset=latin1; \r\n\r\nCREATE TABLE `galactica_questions` \r\n  ( \r\n     `election_id`   SMALLINT(6) NOT NULL, \r\n     `question_id`   SMALLINT(6) NOT NULL, \r\n     `question_mode` TINYINT(4) NOT NULL, \r\n     `question_x`    TINYINT(4) DEFAULT NULL, \r\n     `question_y`    TINYINT(4) DEFAULT NULL, \r\n     PRIMARY KEY (`election_id`, `question_id`) \r\n  ) \r\nengine=myisam \r\nDEFAULT charset=latin1; \r\n\r\nCREATE TABLE `galactica_propositions` \r\n  ( \r\n     `proposition_id`      MEDIUMINT(9) NOT NULL auto_increment, \r\n     `election_id`         SMALLINT(6) NOT NULL, \r\n     `question_id`         SMALLINT(6) NOT NULL, \r\n     `proposition_text`    TEXT NOT NULL, \r\n     `proposition_visible` TINYINT(4) NOT NULL DEFAULT '1', \r\n     PRIMARY KEY (`proposition_id`), \r\n     KEY `election_id` (`election_id`, `question_id`) \r\n  ) \r\nengine=myisam \r\nDEFAULT charset=latin1; \r\n\r\nCREATE TABLE `galactica_ballots` \r\n  ( \r\n     `election_id`      SMALLINT(6) NOT NULL, \r\n     `token`            VARCHAR(15) NOT NULL, \r\n     `ballot_created`   INT(11) NOT NULL, \r\n     `ballot_validated` INT(11) DEFAULT NULL, \r\n     PRIMARY KEY (`election_id`, `token`) \r\n  ) \r\nengine=myisam \r\nDEFAULT charset=latin1; \r\n\r\nCREATE TABLE `galactica_votes` \r\n  ( \r\n     `token`          VARCHAR(15) NOT NULL, \r\n     `question_id`    SMALLINT(6) NOT NULL, \r\n     `proposition_id` SMALLINT(6) NOT NULL, \r\n     KEY `token` (`token`, `question_id`) \r\n  ) \r\nengine=myisam \r\nDEFAULT charset=latin1; \r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Galactica est la nouvelle plate-forme de vote Espace Win qui entrera en fonction pour le vote de septembre.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[44],"tags":[36],"class_list":["post-44","post","type-post","status-publish","format-standard","hentry","category-divers","tag-galactica-fr"],"_links":{"self":[{"href":"https:\/\/www.dereckson.be\/blog\/wp-json\/wp\/v2\/posts\/44","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dereckson.be\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dereckson.be\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dereckson.be\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dereckson.be\/blog\/wp-json\/wp\/v2\/comments?post=44"}],"version-history":[{"count":3,"href":"https:\/\/www.dereckson.be\/blog\/wp-json\/wp\/v2\/posts\/44\/revisions"}],"predecessor-version":[{"id":598,"href":"https:\/\/www.dereckson.be\/blog\/wp-json\/wp\/v2\/posts\/44\/revisions\/598"}],"wp:attachment":[{"href":"https:\/\/www.dereckson.be\/blog\/wp-json\/wp\/v2\/media?parent=44"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dereckson.be\/blog\/wp-json\/wp\/v2\/categories?post=44"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dereckson.be\/blog\/wp-json\/wp\/v2\/tags?post=44"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}