Files
qv/sql/init.sql
2024-12-26 16:51:16 +01:00

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