aboutsummaryrefslogtreecommitdiff
path: root/private/Model/fresh.sql
diff options
context:
space:
mode:
authorKevin J Hoerr <kjhoerr@protonmail.com>2017-07-08 11:11:53 -0400
committerKevin J Hoerr <kjhoerr@protonmail.com>2017-07-08 11:11:53 -0400
commit2d796d48df6f4371111bcbc776ea781e4f45c831 (patch)
tree8b70da2114d71d2835b2f58eb2d43083a3ff5a6f /private/Model/fresh.sql
parent3b75177580e536ce309d44759eb4d1f772c987ce (diff)
downloadaugust-offensive-2d796d48df6f4371111bcbc776ea781e4f45c831.tar.gz
august-offensive-2d796d48df6f4371111bcbc776ea781e4f45c831.tar.bz2
august-offensive-2d796d48df6f4371111bcbc776ea781e4f45c831.zip
Expand on query and result, begin sql design
Diffstat (limited to 'private/Model/fresh.sql')
-rw-r--r--private/Model/fresh.sql103
1 files changed, 103 insertions, 0 deletions
diff --git a/private/Model/fresh.sql b/private/Model/fresh.sql
new file mode 100644
index 0000000..f39b360
--- /dev/null
+++ b/private/Model/fresh.sql
@@ -0,0 +1,103 @@
+ -- fresh.sql: SQL script that creates the tables used by AO
+ -- please drop all tables in db before initiating unless told otherwise
+
+ -- uncomment the following two lines to automatically drop all tables
+--DROP SCHEMA "public" CASCADE;
+--CREATE SCHEMA "public";
+
+CREATE OR REPLACE FUNCTION public.GETDATE() RETURNS TIMESTAMPTZ
+ STABLE LANGUAGE SQL AS 'SELECT NOW()';
+
+ -- base table for users
+CREATE TABLE users (
+ userid SERIAL,
+ email VARCHAR(40) UNIQUE NOT NULL,
+ firstname VARCHAR(20) NOT NULL,
+ lastname VARCHAR(20) NOT NULL,
+ password VARCHAR(255) NOT NULL, -- intend to use bcrypt hash through PHP
+ games INTEGER DEFAULT 0, -- simple tracking statistics
+ wins INTEGER DEFAULT 0, -- "
+ joindate DATE DEFAULT GETDATE(),
+ activated BIT(1) DEFAULT B'0', -- see activation_keys table
+ PRIMARY KEY (userid)
+);
+
+ -- when activation is completed, key gets deleted and activated bit for user gets flipped to 1.
+CREATE TABLE activation_keys (
+ code VARCHAR(128),
+ userid SERIAL,
+ PRIMARY KEY (code),
+ CONSTRAINT activation_keys_userid
+ FOREIGN KEY (userid) REFERENCES users(userid)
+);
+
+ -- base table for games
+CREATE TABLE games (
+ gameid SERIAL,
+ title VARCHAR(140) NOT NULL,
+ gametypeid SERIAL NOT NULL, -- future proofing: suppose different game types
+ players SMALLINT NOT NULL, -- number of players in a game
+ waitfor INTEGER NOT NULL, -- time in seconds to wait for player to complete a turn
+ lastturn DATE DEFAULT GETDATE(),
+ gamestate INTEGER DEFAULT 1,
+ PRIMARY KEY (gameid)
+);
+
+ -- associative table: many users, many games
+CREATE TABLE allegiances (
+ gameid SERIAL,
+ userid SERIAL,
+ allegiance VARCHAR(140), -- important/unimportant role for user (depends on gametype)
+ ordernum SMALLINT NOT NULL, -- user # spot in game
+ playing SMALLINT DEFAULT 1, -- default is binary: 0 means player OOP
+ PRIMARY KEY (gameid, userid),
+ CONSTRAINT users_games_gameid
+ FOREIGN KEY (gameid) REFERENCES games(gameid),
+ CONSTRAINT users_games_userid
+ FOREIGN KEY (userid) REFERENCES users(userid)
+);
+
+ -- Regions are composed of nationstates
+CREATE TABLE regions (
+ regionid SERIAL,
+ name VARCHAR(64) NOT NULL,
+ abbreviation CHAR(2),
+ bonus INTEGER NOT NULL,
+ PRIMARY KEY (regionid)
+);
+
+ -- base table for nationstates
+CREATE TABLE nationstates (
+ nationid SERIAL,
+ regionid SERIAL,
+ name VARCHAR(64) NOT NULL,
+ abbreviation CHAR(4),
+ PRIMARY KEY (nationid),
+ CONSTRAINT nationstates_regionid
+ FOREIGN KEY (regionid) REFERENCES regions(regionid)
+);
+
+ -- nationstates border nationstates
+CREATE TABLE borders (
+ nationid SERIAL,
+ borderid SERIAL,
+ PRIMARY KEY (nationid, borderid),
+ CONSTRAINT borders_nationid
+ FOREIGN KEY (nationid) REFERENCES nationstates(nationid),
+ CONSTRAINT borders_borderid
+ FOREIGN KEY (borderid) REFERENCES nationstates(nationid)
+);
+
+ -- associative table: many games, many nationstates. Users control them.
+CREATE TABLE games_nationstates (
+ gameid SERIAL,
+ nationid SERIAL,
+ userid SERIAL, -- owner of nationstate for particular game
+ PRIMARY KEY (gameid, nationid),
+ CONSTRAINT games_nationstates_gameid
+ FOREIGN KEY (gameid) REFERENCES games(gameid),
+ CONSTRAINT games_nationstates_nationid
+ FOREIGN KEY (nationid) REFERENCES nationstates(nationid),
+ CONSTRAINT games_nationstates_userid
+ FOREIGN KEY (userid) REFERENCES users(userid)
+);