34 lines
1.1 KiB
SQL
34 lines
1.1 KiB
SQL
CREATE TABLE election (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name TEXT NOT NULL,
|
|
tokens INTEGER NOT NULL,
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE choices (
|
|
text TEXT NOT NULL,
|
|
election_id INTEGER NOT NULL,
|
|
PRIMARY KEY (text, election_id),
|
|
FOREIGN KEY (election_id) REFERENCES election (id)
|
|
);
|
|
|
|
CREATE TABLE voters (
|
|
passcode TEXT NOT NULL,
|
|
election_id INTEGER NOT NULL,
|
|
PRIMARY KEY (passcode, election_id),
|
|
FOREIGN KEY (election_id) REFERENCES election (id)
|
|
);
|
|
|
|
CREATE TABLE votes (
|
|
voter_passcode TEXT NOT NULL,
|
|
election_id INTEGER NOT NULL,
|
|
choice_text TEXT NOT NULL,
|
|
tokens INTEGER NOT NULL,
|
|
calculated_vote_count GENERATED ALWAYS AS (sqrt(tokens)) VIRTUAL,
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (voter_passcode, choice_text),
|
|
FOREIGN KEY (voter_passcode, election_id) REFERENCES voters (passcode, election_id),
|
|
FOREIGN KEY (choice_text, election_id) REFERENCES choices (text, election_id)
|
|
);
|
|
|
|
PRAGMA foreign_keys = ON; -- run after opening the connection so foreign key constraints are checked |