Each election should only have one set of results; use UNIQUE to enforce.
[conservancy:voting.git] / vote / include / schema.sql
1 DROP TABLE IF EXISTS `elections`;
2  CREATE TABLE `elections` (
3    `id` int(11) NOT NULL auto_increment,
4    `type` enum('elections','referendum') NOT NULL default 'elections',
5    `name` varchar(150) NOT NULL default '',
6    `voting_start` datetime default NULL,
7    `voting_end` datetime default '0000-00-00 00:00:00',
8    `choices_nb` int(11) NOT NULL default '0',
9    `question` text NOT NULL,
10    PRIMARY KEY  (`id`));
11 DROP TABLE IF EXISTS `election_anon_tokens`;
12  CREATE TABLE `election_anon_tokens` (
13    `id` int(11) NOT NULL auto_increment,
14    `anon_token` varchar(200) NOT NULL default '',
15    `election_id` int(11) NOT NULL default '0',
16    PRIMARY KEY  (`id`)
17  ) ENGINE=InnoDB AUTO_INCREMENT=903 DEFAULT CHARSET=utf8;
18 DROP TABLE IF EXISTS `election_choices`;
19  CREATE TABLE `election_choices` (
20    `id` int(11) NOT NULL auto_increment,
21    `election_id` int(11) NOT NULL default '0',
22    `choice` varchar(150) NOT NULL default '',
23    PRIMARY KEY  (`id`)
24  ) ENGINE=InnoDB AUTO_INCREMENT=39 DEFAULT CHARSET=utf8 ;
25
26 /* The election_results table stores the HTML output from the openstv command.
27 ** It must be inserted manually at the end of the election.
28 */
29
30 DROP TABLE IF EXISTS `election_results`;
31  CREATE TABLE `election_results` (
32    `election_id` int(11) NOT NULL UNIQUE default '0',
33    `result` text
34  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
35
36
37 /* Data in election_tmp_tokens only lives while the election is ongoing, and
38 ** the PHP code deletes these entries when it records votes.
39 */
40
41 DROP TABLE IF EXISTS `election_tmp_tokens`;
42  CREATE TABLE `election_tmp_tokens` (
43    `election_id` int(11) NOT NULL default '0',
44    `member_id` int(11) NOT NULL default '0',
45    `tmp_token` varchar(200) NOT NULL default ''
46  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
47
48 /* Not good normal form in election_voters table; there will be duplicates on
49 ** the email_address, but we think of a election_voter_id as a identity tied a
50 ** specific election. */
51
52 DROP TABLE IF EXISTS `election_voters`;
53 CREATE TABLE `election_voters` (
54    `id` int(11) NOT NULL auto_increment,
55    `election_id` int(11) NOT NULL default '0',
56    `email_address` varchar(500) NOT NULL default '',
57    PRIMARY KEY  (`id`));
58
59
60 /* 
61 from each voter we prepare anon tokens
62  then insert those anon tokens to database 
63  of course before a new election record should be created since its id is needed for anon_tokens
64  and election_choices are to be inserted
65  rest is handled by itself iirc 
66 <bolsh> There's "election_votes" and "foundationmembers" too
67  I'm not sure if there's a join done between foundationmembers and the other tables
68 */
69
70 DROP TABLE IF EXISTS `election_votes`;
71 CREATE TABLE `election_votes` (
72    `id` int(11) NOT NULL auto_increment,
73    `choice_id` int(11) NOT NULL default '0',
74    `anon_id` int(11) NOT NULL default '0',
75    `preference` int(11) NOT NULL default '0',
76    PRIMARY KEY  (`id`));
77