Write database schema
This commit is contained in:
34
sql/init.sql
Normal file
34
sql/init.sql
Normal file
@ -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
|
Reference in New Issue
Block a user