Documento

Tabelle Derivate e di Relazione

Tabelle derivate — Analisi Infortuni

Queste tabelle sono calcolate a partire dai dati Transfermarkt + partite, per collegare ogni infortunio alle partite effettivamente saltate.

db_player_injuries (~18.500 righe)

Versione “pulita” degli infortuni, assegnati alla stagione corretta.

Colonna Descrizione
player_id FK verso players
season_id Stagione
condition_id FK verso condition_types
from_date / until_date Periodo
days Giorni di assenza

db_missed_matches_injury (~28.900 righe)

La tabella chiave per l’analisi infortuni: collega ogni infortunio alle singole partite saltate.

Colonna Descrizione
player_id FK verso players
season_id Stagione
match_id FK verso matches — la partita saltata
team_id FK verso clubs — la squadra del giocatore
injury_id FK verso db_player_injuries

Esempio — Quante partite ha saltato un giocatore per infortunio in una stagione:

SELECT p.name, COUNT(*) AS partite_saltate FROM db_missed_matches_injury dmi JOIN players p ON dmi.player_id = p.id WHERE dmi.season_id = '2024' GROUP BY p.id ORDER BY partite_saltate DESC LIMIT 10;

Tabelle di relazione

player_club_periods (~31.000 righe)

Storico di appartenenza dei giocatori ai club (da Transfermarkt).

Colonna Descrizione
player_id FK verso players
club_id FK verso clubs
date_from Inizio periodo
date_until Fine periodo (NULL = ancora al club)

Unique: (player_id, club_id, date_from) — un giocatore può tornare allo stesso club.

season_club_players (~9.200 righe)

Indica chi ha giocato per quale club in quale stagione. Tabella ponte molti-a-molti-a-molti.

serie_a_clubs_seasons (220 righe)

Quali club hanno partecipato alla Serie A in ogni stagione. 20 club x 11 stagioni = 220.


Tabelle precomputed — Cache ML

player_match_precomputed (~103.000 righe)

Precalcola tutte le join costose usate da v_player_match_stats (altrimenti valutate ~103k volte ad ogni export). Una riga per fc_player_match_id.

Gruppo Colonne
Mercato tm_market_value — valore di mercato Transfermarkt più recente alla data della partita
Infortuni inj_injured, inj_injury_type, inj_injury_name — stato infortunio attivo alla data
Squadra (us_t_) xG, xGA, npxG, npxGA, ppda_att/def, deep, xpts, npxGD, wins/draws/loses/pts
Avversario (us_opp_) Stesse metriche dell’avversario
Tiri Understat (us_s_) Per tipo (rightfoot/leftfoot/head/other): conteggio + avg minuto + avg x + avg y + avg xG; per risultato (goal/saved/missed/blocked/on_post/own_goal): conteggio; per situazione (open_play/set_piece/from_corner/direct_freekick/penalty): conteggio

Aggiornare con cd transformations/migrations && uv run python refresh_precomputed.py dopo ogni aggiornamento dei dati sorgente.

player_match_stats (~103.000 righe)

Materializzazione completa di v_player_match_stats — la tabella da usare per ML e export. Una riga = un giocatore in una partita, con tutti i dati uniti da tutte le fonti.

Aggiornare con cd transformations/migrations && uv run python ../refresh_player_match_stats.py dopo aver aggiornato player_match_precomputed.