105 lines
2.9 KiB
PL/PgSQL
105 lines
2.9 KiB
PL/PgSQL
/* SCORE TRACKER DATABASE LAYOUT
|
|
|
|
scores:
|
|
|
|
sports:
|
|
*sport_id* | sport_name | currently_active
|
|
|
|
divisions:
|
|
*division_id* | division_name | gender | *sport_id* | currently_active
|
|
|
|
teams:
|
|
*team_id* | team_name | ~sport_id~ | currently_active
|
|
|
|
seasons:
|
|
*season_id* | school_year
|
|
|
|
games:
|
|
*game_id* | ~division_id~ | ~season_id~ | game_date | ~team1_id~ | ~team2_id~ | team1_score | team2_score | ~submitter_id~ | updated_timestamp
|
|
|
|
|
|
|
|
accounts:
|
|
|
|
users:
|
|
*user_id* | email | salt | password_hash | role | approved
|
|
|
|
sessions:
|
|
*session_id* | ~user_id~ | expiration_date
|
|
|
|
*/
|
|
|
|
|
|
BEGIN;
|
|
|
|
|
|
CREATE SCHEMA IF NOT EXISTS scores;
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS scores.sports(
|
|
sport_id BIGINT GENERATED ALWAYS AS IDENTITY,
|
|
sport_name TEXT UNIQUE NOT NULL,
|
|
currently_active BOOLEAN DEFAULT TRUE,
|
|
PRIMARY KEY(sport_id)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS scores.divisions(
|
|
division_id BIGINT GENERATED ALWAYS AS IDENTITY,
|
|
division_name TEXT NOT NULL,
|
|
gender VARCHAR(1) CHECK (gender IN ( 'F', 'M' ) ),
|
|
sport_id BIGINT,
|
|
currently_active BOOLEAN DEFAULT TRUE,
|
|
PRIMARY KEY(division_id),
|
|
CONSTRAINT fk_sport
|
|
FOREIGN KEY(sport_id)
|
|
REFERENCES scores.sports(sport_id)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS scores.teams(
|
|
team_id BIGINT GENERATED ALWAYS AS IDENTITY,
|
|
team_name TEXT NOT NULL,
|
|
sport_id BIGINT,
|
|
currently_active BOOLEAN DEFAULT TRUE,
|
|
PRIMARY KEY(team_id),
|
|
CONSTRAINT fk_sport
|
|
FOREIGN KEY(sport_id)
|
|
REFERENCES scores.sports(sport_id)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS scores.seasons(
|
|
season_id BIGINT GENERATED ALWAYS AS IDENTITY,
|
|
school_year INTEGER NOT NULL,
|
|
PRIMARY KEY(season_id)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS scores.games(
|
|
game_id BIGINT GENERATED ALWAYS AS IDENTITY,
|
|
division_id BIGINT,
|
|
season_id BIGINT,
|
|
game_date DATE,
|
|
team1_id BIGINT,
|
|
team2_id BIGINT,
|
|
team1_score INTEGER,
|
|
team2_score INTEGER,
|
|
/* submitter_id BIGINT,*/
|
|
updated_timestamp TIMESTAMP WITH TIME ZONE DEFAULT now(),
|
|
PRIMARY KEY(game_id),
|
|
CONSTRAINT fk_division
|
|
FOREIGN KEY(division_id)
|
|
REFERENCES scores.divisions(division_id),
|
|
CONSTRAINT fk_season
|
|
FOREIGN KEY(season_id)
|
|
REFERENCES scores.seasons(season_id),
|
|
CONSTRAINT fk_team1
|
|
FOREIGN KEY(team1_id)
|
|
REFERENCES scores.teams(team_id),
|
|
CONSTRAINT fk_team2
|
|
FOREIGN KEY(team2_id)
|
|
REFERENCES scores.teams(team_id)
|
|
/* CONSTRAINT fk_submitter
|
|
FOREIGN KEY(submitter_id)
|
|
REFERENCES accounts.users(user_id)*/
|
|
);
|
|
|
|
|
|
COMMIT; |