voting/vote/include/schema.sql

77 lines
2.8 KiB
SQL

DROP TABLE IF EXISTS `elections`;
CREATE TABLE `elections` (
`id` int(11) NOT NULL auto_increment,
`type` enum('elections','referendum') NOT NULL default 'elections',
`name` varchar(150) NOT NULL default '',
`voting_start` datetime default NULL,
`voting_end` datetime default '0000-00-00 00:00:00',
`choices_nb` int(11) NOT NULL default '0',
`question` text NOT NULL,
PRIMARY KEY (`id`));
DROP TABLE IF EXISTS `election_anon_tokens`;
CREATE TABLE `election_anon_tokens` (
`id` int(11) NOT NULL auto_increment,
`anon_token` varchar(200) NOT NULL default '',
`election_id` int(11) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=903 DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `election_choices`;
CREATE TABLE `election_choices` (
`id` int(11) NOT NULL auto_increment,
`election_id` int(11) NOT NULL default '0',
`choice` varchar(150) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=39 DEFAULT CHARSET=utf8 ;
/* The election_results table stores the HTML output from the openstv command.
** It must be inserted manually at the end of the election.
*/
DROP TABLE IF EXISTS `election_results`;
CREATE TABLE `election_results` (
`election_id` int(11) NOT NULL UNIQUE default '0',
`result` text
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/* Data in election_tmp_tokens only lives while the election is ongoing, and
** the PHP code deletes these entries when it records votes.
*/
DROP TABLE IF EXISTS `election_tmp_tokens`;
CREATE TABLE `election_tmp_tokens` (
`election_id` int(11) NOT NULL default '0',
`member_id` int(11) NOT NULL default '0',
`tmp_token` varchar(200) NOT NULL default ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/* Not good normal form in election_voters table; there will be duplicates on
** the email_address, but we think of a election_voter_id as a identity tied a
** specific election. */
DROP TABLE IF EXISTS `election_voters`;
CREATE TABLE `election_voters` (
`id` int(11) NOT NULL auto_increment,
`election_id` int(11) NOT NULL default '0',
`email_address` varchar(500) NOT NULL default '',
PRIMARY KEY (`id`));
/*
from each voter we prepare anon tokens
then insert those anon tokens to database
of course before a new election record should be created since its id is needed for anon_tokens
and election_choices are to be inserted
rest is handled by itself iirc
<bolsh> There's "election_votes" and "foundationmembers" too
I'm not sure if there's a join done between foundationmembers and the other tables
*/
DROP TABLE IF EXISTS `election_votes`;
CREATE TABLE `election_votes` (
`id` int(11) NOT NULL auto_increment,
`choice_id` int(11) NOT NULL default '0',
`anon_id` int(11) NOT NULL default '0',
`preference` int(11) NOT NULL default '0',
PRIMARY KEY (`id`));