Files
WFL/wfl.sql

85 lines
2.5 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,
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);