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