diff --git a/sql/init.sql b/sql/init.sql new file mode 100644 index 0000000..1bcc306 --- /dev/null +++ b/sql/init.sql @@ -0,0 +1,34 @@ +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 \ No newline at end of file