88 lines
2.6 KiB
SQL
88 lines
2.6 KiB
SQL
-- =========================
|
|
-- TEAMS
|
|
-- =========================
|
|
CREATE TABLE teams (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
external_id VARCHAR(100) UNIQUE,
|
|
name VARCHAR(255) NOT NULL,
|
|
short_name VARCHAR(100),
|
|
logo_url TEXT,
|
|
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
CREATE INDEX idx_teams_external_id ON teams(external_id);
|
|
|
|
|
|
-- =========================
|
|
-- PLAYERS
|
|
-- =========================
|
|
CREATE TABLE players (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
external_id VARCHAR(100) UNIQUE,
|
|
team_id BIGINT NOT NULL REFERENCES teams(id) ON DELETE CASCADE,
|
|
full_name VARCHAR(255) NOT NULL,
|
|
first_name VARCHAR(100),
|
|
last_name VARCHAR(100),
|
|
number VARCHAR(20),
|
|
position VARCHAR(50),
|
|
birth_date DATE,
|
|
photo TEXT,
|
|
photo_enabled BOOLEAN NOT NULL DEFAULT FALSE,
|
|
video TEXT,
|
|
height_cm INTEGER,
|
|
weight_kg INTEGER,
|
|
is_active BOOLEAN NOT NULL DEFAULT TRUE,
|
|
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
CREATE INDEX idx_players_team_id ON players(team_id);
|
|
CREATE INDEX idx_players_external_id ON players(external_id);
|
|
|
|
|
|
-- =========================
|
|
-- MATCHES (расписание)
|
|
-- =========================
|
|
CREATE TABLE matches (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
external_id VARCHAR(100) UNIQUE,
|
|
home_team_id BIGINT NOT NULL REFERENCES teams(id),
|
|
away_team_id BIGINT NOT NULL REFERENCES teams(id),
|
|
match_date TIMESTAMP,
|
|
status VARCHAR(50) NOT NULL DEFAULT 'scheduled',
|
|
home_score INTEGER,
|
|
away_score INTEGER,
|
|
tour VARCHAR(100),
|
|
season VARCHAR(50),
|
|
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
CREATE INDEX idx_matches_external_id ON matches(external_id);
|
|
CREATE INDEX idx_matches_season ON matches(season);
|
|
CREATE INDEX idx_matches_date ON matches(match_date);
|
|
|
|
|
|
-- =========================
|
|
-- STANDINGS (таблица турнира)
|
|
-- =========================
|
|
CREATE TABLE standings (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
team_id BIGINT NOT NULL REFERENCES teams(id) ON DELETE CASCADE,
|
|
season VARCHAR(50) NOT NULL,
|
|
played INTEGER NOT NULL DEFAULT 0,
|
|
wins INTEGER NOT NULL DEFAULT 0,
|
|
losses INTEGER NOT NULL DEFAULT 0,
|
|
draws INTEGER NOT NULL DEFAULT 0,
|
|
points_for INTEGER NOT NULL DEFAULT 0,
|
|
points_against INTEGER NOT NULL DEFAULT 0,
|
|
points INTEGER NOT NULL DEFAULT 0,
|
|
position INTEGER,
|
|
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
UNIQUE(team_id, season)
|
|
);
|
|
|
|
CREATE INDEX idx_standings_season ON standings(season);
|